Итак, я пишу скрипт python scapy, который сначала просто завершит трехстороннее рукопожатие, отправьте http get, а затем закроет соединение.Как получить длину ответа http python scapy
Это код до сих пор:
!/usr/bin/env python
from scapy.all import *
getStr = 'GET/HTTP/1.0\r\nHost: www.google.com\r\n\r\n'
#Send SYN
syn = IP(src="31.31.31.10",dst='31.31.31.17')/ TCP(dport=80,sport=RandShort(),flags='S')
syn_ack = sr1(syn)`
#Send GET w/ ACK of server's SA
get1 = (IP(src="31.31.31.10",dst="31.31.31.17")/TCP(dport=80, sport=syn_ack[TCP].dport,seq=syn_ack[TCP].ack, ack=syn_ack[TCP].seq + 1, flags='PA')/getStr)
send (get1)
pkts = sniff(count=1,filter="host 31.31.31.17 and port 80",prn=lambda x:x.summary())
print pkts.sprintf("%TCP.len%") #Will this work? I am getting an issue here
AttributeError: 'list' object has no attribute 'sprintf'
В основном я просто хочу, чтобы извлечь Len данных из ПА, которая является ответом HTTP, так что я могу правильно генерировать следующий порядковый номер АСК http-ответ.
Я также пробовал: ans, uns = sr (get1) Но я не мог найти хороший способ получить длину от этого.
Я также пробовал: печать Len (pkts.getlayer (TCP)) AttributeError: 'список' объект не имеет атрибута 'getlayer'
Любая помощь будет оценена
Это скомпилируется, но я не получу длину, я получаю ??? Вот вывод: Начало излучения: ......... Готово отправить 1 пакет. . * Получено 11 пакетов, получено 1 ответов, остальные 0 пакетов . Отправлено 1 пакет. Ether/IP/TCP 31.31.31.17:http> 31.31.31.10:20810 PA/Raw ?? – dlo
Ты прав, моя ошибка. Я обновил ответ, теперь должен работать. – Pierre