如何在python中嗅探HTTP数据包?

时间:2013-04-09 15:37:46

标签: python http sniffer

我想通过python(版本2.6来嗅探我的计算机中的所有HTTP数据包..这可能吗?我可以用scapy做,还是没有其他外部模块?

4 个答案:

答案 0 :(得分:7)

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

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

例如,WireShark有Python API

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

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

另一种选择是尝试使用dpkt python模块。这是一个很好的write up。 这是使用dpkt和pcap来嗅探HTTP数据包的example

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

正如您所提到的,Scapy是另一个也使用LibPCAP的python模块。 这个documentation有一个嗅探的例子。

如果您在使用Python 2.7时遇到问题,请查看此post

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

答案 3 :(得分: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())