我执行的环境是Mac OSX
例子代码地址:
main.go
此代码例子是展示 gopacket 和pcap 和tcpassembly。
gopacket的pcap是调用的c库libpcap。
原始代码片段1
var iface = flag.String("i", "eth0", "Interface to get packets from")
我在Mac下面网卡名称改成: en0。
这个含义是从 eth0(我的是en0)网卡抓包。
代码片段2
var snaplen = flag.Int("s", 1600, "SnapLen for pcap packet capture")
var filter = flag.String("f", "tcp and dst portrange 80-443", "BPF filter for pcap")
源代码只监听TCP 80端口,我改成了80--443;
因为我没有找到设置80,443两个端口的方法,pcap提供监听一个范围。
我想监听http和https。
代码片段3
handle, err = pcap.OpenLive(*iface, int32(*snaplen), true, pcap.BlockForever)
实时监听网卡
if err := handle.SetBPFFilter(*filter); err != nil {
只监听 en0 80-443 端口
packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
packets := packetSource.Packets()
读取packet。通过for +select 循环读取,并用 assembler处理。
tcp := packet.TransportLayer().(*layers.TCP)
assembler.AssembleWithTimestamp(packet.NetworkLayer().NetworkFlow(), tcp, packet.Metadata().Timestamp)
网友评论