背景
使用谷歌的包github.com/google/gopacket 可以用golang实现网络抓包
这里记录了一些使用过程中的问题 以及解决方法
备忘 也欢迎大家提出改进意见
问题
- 由于gopacket是基于libpcap(数据包捕获函数库)的,所以在一台服务器上使用gopacket必须先安装libpcap
sudo apt-get install libpcap-dev
如果想要集成到自己服务的deb包中 当然可以将这个包包含进去
我这里的处理方法是 找到缺失文件 在安装自己的deb包过程中将缺失文件复制到了目标服务器内
这里使用了gopacket之后的服务启动后会收到如下报警
error while loading shared libraries: libpcap.so.0.8: cannot open...
我在本地找到了这个文件
复制了这里的1.5.3 重命名为0.8放进了deb包中
验证可行
2.抓取的数据非实时 有一定延时
使用pcap.OpenLive()函数生成了handle
定义gopacket.NewPacketSource(handle, handle.LinkType())为packetSource
在packetSource.Packets()的过程中会有一定的延时 并没有实时获取抓包信息
查看godoc文档 https://www.godoc.org/github.com/google/gopacket/pcap#Handle
发现func (*InactiveHandle) SetImmediateMode 可以设置实时获取
将handle变成通过InactiveHandle.Activate()获取
验证可行