Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 17, 2010 17:48:37

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Декодирование перехваченных http пакетов

Кажется, только у вас не получается.
Может, потому что считаете от конца ответа - а нужно таки content-length начиная со старта тела. Или перехватываете только первый пакет из ответа, забывая обработать хвост.



Офлайн

#2 Окт. 17, 2010 17:56:39

akolesnikov
От:
Зарегистрирован: 2009-10-26
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

import pcapy, gzip, StringIO, re
from impacket.ImpactDecoder import *

def getParam(typ, data):
d=re.compile(typ+'(.*?)\n')
res=re.findall(d, data)
return res[0]

max_bytes = 10000000
promiscuous = False
read_timeout = 1000
pc = pcapy.open_live("wlan0", max_bytes, promiscuous, read_timeout)
pc.setfilter('tcp')

def recv_pkts(hdr, data):
packet = EthDecoder().decode(data)
packet=packet.get_data_as_string()
Size=int(getParam('Content-Length: ', packet))
if "Content-Encoding: gzip" in packet:
query=gzip.GzipFile('', 'rb', 9, StringIO.StringIO(packet))
print query.read()

packet_limit = -1
pc.loop(packet_limit, recv_pkts)
Постоянно выдает ошибку.


Андрей Светлов
Может, потому что считаете от конца ответа - а нужно таки content-length начиная со старта тела.
Пробовал даже циклически перебирать всевозможные варианты оступов от начала и конца - все равно, ошибка.

Андрей Светлов
Или перехватываете только первый пакет из ответа, забывая обработать хвост.
А pcapy и impacket не делают этого автоматом? Приведите, пожалуйста, рабочий пример. Заранее спасибо.



Отредактировано (Окт. 17, 2010 17:57:08)

Офлайн

#3 Окт. 17, 2010 18:48:15

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

Нет, все правильно, Content-Length - это длина тела БЕЗ учета длины заголовков.
Раскодируете вы все правильно, скорей всего дело в том что нужно соединять все пакеты, а не только первый.

akolesnikov
А pcapy и impacket не делают этого автоматом?
pcapy точно не делает, но проверить не сложно: надо запросить чтонибудь большое и посмотреть - есть ли пакеты с длиной больше чем 1500 байт. Если есть - то значит делает, а если нет - занчит придется вручную.



Офлайн

#4 Окт. 17, 2010 19:46:00

akolesnikov
От:
Зарегистрирован: 2009-10-26
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

Спасибо. А каким образом лучше склеивать пакеты, как отслеживать пакеты в пределах одного запроса? Вроде какой-то служебный байт байт tcp обозначает это? Нет ли каких-то готовых решений?



Офлайн

#5 Окт. 17, 2010 21:26:03

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

Фрагментация происходит на уровне IP. Формат пакета описан например тут http://www.netroutepro.com/index.php/the-news/76–i-

Кроме этого фрагментация также происходит на уровне TCP http://rfc.com.ru/rfc793.htm

Задча довольно нетривиальная - собрать все назад.

Может имеет смысл воспользоваться прокси-сервером (можно и прозрачным) на предмет анализа - если интересует только HTTP трафик.

Про готовые решения не знаю, надо копать.



Отредактировано (Окт. 17, 2010 21:45:37)

Офлайн

#6 Окт. 17, 2010 23:00:39

akolesnikov
От:
Зарегистрирован: 2009-10-26
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

Спасибо. Нашел http://aldeid.com/index.php/Pyhttpxtract такую штуку, вроде она работает с gzip'ом, буду разбираться. По результатам отпишусь. Честно говоря, был удивлен отсутствием какой-либо конкретики по данной теме, конкретно по pcapy.



Офлайн

#7 Окт. 18, 2010 12:08:53

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Декодирование перехваченных http пакетов

Понимаете ли, я с pcapy немного работал, но тогда меня не интересовали TCP потоки.
Писать работающий пример с pcapy было лень - но я знаю, как работает http и как он кодируется на tcp уровне.
К тому же вы уперлись в довольно простую проблему.
При это не приложили воспроизводимого примера (берем файл такой-то, запускаем его и набираем раз-два-три).
В тех заголовках, что я увидел в начале темы присутствует keepalive - и его тоже нужно корректно отрабатывать.

Часто куда легче взять готовое и его немного поправить, чем писать с нуля. Экономьте свое и наше время - отвечать будут охотней.



Офлайн

#8 Окт. 18, 2010 12:20:49

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

Вот почитал я эту тему… И что-то не понял. Задача вроде банальна - создать свою http-проксю, которая будет заниматься модерацией. Фактически прокся это http-сервер и http-клиент в одном флаконе. Так может стоит начать с готовых решений в этой области (urllib2, httplib, какие-нить готовые сервера) а не лезть в детали того, как это все работает и пытаться ручками собирать tcp сессию (можно же начать с ethernet фрэймов - это же еще интереснее :) )… Т е начать с уровня выше. Или еще проще - поискать готовую проксю и попытаться встроить туда свою модерацию.



Офлайн

#9 Окт. 18, 2010 15:02:10

akolesnikov
От:
Зарегистрирован: 2009-10-26
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

Спасибо за ответы.
Воспроизводимый пример я прикладывал - два варианта. Это просто пробные запуски, интересовало декодирование gzip.

Андрей Светлов
Часто куда легче взять готовое и его немного поправить, чем писать с нуля.
Собственно, так я и хотел сделать, однако нигде не нашел. Только элементарнейшие примеры работы с pcapy/impacket.
Alex2ndr
Возможно, вы правы. Попробую подойти к вопросу со стороны http proxy.



Офлайн

#10 Окт. 18, 2010 17:05:27

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

Выше я советовал тоже самое

zheromo
Может имеет смысл воспользоваться прокси-сервером (можно и прозрачным) на предмет анализа - если интересует только HTTP трафик.
Можно еще взять готовый прокси который позволяет фильтровать контент, типа safesquid например.

А так на питоне их буран - http://proxies.xhaus.com/python/



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version