我想通过python(version2.6..)嗅探我计算机中的所有HTTP数据包。这可能吗?我可以用scapy还是没有其他外部模块?
Scrapy仅用于从网页或类似结构化文档中提取数据。
要实际读取来自网卡的数据包,最佳性能选项可能是使用具有python绑定的C/c++ API。
例如WireShark有一个Python API
Pcapy是一个使用libpcap捕获数据包的模块。
LibPCAP是为TCPDUMP编写的包捕获库,也在WireShark中使用。
另一个选择是尝试dpkt python模块。这是一篇不错的文章。下面是一个使用dpkt和pcap嗅探HTTP数据包的示例。
EDIT:哎呀,我读错scapy了。谢谢根!
正如您提到的,Scapy是另一个也使用LibPCAP的python模块。本文档有一个嗅探的示例。
如果你在Python 2.7上运行有问题,请查看这篇文章
https://github.com/KimiNewt/pyshark
tshark
的Python包装器
用法:
>>> capture = pyshark.LiveCapture(interface='eth0')
>>> capture.sniff(timeout=50)
>>> capture
<LiveCapture (5 packets)>
>>> capture[3]
<UDP/HTTP Packet>
for packet in capture.sniff_continuously(packet_count=5):
print 'Just arrived:', packet
pypcap,https://code.google.com/p/pypcap/为libpcap简化的面向对象Python扩展模块-当前tcpdump.org版本,一些BSD操作系统附带的遗留版本,以及Windows的WinPcap端口。这是Windows版本。如果使用#nix,只需安装pcap和dpkt模块。
FTR, Scapy将从2.4.3开始支持HTTP数据包:https://scapy.readthedocs.io/en/latest/layers/http.html
>>> HTTPRequest().show()
###[ HTTP Request ]###
Method= 'GET'
Path= '/'
Http_Version= 'HTTP/1.1'
A_IM= None
Accept= None
Accept_Charset= None
Accept_Datetime= None
Accept_Encoding= None
[...]
嗅演示:
from scapy.layers.http import * # read the doc
from scapy.sendrecv import sniff
sniff(lfilter=lambda x: HTTP in x, prn=lambda x: x.summary())