Да, вы правы. Никогда прежде не работал с http на таком уровне. Для проекта необходимо мониторить сетевую активность и запоминать подозрительные запросы. К сожалению, сходу не смог найти в гугле подходящую справочную информацию.
Про chunk читал, пока это не первоочередная задача. Гораздо важнее разобраться с gzip.
Подскажите, пожалуйста. Что-то не получается. Получаю ответ сервера таким образом (сократил ненужное):
def decodePayload(payload):
decoder = Decoders.EthDecoder()
eth = decoder.decode(payload)
ip = eth.child()
tcp = ip.child()
try:
if tcp.get_RST()!=1:
data = tcp.get_data_as_string()
return data
else:
return None
except:
return None
def calculate(query):
query=gzip.GzipFile('', 'rb', 9, StringIO.StringIO(query))
query=query.read()
print query
keyword="Content-Type: text/html"
cap = pcapy.open_live('wlan0', 10000000, 1, 0)
cap.setfilter('tcp')
(header, payload) = cap.next()
while header:
decoder = Decoders.EthDecoder()
eth = decoder.decode(payload)
if keyword in eth.get_packet():
result=decodePayload(payload)
if result:
calculate(result)
(header, payload) = cap.next()
При этом я пробовал и как вы говорили, т.е. весь query декодировать gzip'ом, и так, как я писал вначале - брать только конец длиной content-length. Все приводит к “IOError: Not a gzipped file”.
К чему я отрезаю кусок с конца: ведь вначале идут всякие заголовки ответа сервера (“HTTP/1.1 200 OK, Server: nginx/0.7.67” и т.д.). При отрезании остается точно нужная часть - то, что после заголовков.
PS. zlib.decompress(packet) также выдает “zlib.error: Error -3 while decompressing data: incorrect header check”