1. 使用scapy ,但是这个在macos上安装比较麻烦,没有多试
2. 使用pypcap, 这个相对上手容易
1 #coding:utf8 2 __author__ = 'yeyong' 3 import dpkt 4 import pcap 5 6 sniffer = pcap.pcap(name="en0") #name parameter => interface name 7 sniffer.setfilter("tcp") #filter sentence 8 cur_timestamp = 0 9 c=0 10 caplen = 0 11 for packet_time,packet_data in sniffer: 12 packet_time = int(packet_time) 13 if cur_timestamp == packet_time: 14 c +=1 15 caplen += len(packet_data) 16 else: 17 print cur_timestamp, c, caplen 18 cur_timestamp = packet_time 19 c=0 20 caplen = 0
# packet = dpkt.ethernet.Ethernet(packet_data)#二层数据报文嘛
# print "SRC IP:%d.%d.%d.%d"%tuple(map(ord,list(packet.data.src)))
# print "DST IP:%d.%d.%d.%d"%tuple(map(ord,list(packet.data.dst)))
# print "SRC PORT:%s"%packet.data.data.sport
# print "DST PORT:%s"%packet.data.data.dport
需要确认一下性能,因为实际场景上一秒可能有10MB的流量,不知道这个能否撑住
另外还需要解包拿到sip, dport等
3. packetbeat应该已经实现了并且性能不错,但是我只需要很简单的一部分功能,需要剥离相关代码,需要花费时间,如果2不太好办,可以试试
4. https://www.2cto.com/kf/201204/125809.html https://www.cnblogs.com/qiyeboy/p/9033707.html等也有方案,但是需要确认linux下如何监听指定的端口