Я разрабатываю программу, где файл .pcap будет вход. Однако когда я запускаю tcpdump -w someFile.pcap, в Терминале файл .pcap собирает дополнительные данные, такие как метка времени, микросекунды, длина кадра и т.д.
Эти дополнительные данные мешают моей программе, и я хотел знать, есть ли способ, где tcpdump будет захватывать необработанные пакеты и ничего больше.
Так, например, первый байт данных в .pcap должен быть "адресом назначения" заголовка Ethernet, а не какой-либо временной меткой.
Спасибо!
1 ответ
Похоже, вас интересуют только необработанные байты, которые составляют каждый пакет. Предполагая, что так, вы можете попробовать что-то вроде:
tcpdump -r someFile.pcap -xx | grep -P "^\t0x"
Как вы можете видеть из справочной страницы tcpdump
, это заставит tcpdump
прочитать файл захвата и «в дополнение к печати заголовков каждого пакета, выведите данные каждого пакета, включая заголовок уровня ссылки, в шестнадцатеричном виде». Передача вывода в grep
позаботится об удалении итоговой строки. Возможно, есть способ дать команду tcpdump
вообще не печатать итоговую строку, но, если есть, я не смог ее найти. В любом случае, на данный момент вам просто нужно обработать шестнадцатеричный вывод.
Я думаю, вы можете добиться этого немного проще, используя tshark
вместо tcpdump
. Например:
tshark -r icmp.pcap -x
Выходные форматы tcpdump
и tshark
отличаются в зависимости от того, как отображаются и группируются шестнадцатеричные значения, и присутствует ли представление шестнадцатеричных байтов в ASCII или нет после шестнадцатеричных значений, поэтому вам, вероятно, придется поэкспериментировать, чтобы увидеть, какой формат нравится лучше или проще для вашей программы разобрать.