LINUX.ORG.RU
ФорумAdmin

Перехват http response

 ,


0

1

Необходимо перехватывать ответы с определенного хоста с content-type: text/xml. Нужно это реализовать средствами python, пробовал уже scapy, но там само содержание xml в нечитаемом виде и распарсить его я не смог. Единственное, что нашел полезного — http://ismellpackets.com/2009/06/12/answer-to-caesars-challenge/


само содержание xml в нечитаемом виде и распарсить его я не смог

пример xml в нечитаемом виде в студию

true_admin ★★★★★
()
Ответ на: комментарий от Samu

Content-Encoding: gzip

Вот поэтому и не читабельно. Да ещё и Transfer-Encoding: chunked . В общем, не повезло :).

Тебе надо один раз посмотреть или постоянно трафик снифать и декодить? Если на один раз то можно и руками http://ask.wireshark.org/questions/6598/how-to-decompress-gzipped-contents

Если постоянно... То с ходу затрудняюсь ответить. Наверно городить свой костыль с libpcap и парсингом трафика. Но ты лучше ещё у кого-нить спроси, наверняка задача имеет много разных решений.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

постоянно трафик снифать и декодить


this
Я и сам понимаю, что gzipped, но как это раскодировать ?Единственное, что, как я уже написал, нашлось:

http://ismellpackets.com/2009/06/12/answer-to-caesars-challenge/

, но все равно не помогло.

Samu
() автор топика
Ответ на: комментарий от true_admin
http://ismellpackets.com/2009/06/12/answer-to-caesars-challenge/
10. Put it in a file:

>>> fd=open('/tmp/file', 'w')
>>> fd.write(strpayload)
>>> fd.close()
11. Use file magic to guess what sort of file it is:

>>> os.system('file /tmp/file')
/tmp/file: gzip compressed data, was "file", from Unix, max compression
12. It’s a gzip file, decompress it:

>>> fd=gzip.open('/tmp/file', 'r')
>>> fd.read()
'4500 0062 a46a 0000 8011 9c99 c0a8 3c01 c0a8 3c35 5a6d 0202 

Не работает.

Samu
() автор топика
Ответ на: комментарий от Samu
>>> os.system('file /tmp/file')
/tmp/file: gzip compressed data, was "file", from Unix, max compression
12. It’s a gzip file, decompress it:

>>> fd=gzip.open('/tmp/file', 'r')
>>> fd.read()
'4500 0062 a46a 0000 8011 9c99 c0a8 3c01 c0a8 3c35 5a6d 0202 


Оно у меня не определилось как gzip compressed data, при pkt.show() было нормально, в таком виде:

<Raw  load='\x08\x08\xd9-\x07J\x02\x03file\x00]\x8e\xcb\x91\x
При попытке strpayload=str(a.payload.payload) все превращается в нечитаемый набор символов, который после записи в файл не распознается как gzipped.

Samu
() автор топика
Ответ на: комментарий от Samu

Оно?

<?xml version="1.0" encoding="utf-8"?><hunt>
<bots>

	<bot id="1128585421" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="968" y="1162" fight_id="0" />
	<bot id="1278793238" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="660" y="163" fight_id="1217680931" />
	<bot id="1193807619" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="914" y="403" fight_id="0" />
	<bot id="1020797190" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="353" y="678" fight_id="0" />
	<bot id="1024329757" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="797" y="905" fight_id="0" />
	<bot id="1127502643" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="378" y="766" fight_id="0" />
	<bot id="1107140548" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="290" y="583" fight_id="0" />
	<bot id="1029893486" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="287" y="742" fight_id="0" />
	<bot id="1248067340" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="667" y="1245" fight_id="0" />
	<bot id="1165076402" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="716" y="490" fight_id="0" />
	<bot id="1141432581" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="341" y="614" fight_id="0" />
	<bot id="1129636220" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="28" y="1032" fight_id="0" />
	<bot id="1106809053" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="256" y="963" fight_id="1217680090" />
	<bot id="1191440950" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="882" y="1131" fight_id="0" />
	<bot id="1071332715" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="749" y="403" fight_id="0" />
	<bot id="1281355942" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="1215" y="712" fight_id="0" />
	<bot id="1102503058" name="Крэтс" level="1" pic="rat1_small.jpg" sk="1043" agrlevel="0" x="83" y="631" fight_id="0" />
	<bot id="38303628" name="Патрульный Дартронга" level="15" pic="magmar_guard_sm.jpg" sk="2001" agrlevel="100" x="622" y="1250" fight_id="0" />
	<bot id="38303625" name="Патрульный Дартронга" level="15" pic="magmar_guard_sm.jpg" sk="2001" agrlevel="100" x="1307" y="367" fight_id="0" />
	<bot id="38303621" name="Патрульный Дартронга" level="15" pic="magmar_guard_sm.jpg" sk="2001" agrlevel="100" x="1399" y="297" fight_id="0" />
	<bot id="38303620" name="Патрульный Дартронга" level="15" pic="magmar_guard_sm.jpg" sk="2001" agrlevel="100" x="700" y="187" fight_id="0" />
	<bot id="38303627" name="Патрульный Дартронга" level="15" pic="magmar_guard_sm.jpg" sk="2001" agrlevel="100" x="514" y="625" fight_id="0" />
	<bot id="38303619" name="Патрульный Дартронга" level="15" pic="magmar_guard_sm.jpg" sk="2001" agrlevel="100" x="890" y="857" fight_id="0" />
	<bot id="38303622" name="Патрульный Дартронга" level="15" pic="magmar_guard_sm.jpg" sk="2001" agrlevel="100" x="881" y="440" fight_id="0" />
	<bot id="38303623" name="Патрульный Дартронга" level="15" pic="magmar_guard_sm.jpg" sk="2001" agrlevel="100" x="344" y="229" fight_id="0" />
	<bot id="38303624" name="Патрульный Дартронга" level="15" pic="magmar_guard_sm.jpg" sk="2001" agrlevel="100" x="1069" y="261" fight_id="0" />
	<bot id="38303626" name="Патрульный Дартронга" level="15" pic="magmar_guard_sm.jpg" sk="2001" agrlevel="100" x="885" y="723" fight_id="1217528016" />
</bots>
<farm>
	<item num="35" name="Чертополох" pic="chertopoloh2.gif" swf="chertopolox.swf" prof="1" quality="0" skill="0" artikul_id="372" x="749" y="292" farming="0" action_title="" />
	<item num="33" name="Чертополох" pic="chertopoloh2.gif" swf="chertopolox.swf" prof="1" quality="0" skill="0" artikul_id="372" x="797" y="833" farming="0" action_title="" />
	<item num="32" name="Чертополох" pic="chertopoloh2.gif" swf="chertopolox.swf" prof="1" quality="0" skill="0" artikul_id="372" x="173" y="968" farming="0" action_title="" />
	<item num="25" name="Чертополох" pic="chertopoloh2.gif" swf="chertopolox.swf" prof="1" quality="0" skill="0" artikul_id="372" x="267" y="975" farming="0" action_title="" />
	<item num="24" name="Чертополох" pic="chertopoloh2.gif" swf="chertopolox.swf" prof="1" quality="0" skill="0" artikul_id="372" x="1209" y="489" farming="0" action_title="" />
	<item num="21" name="Чертополох" pic="chertopoloh2.gif" swf="chertopolox.swf" prof="1" quality="0" skill="0" artikul_id="372" x="192" y="973" farming="0" action_title="" />
	<item num="15" name="Чертополох" pic="chertopoloh2.gif" swf="chertopolox.swf" prof="1" quality="0" skill="0" artikul_id="372" x="756" y="289" farming="0" action_title="" />
	<item num="14" name="Чертополох" pic="chertopoloh2.gif" swf="chertopolox.swf" prof="1" quality="0" skill="0" artikul_id="372" x="164" y="966" farming="0" action_title="" />
	<item num="13" name="Чертополох" pic="chertopoloh2.gif" swf="chertopolox.swf" prof="1" quality="0" skill="0" artikul_id="372" x="776" y="1010" farming="0" action_title="" />
	<item num="11" name="Чертополох" pic="chertopoloh2.gif" swf="chertopolox.swf" prof="1" quality="0" skill="0" artikul_id="372" x="196" y="964" farming="0" action_title="" />
	<item num="30" name="КоролК

true_admin ★★★★★
()
Ответ на: комментарий от Samu

Короче, частично декодировать не удалось. Я так понимаю что в файле только лишь первый чанк.

Как заставить zlib игнорировать ошибки и вывести хоть что-то я не понял.

true_admin ★★★★★
()
Ответ на: комментарий от Samu

Короче, я смог распарсить. Примерно вот так:

# /tmp/test is raw gzip data without http headers
data = open("/tmp/test", "rb").read(1000)
o=zlib.decompressobj(16+zlib.MAX_WBITS)
print(o.decompress(data))

Но лучше взять готовую либу для парсинга. Я их нашёл сразу несколько. Например: https://github.com/benoitc/http-parser/blob/master/http_parser/pyparser.py

true_admin ★★★★★
()
Ответ на: комментарий от Samu

Это ты в jabber пишешь? Почему-то не проходят сообщения, пишет 404.

true_admin ★★★★★
()
Ответ на: комментарий от Samu

Вот скрипт который у меня выводит содержимое пакетов:

from scapy.all import *
import pdb

def parse(pkt):
    try:
        print pkt.lastlayer().load
    except AttributeError:
      pass
    #pdb.set_trace()

def main():
  pkts = sniff(filter="tcp port 8080", prn=parse)

if __name__ == "__main__":
  main()

Писалось в автобусе без доступа к инету, поэтому такое стрёмное.

true_admin ★★★★★
()
Ответ на: комментарий от Samu

А, стоп, тогда норм. Тебе нужно:

1) разбить трафик на сессии

2) каждую сессию парсить парсером который понимает content-encoding gzip.

Тот код что я показал это только кусок первой проблемы. Конкретно, он убирает «мусор» (остатки заголовков от tcp/ip).

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.