Это очень помогло бы, если бы вы обнародовали:
(0) Что приводит вас к выводу, что «содержимое пакета кажется сжатым»
(1) URL-адреса источника (a) и (b) документации пакета, который пишет пакеты
(2) Содержимое образца пакета
(а) print repr(open('file_saved_from_wireshark', 'rb').read())
(b) на случай, если длительное путешествие по проволочной акуле приведет к загрязнению воды, вставьте это в свой клиент Python:
print repr(a_sample_packet)
(3) точное сообщение об ошибке, которое вы получили (копировать / вставить)
Обновление после того, как OP предоставил шестнадцатеричный дамп пакета
Этот код:
import binascii, sys, cStringIO, gzip, struct, zlib
# guff is allegedly a "packet", formatted as 2 hex characters per byte
guff = "001321cdc68ff4ce46e4f00d0800450000832a85400080061e51ac102cceac102cb004f8092a9909b32c10e81cb25018f734823e00000100000000000000521f8b08000000000000005bf39681b59c85818121a0b4884138da272bb12c512f27312f5dcf3f292b35b9c47ac2b988f902c59a394c0c0c150540758c250c5c2ea5b9b9950a2e89258900aa4c201a3f000000"
guff2 = binascii.unhexlify(guff)
print "raw input: len=%d repr=%r" % (len(guff2), guff2)
# gzip spec: http://www.faqs.org/rfcs/rfc1952.html
GZIP_HDR = "\x1F\x8B\x08"
gzpos = guff2.find(GZIP_HDR)
if gzpos == -1:
print "Can't find gzip header"
sys.exit(1)
print gzpos, "bytes before gzipped data"
gzipped = guff2[gzpos:]
packet_crc, packet_orig_len = struct.unpack("<II", gzipped[-8:])
print "packet_crc, packet_orig_len:", hex(packet_crc), packet_orig_len
fobj = cStringIO.StringIO(gzipped)
zf = gzip.GzipFile(fileobj=fobj)
payload = zf.read()
print "payload: len=%d repr=%r" % (len(payload), payload)
print "crc32(payload):", hex(zlib.crc32(payload))
произвел этот вывод (обернутый в столбец 80 терминалом командной строки Windows) при запуске с Python 2.6.4:
raw input: len=145 repr="\x00\x13!\xcd\xc6\x8f\xf4\xceF\xe4\xf0\r\x08\x00E\x00\x
00\x83*\x85@\x00\x80\x06\x1eQ\xac\x10,\xce\xac\x10,\xb0\x04\xf8\t*\x99\t\xb3,\x1
0\xe8\x1c\xb2P\x18\xf74\x82>\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00R\x1f\x8b\x0
8\x00\x00\x00\x00\x00\x00\x00[\xf3\x96\x81\xb5\x9c\x85\x81\x81!\xa0\xb4\x88A8\xd
a'+\xb1,Q/'1/]\xcf?)+5\xb9\xc4z\xc2\xb9\x88\xf9\x02\xc5\x9a9L\x0c\x0c\x15\x05@u\
x8c%\x0c\\.\xa5\xb9\xb9\x95\n.\x89%\x89\x00\xaaL \x1a?\x00\x00\x00"
63 bytes before gzipped data
packet_crc, packet_orig_len: 0x1a204caa 63
payload: len=63 repr='\xac\xed\x00\x05w\x04\x00\x00\x00Pur\x00\x13[Ljava.lang.Ob
ject;\x90\xceX\x9f\x10s)l\x02\x00\x00xp\x00\x00\x00\x01t\x00\nDummy Data'
crc32(payload): 0x1a204caa
Комментарии / вопросы:
Этот пакет имеет длину 145 байтов; что случилось с идеей, что пакет был около 2900 байт?
Пакет состоит из 63 байтов пока еще не проанализированных данных, за которыми следует поток в 82 байта gzip, который распаковывает (!) До 63 байтов. Нет данных после потока gzip - проверяется путем сравнения последних 8 байтов пакета с вычисленными значениями gzip. Он содержит ожидаемые «фиктивные данные», но идентификатор пользователя «johnathonb» отсутствует (или скрыт или зашифрован).
Структура пакета не соответствует используемому нами коду, который мы догадались (без XML, без base64).
Данные в заархивированном виде содержат строку "java.lang.Object", которая, вероятно, является симптомом некоторого протокола сериализации Java. Lasciate ogni speranza, voi qu'entrate .