сопоставление пакетов данных и пакетов ICMP в случае дубликатов TCP

Я пытаюсь сопоставить пакеты данных с пакетами ICMP с превышением времени, которые они инициировали. Поэтому я сравниваю 28-байтовые строки каждого пакета данных (IP-заголовок + 8 байт полезной нагрузки) со всеми (28-байтовыми) полезными нагрузками ICMP.

У меня возникают проблемы при отправке повторяющихся TCP-пакетов:

>>> p1
<IP  version=4L ihl=5L tos=0x0 len=60 id=0 flags=DF frag=0L ttl=1 proto=tcp chksum=0x7093 src=XXX dst=YYY options=[] |<TCP  sport=10743 dport=37901 seq=2939035442L ack=2703569003L dataofs=10L reserved=0L flags=SA window=14480 chksum=0x9529 urgptr=0 options=[('MSS', 1460), ('SAckOK', ''), ('Timestamp', (215365485, 52950)), ('NOP', None), ('WScale', 4)] |>>
>>> p2
<IP  version=4L ihl=5L tos=0x0 len=60 id=0 flags=DF frag=0L ttl=1 proto=tcp chksum=0x7093 src=XXX dst=YYY options=[] |<TCP  sport=10743 dport=37901 seq=2939035442L ack=2703569003L dataofs=10L reserved=0L flags=SA window=14480 chksum=0x9426 urgptr=0 options=[('MSS', 1460), ('SAckOK', ''), ('Timestamp', (215365744, 52950)), ('NOP', None), ('WScale', 4)] |>>

... чьи первые 28 байт одинаковы, но отличаются в остальной части заголовка tcp:

'E\x00\x00<\x00\x00@\x00\x01\x06p\x93\x8a`t\x86\xb2.X\x14)\xf7\x94\r\xaf.\x1f2'
'E\x00\x00<\x00\x00@\x00\x01\x06p\x93\x8a`t\x86\xb2.X\x14)\xf7\x94\r\xaf.\x1f2'

Таким образом, пакеты ICMP, которые я получил, имеют одинаковую полезную нагрузку:

>>> i1[ICMP]
<ICMP  type=time-exceeded code=ttl-zero-during-transit chksum=0x689a unused=0 |<IPerror  version=4L ihl=5L tos=0x0 len=60 id=0 flags=DF frag=0L ttl=1 proto=tcp chksum=0x7093 src=XXX dst=YYY options=[] |<TCPerror  sport=10743 dport=37901 seq=2939035442L |>>>

>>> i2[ICMP]
<ICMP  type=time-exceeded code=ttl-zero-during-transit chksum=0x689a unused=0 |<IPerror  version=4L ihl=5L tos=0x0 len=60 id=0 flags=DF frag=0L ttl=1 proto=tcp chksum=0x7093 src=XXX dst=YYY options=[] |<TCPerror  sport=10743 dport=37901 seq=2939035442L |>>>

Соответствующие строки:

'E\x00\x00<\x00\x00@\x00\x01\x06p\x93\x8a`t\x86\xb2.X\x14)\xf7\x94\r\xaf.\x1f2'
'E\x00\x00<\x00\x00@\x00\x01\x06p\x93\x8a`t\x86\xb2.X\x14)\xf7\x94\r\xaf.\x1f2'

Прямо сейчас в этом конкретном случае я утверждаю, что a1 соответствует i1, потому что между i1 и i2 именно i1 прибыло вскоре после отправки a1, тогда как i2 прибыло намного позже.

Этого достаточно? Что еще мне не хватает?


person Ricky Robinson    schedule 27.08.2012    source источник


Ответы (1)


Размер заголовка TCP-пакета не всегда составляет 20 байт. Если установлены параметры, заголовок может быть больше. Вы можете использовать поле «Длина интернет-заголовка», чтобы найти размер заголовка и добавить к этому числу желаемую полезную нагрузку.

Scapy: как получить полный заголовок IP-пакета?

person tMC    schedule 30.08.2012
comment
Да, но в любом случае мне нужны только первые 8 байт, так что... Кстати, это был мой вопрос! - person Ricky Robinson; 30.08.2012