本文档记录流量分析工具 zeek 的安装过程以及如何使用它来分析 pcap 流量文件
环境:ubuntu22、Anaconda(conda)22.9.0、python 3.9
在具备以上环境后,开始在unbuntu系统下安装流量分析工具 zeek
sudo apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python3 python3-dev swig zlib1g-dev
依赖安装完成:
官网链接:zeek官网
下载完文件名为 zeek-5.0.4.tar.gz。然后通过xftp将该文件上传至ubuntu中。
tar -zxvf zeek-5.0.4.tar.gz
解压完成:
解压完成多了一个 zeek-5.0.4 的文件夹
./configure
make
make install ——> 应该用 sudo make install
编译过程:(耗时较长)
编译完成:(历时1小时25分钟)
执行 make install:
但出现错误:
在查阅一些解决办法后,将 make install 改为 sudo make install:
发现编译成功:
至此,zeek工具安装成功!
执行命令 sudo vim /etc/profile 进入配置文件,添加zeek的bin目录:
然后执行 source /etc/profile 来使配置文件生效
需要将(/usr/local/zeek/etc/node.cfg)网络接口修改为自己电脑上的接口(否则后面会出现邮件无法发送的错误)
先查看自己电脑(虚拟机 ubuntu)的接口:为 ens33
然后执行 sudo vim node.cfg 来编辑该文件,修改接口:
使用 ip addr 查看:
然后进入 /usr/local/zeek/etc/networks.cfg 修改:
进入 /usr/local/zeek/bin 目录,执行命令:sudo python zeekctl
但出现错误:
虽然已经成功安装 Anaconda,具备python环境,但在该目录下执行 python 命令,不能识别python环境,因此可以加上 python环境的绝对路径,通过 which python 来找到该路径:/home/hxh/anaconda3/bin/python
再执行 sudo /home/hxh/anaconda3/bin/python zeekctl
发现成功进入zeek:
执行 start 命令:
开启成功:
启动之后它就会一直运行下去,如果想停止Zeek实例,可以命令:stop
sudo ./zeek local -r xxx.pcap或者sudo ./zeek local -r xxx.pcap LogAscii::use_json=T(生成json格式)
解析完可以得到log日志文件
如果想要将一个pcap文件解析得到的日志文件存储在一个文件夹下:(具体可看代码批量执行)
则可以使用:
若存在在 tmp_data/train(当前在 /home/hxh)
cd ./tmp_data/train/; mkdir {logdir}; cd {logdir} ; zeek local -C -r {file} FilteredTraceDetection::enable=F tcp_attempt_delay=100sec tcp_close_delay=12min
其中 logfile表示日志文件夹名 file表示具体的pcap文件:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gitpython semantic-version
通过 pip 安装 zkg:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple zkg
github链接:zeek-flowmeter zeek-flowN 里面有详细的教程
首先找到 zeekscriptdir,可以通过执行命令 zeekctl config | grep zeekscriptdir 找到具体路径
然后在 /share/zeek/site/ 下创建文件夹,将scripts中的zeek文件复制进去
同理,也将 zeek-flowN中scripts里的文件复制进去
创建两个文件夹:
将 zeek 脚本添加进去:
注意在完成添加脚本这一步后,还需要在 /usr/local/zeek/share/zeek/site/ 路径下编辑 local.zeek文件,添加
@load flowmeter 和 @load flowN 才能够自动调用脚本
不知道为啥,会出现如下错误:
所以我把那两行注释了,没什么影响
如此,再次调用命令,就能得到 flowmeter.log和flowN.log
可以看到,这里却没有了 conn.log (不知道为啥)
那么,可以先将 local.zeek 里面的 @load flowmeter 和 @load flown 先注释掉,执行python文件,得到conn.log以及其他log,取消注释,再执行,得到flowmeter.log和flown.log
以上方式不行,因为两次执行 conn.log 与 flowmeter.log、flowN.log 中的流指纹(uid)不一样,在后续无法进行拼接。
再次尝试只将 @load flowN 注释,发现有 conn.log 和 flowmeter.log: