如何使用Python嗅探HTTP数据包?

17

我想通过Python(版本2.6)抓取计算机中的所有HTTP数据包。这是否可能?我能否使用Scapy实现?还是不需要其他外部模块?


6
关于关闭投票,我认为这是一个好问题。他正在寻求解决特定问题的技巧,那么问题是什么? - Vincent Savard
你看过这个吗?(在这个问题被关闭之前快速查看...)http://wiki.wireshark.org/Python - zenpoy
1
可能是使用Python进行HTTP请求和响应检查的重复问题。 - Piotr Dobrogost
相关:Python中的数据包嗅探(Windows) - Piotr Dobrogost
4个回答

7

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 上运行时遇到问题,请查看此帖子


1
现在看起来 WireShark 的 Python API 已经消失了。如下答案所述,PyShark 现在似乎是最活跃的方法。 - nealmcb

3

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

2

pypcap, https://code.google.com/p/pypcap/ 是一个简化的面向对象 Python 扩展模块,用于 libpcap - 当前的 tcpdump.org 版本、一些 BSD 操作系统附带的旧版本以及 Windows 的 WinPcap 端口。这是一个 Windows 版本。如果您使用的是 #nix,则只需安装 pcapdpkt 模块即可。


好的,如果我想使用dpkt和pcap模块进行嗅探,我该如何使用它们来嗅探HTTP数据包?如果能提供一个示例就更好了。我看到了一个使用这些模块嗅探icmp数据包的示例,但没有HTTP数据包的示例。 - Aviv

0
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())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接