Почему распакованный шорт неверно истолкован?
Я распаковываю заголовок UDP (который сам является полезной нагрузкой ответа ICMP). Я пытаюсь получить номера портов источника и назначения.
Вот соответствующая часть кода:
udp_head = struct.unpack('HHHH', data[48:56])
print udp_head
print binascii.hexlify(struct.pack('H', udp_head[1]))
Запуск этого дает мне следующий результат:
(42389, 39554, 2048, 61179)
829a
Это частично неправильно и частично правильно. Порт назначения (второй элемент в списке) должен быть 33434. Таким образом, он неправильно печатает в первой строке. Но во второй строке это правильно (0x829A == 33434).
Есть идеи, почему это происходит?
1 ответ
Решение
Это дает вам подсказку?
>>> print hex(33434)
0x829a
>>> print hex(39554)
0x9a82
>>>
Это, вероятно, проблема порядка байтов.