我想通过Python(版本2.6)抓取计算机中的所有HTTP数据包。这是否可能?我能否使用Scapy实现?还是不需要其他外部模块?
我想通过Python(版本2.6)抓取计算机中的所有HTTP数据包。这是否可能?我能否使用Scapy实现?还是不需要其他外部模块?
Scrapy 专门用于从网页或类似结构化文档中提取数据。
如果要读取来自 NIC 的数据包,请使用具有 Python 绑定的 C / C++ API,以获得最佳性能。
例如,WireShark 具有 Python API。
Pcapy 是使用 libpcap 进行数据包捕获的模块。
LibPCAP 是为 TCPDUMP 编写的数据包捕获库,也用于 WireShark。
另一个选择是尝试 dpkt python 模块。这里有一篇不错的文章。 这里有一个示例,使用 dpkt 和 pcap 来嗅探 HTTP 数据包。
编辑: 噢,我误读了 scapy。谢谢 root!
如您所提到的,Scapy 是另一个使用 LibPCAP 的 Python 模块。 这份文档有一个嗅探的示例。
如果您在 Python 2.7 上运行时遇到问题,请查看此帖子。
https://github.com/KimiNewt/pyshark
这是一个Python包,用于封装 tshark
工具。
使用方法:
>>> 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/ 是一个简化的面向对象 Python 扩展模块,用于 libpcap - 当前的 tcpdump.org 版本、一些 BSD 操作系统附带的旧版本以及 Windows 的 WinPcap 端口。这是一个 Windows 版本。如果您使用的是 #nix,则只需安装 pcap 和 dpkt 模块即可。
>>> 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())