🌴 前言
最近有个大作业,里面要求我们部署Hoenyd蜜罐,在网上搜了一通,发现相关的教程竟然少的可怜,即使有比较详细的教程,也是好几年前的了,跟着做一遍报一堆错,无奈之下,自己研究了好几天,于是有了这篇教程。
🍁 本地上传依赖文件
scp -r ~/Downloads/honeyd/ root@服务器IP:~/honeyd # 一键上传文件
⚠️:注意请将文件路径替换成你本地的文件路径,以及将服务器IP替换成你服务器的具体IP
以上命令是使用scp将本地下载好的依赖文件上传到服务器,依赖文件主要有:
libevent
:非同步事件通知的函数库
libdnet
:提供跨平台的网络相关的API函数库
libpcap
:一个数据包捕获函数库,大多数网络软件都以它为基础
zlib
: 开源的、高效的数据压缩库(呃,这个可能不需要,看参考帖中有这个库,因此加上)
Honeyd
: honeyd源代码,注意这是从github上下载的开发者版本,而不是官网上的honeyd-1.5c
依赖文件已上传到百度网盘,网盘链接:依赖文件
🌱 服务器部署Honeyd
🎉 部署前准备
连接服务器,建议用本地终端ssh远程连接。
第一步当然是先更新软件源:sudo apt update
然后安装依赖,这里将所有依赖写入一条指令中了,可以方便一键安装依赖:
sudo apt install automake libtool g++ gcc flex bison libedit-dev unzip libssl-dev -y # 一键安装依赖
第三步,将刚才上传的依赖文件解压缩,进入~/honeyd目录,依次将压缩文件解压缩,以下是不同压缩格式文件的解压命令:
tar -zxvf 文件名.tar.gz
tar -Jxvf 文件名.tar.xz
unzip -o -d ./ 文件名.zip
🎉 编译安装依赖文件
除了Honeyd-master外,其他四个库的编译安装只需要执行三部曲,即进入编译文件目录,执行 ./configure
、sudo make
、make install
,如下:
OK,到以上应该都没有问题,下面开始编译安装honeyd。
首先,需要先执行./autogen.sh
,以生成configure
文件。
执行./configure
,报错如下:
这是因为虽然我们刚才手动编译安装了libevent,但是编译器找不到它,需要我们在手动指定libevent的编译路径,如下:
./configure --with-libevent=/usr/local/lib CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib"
执行完上述命令后,出现新的报错,如下:
尝试手动将/usr/local/include
下的event.h复制到/usr/local/lib
下,指令如下:
cp /usr/local/include/event.h /usr/local/lib
重新执行刚才的configure指令,问题解决。
执行make
,报错如下:
意思是出现“变量重复定义”问题,仔细阅读编译信息之后,尝试过在第一次声明这些变量的头文件中加上条件编译,并在变量名前面加上extern声明,如下:
#ifndef HONEYD_H
#define HONEYD_H
extern struct event_base *libevent_base;
#endif
然而并没有什么用处。
在网上找了一下这个报错问题的解决,找到一篇帖子,照着做了依旧没有什么用,就当我准备放弃的时候,我习惯性的翻了翻评论区,点击“被折叠评论”,看到这样一条评论:
照着做了,果然不再报错了,虽然这个方法可能不是那么规范,但是确是最省事、目前我找到唯一有用的解决方法,姑且照做吧,“自古评论区出人才”诚不欺我!
要修改的头文件如下:
修改的地方请阅读刚才make
编译链接时的报错信息,由于报错信息中有很多条都是关于同一个头文件的同一个变量在不同C源文件中的重复定义,因此可以对报错信息进行删减,我的方法是将报错信息复制到Vscode里面,删除涉及重复变量的报错,最后得到不含重复变量的报错信息:
可以看到,要修改honeyd.h
的第59行,修改如下:
再比如修改stats.h
,报错信息里说的是96行,但实际是加在第94,我相信聪明的广大程序员朋友应该不会这么死板吧。
照着上面的做法,将报错涉及到的所有头文件里面的重复定义变量前面加上static
,完成以上步骤之后,执行make clean && make
重新编译,此时编译应该不会再有问题。
执行make install
,报错如下:
执行下面指令建立python3和python2的符号链接:
sudo ln -s /usr/bin/python3 /usr/bin/python
重新make install
,报错如下:
这是因为Python 2允许0666(八进制)和666(十进制)两种写法,而Python 3严格要求八进制,必须用0o666表示。手动修改init.py,vim ./scripts/lib/init.py
,修改如下:
重新make install
,此时应不再报错。
执行honeyd
验证,报错如下:
依次执行下面指令:
# 进入目录并创建链接
cd /usr/local/lib/
sudo ln -sf libdnet.1 libdnet.so.1
sudo ln -sf libdnet.1.0.1 libdnet.so.1.0.1
# 刷新动态库缓存
sudo ldconfig
重新验证,成功。
🌿 总结
以上内容全是干货,几乎不带个人情感,下面请允许我抒发一下个人情感。这篇文章写下来也就40分钟不到,但是为了部署这个honeyd,我花了将近4天,从早到晚在解决这个问题,几乎就没干其他事情了。事实上,本来在第2天,我就阴差阳错地部署成功了,但当时思绪极其混乱,我看了好几篇帖子,问了好多AI,因此非常具有偶然性,我自己都不知道我是怎么部署成功的,没办法,强迫症犯了,怎么可以这么不明不白?!于是我重装了系统,重头开始重新部署,于是便是噩梦的开始,怎么都无法复现了!我当时真想抽自己几个耳光,但没办法,只能硬着头皮继续查资料,尝试了n种方法,重装了n遍系统,其背后之艰辛,只有我一个人知道。事实上,最后如果没有看到那位老哥的评论,可能还需要花更长的时间,这怎么不能说是一种幸运呢,有时候运气也是在学习过程中的一大乐趣,我深以为然。当今天下午成功复现了几次部署之后,我顿感神清气爽,走路都是飘的,天好蓝,草好绿!总的来说,虽然费了很多时间,做了好多无用功,但也收获了很多,首先就是网上关于这方面的教程少之又少,要么年代久远,要么不够详细,我也算是填补了这一“空白”,其次就是我对于编译项目有了更多的经验,知道如何去定位错误以及解决错误,最后是我明白了一个道理,那就是在学习过程中,于我而言,就是在学习计算机的过程中,要能坐得住冷板凳,要有耐心,像一个侦探一样细心关注每一个蛛丝马迹,最终解决一个看似不可能的问题。翻越一座座高山,在不断地历经艰辛后收获正反馈,也许这就是我学习计算机当中最大的乐趣!