tcpdump: Показать только раздел данных

Я пытаюсь обработать некоторые файлы pcap. Мои pcaps имеют стандартное рукопожатие tcp для подключения и закрытия, и один или несколько интересных пакетов отправляются, когда соединение открыто.

Мне нужно извлечь только часть данных пакетов, чтобы я мог использовать шестнадцатеричный код в качестве входных данных для другой программы. я использую tcpreplay играть в мой pcap на петле

tcpreplay --intf1=lo some.pcap

С помощью tcpdump не похоже на работу

tcpdump -x -i lo

он отображает данные в шестнадцатеричном виде, что-то вроде

0x0000:  4500 003a 0300 0000 4006 79bc 7f00 0001
0x0010:  7f00 0001 a7be 4e20 0000 0002 0000 0002
0x0020:  5018 8000 b9b7 0000 ffff ffff ffff ffff

Мне бы очень хотелось отрубить весь заголовок IP/TCP и оставить только

ffff ffff ffff ffff

(В этом примере представьте, что 8 байтов предназначены для протокола F, так что первые 3 байта являются заголовком для F, а последние 5 байтов являются данными для F. Я хочу обработать F самостоятельно в другой программе, поэтому я буду ссылаться для всех F как "данные". Это создает проблему, когда я использую tshark.)

Я не хочу использовать что-то вроде strings или же cut который основан на моих собственных знаниях о том, как долго будет заголовок tcp, потому что 1) данные являются шестнадцатеричными, поэтому не имеют удобной формы для использования strings или аналогичный инструмент и 2) некоторые заголовки tcp имеют опции, и поэтому длина является переменной, а длина данных является переменной, поэтому cut или подобный инструмент не годится.

Я также пытался tshark с

tshark -r some.pcap -Tfields -e data

который ничего не отображает и

tshark -r some.pcap -x

который отображает

Frame (72 bytes):
0000  06 05 04 03 02 01 01 02 03 04 05 06 08 00 45 00   ..............E.
0010  00 3a 03 00 00 00 40 06 79 bc 7f 00 00 01 7f 00   .:....@.y.......
0020  00 01 a7 be 4e 20 00 00 00 02 00 00 00 02 50 18   ....N ........P.
0030  80 00 b9 b7 00 00 ff ff ff                        .........
Application Layer message (5 bytes):
0000  ff ff ff ff ff

Таким образом, wireshark распознает самый внутренний протокол и "услужливо" разделяет заголовок и данные для меня... За исключением того, что я хочу, чтобы заголовок и данные обрабатывались самостоятельно.

Я полностью потерян для того, как я мог бы удалить заголовки Ether/IP/TCP и оставить только те данные, которые мне нужны.

0 ответов

Другие вопросы по тегам