如何在python中嗅探HTTP数据包



我想通过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,只需安装pcapdpkt模块。

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

最新更新