背景
使用谷歌的包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()获取
 验证可行
