2015-06-23 2 views
0

Я использую расширение this для scapy для обнаружения и анализа HTTP-пакетов. Он отлично работает, но когда я сохраняю HTTP-пакеты в файл pcap с wrpcap, а затем загружаю его с rdpcap, он не дает мне тот же пакет, он только обнаруживает его HTTP-пакет, но не HTTP-запросы, он также возникает, когда я делаю это -Python Scapy - загрузка HTTP из файла

from scapy.all import * 
from scapy_http.http import * 

packets = sniff(count=10, lfilter=lambda p: HTTPRequest in p) 
wrpcap('file.pcap', packets) 
restored = rdpcap('file.pcap') 
print len([x for x in restored if HTTPRequest in p]) # prints 0 

Почему это происходит? как я могу восстановить пакеты?

+0

Ну, вам, скорее всего, потребуется дефрагментировать и tcp собрать пакеты для восстановления вашего HTTP-потока. – tintin

ответ

0

Я очень новичок в Python в целом, Scapy в частности, но это то, что вы ищете?

from scapy.all import * 

def http_request(pkt): 
    if pkt.haslayer('HTTPRequest'): ##Use HTTPResponse for response packets 
     pkt.show() 
     exit(0) ##Omit to show more then the first packet 

pkts = rdpcap('/root/Desktop/example_network_traffic.pcap') 
for p in pkts: 
    http_request(p) 

##For sniffing packets 
##sniff(prn=http_request) 

Я думаю, что проблема может быть в том, что Scapy изгоняет пакеты. Когда я запускаю ваш код и проверяю пакет в Wireshark, протокол указан как TCP. Когда я использую Wireshark для захвата одного и того же типа пакетов, он перечисляет протокол как HTTP. Если я экспортирую пакет из Wireshark и прочитаю его с помощью rdpcap, вы получите результаты, которые вы ищете, то есть уровни HTTPRequest/HTTPResponse. Я не знаю этого на самом деле, но я проверил Berkeley Packet Filter syntax, и они не перечисляют HTTP как протокол. Если Scapy основан на синтаксисе BPF, и они не используют HTTP-протокол, возможно, он экспортирует пакет с протоколом TCP, а Scapy-Http просто анализирует сырую нагрузку во время sniff(). Просто догадка.

+0

Нет, моя проблема в том, что после сохранения пакета с использованием wrpcap тогда rdpcap не сможет восстановить уровень HTTPRequest. – ori

+0

Хорошо. Что показывает ваш скрипт? У вас есть пример? – Noob123

+0

Я показал лучший пример, посмотрю на код, и вы увидите – ori

Смежные вопросы