Я хочу обнюхать все HTTP-пакеты на своем компьютере через python (версия 2.6.. возможно ли это? Могу ли я сделать это с помощью scapy или без других внешних модулей?
Как нюхать HTTP-пакеты в python?
Ответы (4)
Scrapy предназначен только для извлечения данных с веб-страниц или подобных структурированных документов.
Чтобы на самом деле читать пакеты, поступающие от сетевой карты, лучшим вариантом производительности, вероятно, будет использование API C/C++ с привязками python.
Например, у WireShark есть Python API.
Pcapy — это модуль для захвата пакетов с использованием libpcap.
LibPCAP — это библиотека захвата пакетов, написанная для TCPDUMP и также используемая в WireShark.
Другой вариант — попробовать модуль Python dpkt. Вот хорошая запись. Вот пример использования dpkt и pcap для прослушивания HTTP-пакетов.
EDIT: ой, я неправильно понял scapy. Спасибо корень!
Как вы упомянули, Scapy — это еще один модуль Python, который также использует LibPCAP. В этой документации есть пример прослушивания.
Если у вас возникли проблемы с запуском на Python 2.7, ознакомьтесь с этим опубликовать.
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
pypcap,https://code.google.com/p/pypcap/ упрощенный объектно-ориентированный модуль расширения Python для libpcap — текущая версия tcpdump.org, устаревшая версия, поставляемая с некоторыми операционными системами BSD, и порт WinPcap для Windows. Это версия для Windows. И если вы используете #nix, просто установите модуль pcap и dpkt.
FTR, Scapy будет поддерживать HTTP-пакеты, начиная с версии 2.4.3: 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())