Полный HTTP GET со Scapy

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

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

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

1 ответ

Gimbi,

Я нахожусь на работе и могу только анализировать и не устанавливать соединения в scapy прямо сейчас. Поэтому я отвечу на ваш второй запрос. Мы смотрим на что-то, как я представил здесь. Уровень, который содержит html, а также запросы http: (Raw).load, если пакет содержит html или запрос http, я сначала проверил бы, существует ли уровень (haslayer), а затем, является ли пакет "пакетом http". "здесь просто проверьте 80 в операторе IF, однако вы могли бы просто использовать порт в сетевом фильтре сниффа. Я включил в этом фрагменте опцию сниффинг непосредственно с провода или подключил 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, но и спорт, например. Дайте мне знать, если это поможет, и удачи!

PS поменяй следующее

from scapy import *

в

from scapy.all import *

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

Другие вопросы по тегам