Назад | Перейти на главную страницу

Отображение дельта-метки времени и полезной нагрузки данных UDP с помощью tcpdump / tshark

У меня есть захват 1,5 Гб небольших пакетов UDP, которые я хотел бы превратить в CSV с простой меткой времени и данными полезной нагрузки UDP в шестнадцатеричном формате.

Пример желаемого результата будет следующим:

% head Data3.txt 
0.000000,0000000041000000005ec812ac00047dce00000000
0.000194,0000000042000000005ec812ac00047db500000000
0.000227,0000000041000000005ec812ac00047dce00000000
0.000619,0000000042000000005ec812ac00047db500000000
0.000663,0000000041000000005ec812ac00047dce00000000
0.000854,0000000042000000005ec812ac00047db500000000
0.000883,0000000041000000005ec812ac00047dce00000000

Мне не нужен этот точный формат, просто формат, который впоследствии может быть преобразован в эти данные (в данном случае это UDP-пакеты длиной 21 байт).

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

  tshark -r May31Jun5.pcap -t r -T fields -e frame.time -e data

Эта команда дает требуемое время дельты и полезную нагрузку (см. Выдержку ниже).

Jun  1, 2020 00:02:27.567001000 CEST    0000000041000000005ed4297300049fe300000000
Jun  1, 2020 00:02:27.567014000 CEST    0000000042000000005ed4297300049fb100000000
Jun  1, 2020 00:02:27.567028000 CEST    0000000041000000005ed4297300049fe300000000
Jun  1, 2020 00:02:27.567042000 CEST    0000000042000000005ed4297300049fb100000000
Jun  1, 2020 00:02:27.567056000 CEST    0000000041000000005ed4297300049fe300000000
Jun  1, 2020 00:02:27.567066000 CEST    0000000042000000005ed4297300049fb100000000
Jun  1, 2020 00:02:27.567106000 CEST    0000000054000000005ed4297300049fb100000001
Jun  1, 2020 00:02:27.567124000 CEST    0000000041000000005ed4297300049fe300000000
Jun  1, 2020 00:02:27.567137000 CEST    0000000042000000005ed4297300049fb100000000
Jun  1, 2020 00:02:27.567152000 CEST    0000000041000000005ed4297300049fe300000000
Jun  1, 2020 00:02:28.095487000 CEST    0000000041000000005ed4297300049fe300000000

Однако я хотел бы иметь только секунды с десятичными знаками, поэтому вместо:

Jun  1, 2020 00:02:28.095487000

Это было бы:

148.095487000

Как я могу этого добиться? Я думаю, это возможно, потому что версия Wireshark с графическим интерфейсом отображает это значение.

Чтобы получить вывод в формате CSV для простых полей, вы можете использовать -T fields вариант с tsharkв сочетании с -E separator=, возможность использовать запятые в качестве разделителя вместо табуляции.

Затем, чтобы выяснить, какие имена полей использовать, проверьте строку состояния в графическом интерфейсе для выбранного поля или используйте tshark -T pdml -r some.pcap например, или tshark -G fields для получения полного списка поддерживаемых полей.

Для столбцов можно использовать специальные _ws.col.<name> поле. Например, _ws.col.Time.

Комбинируя эту информацию, вы можете использовать что-то вроде:

tshark -r your.pcap -Tfields -Eseparator=, -eframe.time_relative -edata > your.csv

Бонусная информация:

  • Если UDP (например, DNS) потребляет полезную нагрузку UDP, data поле будет пустым. Добавить --disable-protocol dns чтобы избежать этого.
  • В текущей разрабатываемой версии новый udp.payload была добавлена ​​опция, которая должна избегать предыдущей опции. (совершить v3.3.0rc0-250-gf04475167a)
  • Если по какой-то причине поле встречается несколько раз, оно будет выведено через запятую. Вы можете использовать -E occurence=1 возможность ограничить результаты только первым значением.
  • Для получения дополнительных сведений об этих параметрах см. страница руководства tshark.

РЕДАКТИРОВАТЬ: Это пока то, что я сделал. Я могу получить либо одно поле, либо другое, но не оба.

Чтобы получить дельту отметки времени:

tshark -r May31Jun5.pcap -o 'gui.column.format:"Time","%t"' > May31Jun5.time.csv
...
262.625098
262.625148
262.625237
262.625762
262.625781
262.625800
262.626037
262.626050
262.626206
262.626232
262.626455
262.626679
...

Чтобы получить полезные данные:

tshark -r May31Jun5.pcap -Tfields -e data > May31Jun5.data.csv
...
0000000041000000005ed428ff0004a04700000000
0000000042000000005ed428ff0004a02e00000000
0000000054000000005ed428ff0004a02e00000002
0000000054000000005ed428ff0004a01500000002
0000000041000000005ed428ff0004a04700000000
0000000042000000005ed428ff00049ffc00000000
0000000041000000005ed428ff0004a04700000000
0000000042000000005ed428ff0004a01500000000
0000000054000000005ed428ff0004a01500000001
0000000041000000005ed428ff0004a04700000000
0000000042000000005ed428ff0004a01500000000
0000000054000000005ed428ff0004a01500000001
0000000041000000005ed428ff0004a04700000000
0000000042000000005ed428ff00049ffc00000000
0000000054000000005ed428ff0004a04700000002
0000000041000000005ed428ff0004a04700000000
0000000042000000005ed428ff00049ffc00000000
0000000041000000005ed428ff0004a04700000000
...

Тогда в UNIX вы можете легко смешать оба с paste:

paste -d',' May31Jun5.time.csv May31Jun5.data.csv | sed 's/^ *//g' > May31Jun5.csv

Как получить и то и другое одновременно с tshark? Без понятия.