Python中的数据包嗅探(Windows)
使用Python嗅探网络数据包的最佳方法是什么?
我从几个地方听说,最好的模块是一个名为Scapy的模块,不幸的是,它使python.exe在我的系统上崩溃。我认为这只是我的安装方式的问题,除了许多其他人告诉我,它在Windows上不能很好地工作。(如果有人感兴趣,我正在运行WindowsVista,这可能会影响某些事情)。
有谁知道更好的解决方案?
UPD:
阅读了告诉我要安装PyPcap的答案后,我有点弄乱了,发现我尝试使用的Scapy告诉我也要安装PyPcap,只是它是使用的修改版。显然是因为修改后的PyPcap导致了问题,因为答案中的示例也导致了挂起。
我安装了原始版本的PyPcap(来自Google网站),Scapy开始正常运行(我没有尝试很多事情,但是至少当我开始嗅探时,它并没有崩溃)。我向Scapy开发人员发送了一张新的缺陷票:http
://trac.secdev.org/scapy/ticket/166 ,希望他们能对此做些事情。
无论如何,只是以为我会让大家知道。
-
使用pypcap:
import dpkt, pcap pc = pcap.pcap() # construct pcap object pc.setfilter('icmp') # filter out unwanted packets for timestamp, packet in pc: print dpkt.ethernet.Ethernet(packet)
输出样本:
Ethernet(src='\x00\x03G\xb2M\xe4', dst='\x00\x03G\x06h\x18', data=IP(src='\n\x00\x01\x1c', dst='\n\x00\x01\x10', sum=39799, len=60, p=1, ttl=128, id=35102, data=ICMP(sum=24667, type=8, data=Echo(id=512, seq=60160, data='abcdefghijklmnopqrstuvwabcdefghi')))) Ethernet(src='\x00\x03G\x06h\x18', dst='\x00\x03G\xb2M\xe4', data=IP(src='\n\x00\x01\x10', dst='\n\x00\x01\x1c', sum=43697, len=60, p=1, ttl=255, id=64227, data=ICMP(sum=26715, data=Echo(id=512, seq=60160, data='abcdefghijklmnopqrstuvwabcdefghi'))))