как запрограммировать tcpdump для захвата только пакетов и ничего больше

683
Sam

Я разрабатываю программу, где файл .pcap будет вход. Однако, когда я запускаю tcpdump -w someFile.pcap в Terminal, файл .pcap собирает дополнительные данные, такие как временная метка, микросекунды, длина кадра и т. Д.
Эти дополнительные данные мешают моей программе, и я хотел знать, был ли способ где tcpdump будет захватывать необработанные пакеты и ничего больше.
Например, первый байт данных в .pcap должен быть «адресом назначения» заголовка Ethernet, а не какой-либо временной меткой.
Спасибо!

0
`-t` удалит метки времени для захвата. MarkoPolo 7 лет назад 0

1 ответ на вопрос

1
Christopher Maynard

Похоже, вас интересуют только необработанные байты, которые составляют каждый пакет. Предполагая, что так, вы можете попробовать что-то вроде:

tcpdump -r someFile.pcap -xx | grep -P "^\t0x" 

Как видно из tcpdumpсправочной страницы, это приведет tcpdumpк чтению файла захвата и «в дополнение к печати заголовков каждого пакета, напечатайте данные каждого пакета, включая заголовок уровня ссылки, в шестнадцатеричном виде». Трубопровод вывода grepвыводит на экран удаление итоговой строки. Возможно, есть способ дать указание tcpdump вообще не печатать итоговую строку, но, если есть, я не смог ее найти. В любом случае, на данный момент вам просто нужно обработать шестнадцатеричный вывод.

Я думаю, вы можете добиться этого немного легче, используя tsharkвместо tcpdump. Например:

tshark -r icmp.pcap -x 

Выходные форматы tcpdumpи tsharkдействительно отличаются в зависимости от того, как отображаются и группируются шестнадцатеричные значения, и присутствует ли представление шестнадцатеричных байтов в ASCII или нет после шестнадцатеричных значений, поэтому вам, вероятно, придется поэкспериментировать, чтобы увидеть, какой формат вам больше нравится или проще для вашей программы разобрать.