Вы хотите TTL?
Давайте начнем с высокого уровня и опустимся вниз.
Scapy дает вам созданный пакет. Если вы хотите TTL пакета, вызовите атрибут:
>>> plist[182].ttl
64
Если вы хотите получить указанный c байт пакета, давайте посмотрим на hexdump:
>>> hexdump(plist[182])
0000 AA BB CC 66 42 DE AA BB CC 3F 52 A3 08 00 45 00 .a.lM..M.AK...E.
0010 00 5B 58 B9 40 00 40 06 64 96 C0 A8 01 28 AC D9 .[X.@.@.d....(..
...
Это в шестнадцатеричном формате, первое поле 0000 - это смещение, затем 16 байтов в шестнадцатеричном, затем ascii.
Offset Bytes ASCII
====== =============================================== ================
0000 AA BB CC 66 42 DE AA BB CC 3F 52 A3 08 00 45 00 .a.lM..M.AK...E.
Вещи начинаются с 0, поэтому адреса байтов равны 0..15 для первой строки. Во второй строке смещение составляет 16 (16 * 1). Таким образом, адреса байтов 16..31. Третья строка, смещение 32 (16 * 2). Таким образом, адреса байтов 32..47
Вы выделили 7-й байт в строке 2:
Offset Bytes ASCII
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
====== =============================================== ================
0010 00 5B 58 B9 40 00 40 06 64 96 C0 A8 01 28 AC D9 .[X.@.@.d....(..
Этот адрес:
offset + byte_address.
offset = 16 * 1
byte_address = 6
Что дает нам:
16 + 6 = 22
Теперь мы можем получить байтовый адрес 22 из необработанного пакета:
>>> b = raw(plist[182])
>>> b[22]
64
Обратите внимание, что номера пакетов wireshark начинаются с 1. Пакеты в python начнем с 0. Итак, в моем примере пакет 182 соответствует пакету 183. В Wireshark.
plist [182] .payload дает вам IP-часть пакета, поэтому смещения будут другими, так как мы больше не смотрим на весь пакет. Мы можем получить то же значение, используя атрибут .ttl. Или, зная, что адрес - это байт 8 в заголовке IP:
>>> plist[182].payload.ttl
64
>>> raw(plist[182].payload)[8]
64