快速实现python抓包嗅探

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下如何监听指定的端口