私のコンピューターのすべてのHTTPパケットをpython(version2.6 ..)でスニッフィングしたいのですが、これは可能ですか?scapyを使用して、または他の外部モジュールなしで実行できますか?
Scrapy は、Webページまたは類似の構造化ドキュメントからデータを抽出するためだけのものです。
NICからのパケットを実際に読み取るには、おそらく、最高のパフォーマンスオプションは、pythonバインディングを持つC/C++ APIを使用することです。
たとえば、WireSharkには Python API があります。
Pcapy は、libpcapを使用したパケットキャプチャ用のモジュールです。
LibPCAP は、TCPDUMP用に作成され、WireSharkでも使用されるパケットキャプチャライブラリです。
別のオプションは、dpkt pythonモジュールです。ここにナイス 記述 があります。ここに 例 があり、dpktとpcapを使用してスニッフィングしますHTTPパケット。
[〜#〜] edit [〜#〜]:おっと、私はscapyを誤って読みました。ルートありがとう!
あなたが言及したように、 Scapy は別のpython LibPCAPも使用するモジュールです。この documentation はスニッフィングの例を持っています。
Python 2.7での実行に問題がある場合は、これをチェックしてください post 。
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/ 簡略化されたオブジェクト指向Python拡張モジュール-現在のtcpdump.orgバージョン、一部のBSDオペレーティングシステムに同梱されているレガシーバージョン、およびWindows用のWinPcapポート。これはWindowsバージョンです。#nixを使用している場合は、 pcapとdpktモジュールをインストールするだけです。
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())