Python数据包嗅探/捕获 - pcapy未捕获数据包
我把无线网络接口设置成了监控模式,这样我就能成功捕捉到网络数据包,并用Wireshark进行分析。我想用pcapy
和impacket
实现类似的功能。但我发现pcapy
捕捉到的数据包和Wireshark不一样。我现在在2012年的Macbook Pro上运行Mac OS X 10.9,但在使用TP-LINK TL-WN722N无线USB适配器的Ubuntu上也遇到了同样的问题。
下面是我写的一个脚本,明显没有成功。虽然在Wireshark中能看到探测请求,但用pcapy
却一个都没捕捉到。
import pcapy
import impacket
DECODER = impacket.ImpactDecoder.RadioTapDecoder()
def packet_handler(header, data):
radio_packet = DECODER.decode(data)
dot11 = radio_packet.child()
if dot11.get_subtype() == impacket.dot11.Dot11Types.DOT11_SUBTYPE_MANAGEMENT_PROBE_REQUEST:
management_base = dot11.child()
if management_base.__class__ == impacket.dot11.Dot11ManagementFrame:
print management_base.get_source_address(), management_base.get_destination_address()
p = pcapy.open_live("your_interface_here", 2000, 0, 1000)
p.loop(-1, packet_handler)
在这个例子中,en1处于监控模式。使用从Wireshark生成的pcap文件时,这个方法是有效的,只需把open_live
改成open_offline
就可以了:
p = open_offline('path_to_file')
我是不是没有正确设置pcapy
?
1 个回答
1
如果你在Wireshark中捕获了一些数据包,但不是所有的数据包都能看到,可以尝试开启混杂模式(这样可以捕获所有数据包,即使它们的校验和有问题):
1) 为pcapy设置混杂模式
promiscuous = True
p = pcapy.open_live("your_interface_here", 2000, promiscuous, 1000)
2) 为你的网络接口设置混杂模式。如果你不知道在Mac上怎么做,在Linux上可以这样操作:
os.system('sudo ifconfig eth0 promisc')
然后关闭并静音你的网络接口。
我在使用pcapy和铜缆以太网时也遇到过同样的问题。以上的方法对我解决了这个问题。