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 и оставить только те данные, которые мне нужны.