Как нюхать HTTP-пакеты в python?

Я хочу обнюхать все HTTP-пакеты на своем компьютере через python (версия 2.6.. возможно ли это? Могу ли я сделать это с помощью scapy или без других внешних модулей?


person Aviv    schedule 09.04.2013    source источник
comment
Что касается закрытия голосования, я думаю, что это хороший вопрос. Он просит технику для решения конкретной проблемы, в чем проблема?   -  person Vincent Savard    schedule 09.04.2013
comment
Вы смотрели на это? (быстро, прежде чем этот вопрос будет закрыт...) wiki.wireshark.org/Python   -  person zenpoy    schedule 09.04.2013
comment
возможный дубликат Проверка запросов и ответов HTTP с помощью Python   -  person Piotr Dobrogost    schedule 10.04.2013
comment
Связано: анализ пакетов в Python (Windows)   -  person Piotr Dobrogost    schedule 10.04.2013


Ответы (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, ознакомьтесь с этим опубликовать.

person Dave Hite    schedule 09.04.2013
comment
Похоже, API Python для WireShark больше нет. PyShark кажется наиболее активным подходом к этому сейчас, как указано в ответе ниже. - person nealmcb; 09.09.2017

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
person 吴毅凡    schedule 17.06.2017

pypcap,https://code.google.com/p/pypcap/ упрощенный объектно-ориентированный модуль расширения Python для libpcap — текущая версия tcpdump.org, устаревшая версия, поставляемая с некоторыми операционными системами BSD, и порт WinPcap для Windows. Это версия для Windows. И если вы используете #nix, просто установите модуль pcap и dpkt.

person pigletfly    schedule 10.04.2013
comment
Хорошо, если я хочу использовать модули dpkt и pcap для сниффинга, как я могу сниффить с их помощью HTTP-пакеты? Буду рад получить для примера.. Я видел пример, как с помощью этого модуля сниффить icmp-пакеты, но не HTTP-пакеты.. - person Aviv; 10.04.2013

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())
person Cukic0d    schedule 08.11.2019