17

我想通过python(version2.6 ..这可能吗?我可以用scapy或没有其他外部模块来嗅探我计算机中的所有HTTP数据包吗?

4

4 回答 4

7

Scrapy仅用于从网页或类似的结构化文档中提取数据。

要实际读取来自 NIC 的数据包,您最好的性能选择可能是使用具有 python 绑定的 C/C++ API。

例如 WireShark 有一个Python API

Pcapy是一个使用 libpcap 进行数据包捕获的模块。

LibPCAP是为 TCPDUMP 编写的数据包捕获库,也用于 WireShark。

另一种选择是尝试 d​​pkt python 模块。这是一篇不错的文章。这是一个使用 dpkt 和 pcap 来嗅探 HTTP 数据包的示例。

编辑:哎呀,我误读了 scapy。谢谢根!

正如您所提到的,Scapy是另一个使用 LibPCAP 的 python 模块。本文档有一个嗅探示例。

如果您在 Python 2.7 上运行时遇到问题,请查看这篇文章

于 2013-04-09T17:14:41.340 回答
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
于 2017-06-17T21:25:21.880 回答
2

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

于 2013-04-10T01:28:29.780 回答
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())
于 2019-11-08T12:23:41.423 回答