2012-04-17 5 views
1

Я пытаюсь использовать scapy для запуска полного сеанса HTTP. То есть, я хочу вручную выполнить трехстороннее рукопожатие, запрос GET, подтверждения, необходимые для получения файла HTML, и прекращение соединения. Используя [1], я выполнил трехстороннее рукопожатие и запрос GET, но я не могу захватить необработанные пакеты HTML, отправленные с сервера, и я, очевидно, не могу отправить обратно пакет ack для большего. Есть идеи?Полный HTTP GET с scapy

Кроме того, мне в конечном итоге хотелось бы разобрать необработанный пакет для HTML. Если кто-нибудь знает, как это сделать из scapy-пакета, я был бы признателен.

[1] http://www.thice.nl/creating-ack-get-packets-with-scapy/

ответ

2

Gimbi,

Я на работе и может только разобрать и не инициировать соединения в scapy прямо сейчас. Поэтому я рассмотрю ваш второй запрос. Мы смотрим на что-то вроде этого. Слой, содержащий html, а также HTTP-запросы, является (Raw) .load, если пакет содержит html или http-запрос, который я сначала проверил бы, будет ли этот слой существовать (haslayer), а затем, если пакет является «http-пакетом» «здесь просто проверьте на 80 в IF-заявлении, однако вы можете просто использовать порт в сетевом фильтре sniff. Я включил опцию« обнюхивать »прямо из провода или вставлять pcap в этот фрагмент (настраивать порты и т. д.). если вы с использованием не стандарты)

#!/usr/bin/python -tt 

from scapy import * 
import sys 

def parse(pkt): 
    if pkt.haslayer(TCP) and pkt.getlayer(TCP).dport == 80 and pkt.haslayer(Raw): 
     print pkt.getlayer(Raw).load 

if '-l' in sys.argv: 
    sniff(prn=parse) 

else: 
    pkts = rdpcap(sys.argv[1]) 
    for pkt in pkts: 
     parse(pkt) 

конечно использовать это в качестве начала вы можете настроить линию 8 подобрать не только DPORT, но и спорт, например. Дайте мне знать, если это помогает на всех и удачи!

P.S. изменить следующие

from scapy import * 

в

from scapy.all import * 

в зависимости от версии ..