Кажется, только у вас не получается.
Может, потому что считаете от конца ответа - а нужно таки content-length начиная со старта тела. Или перехватываете только первый пакет из ответа, забывая обработать хвост.
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 не делают этого автоматом? Приведите, пожалуйста, рабочий пример. Заранее спасибо.
Или перехватываете только первый пакет из ответа, забывая обработать хвост.
akolesnikovpcapy точно не делает, но проверить не сложно: надо запросить чтонибудь большое и посмотреть - есть ли пакеты с длиной больше чем 1500 байт. Если есть - то значит делает, а если нет - занчит придется вручную.
А pcapy и impacket не делают этого автоматом?
Андрей СветловСобственно, так я и хотел сделать, однако нигде не нашел. Только элементарнейшие примеры работы с pcapy/impacket.
Часто куда легче взять готовое и его немного поправить, чем писать с нуля.
zheromoМожно еще взять готовый прокси который позволяет фильтровать контент, типа safesquid например.
Может имеет смысл воспользоваться прокси-сервером (можно и прозрачным) на предмет анализа - если интересует только HTTP трафик.