Полный 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 *
в зависимости от вашей версии..