У меня есть захват 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
Бонусная информация:
data
поле будет пустым. Добавить --disable-protocol dns
чтобы избежать этого.udp.payload
была добавлена опция, которая должна избегать предыдущей опции. (совершить v3.3.0rc0-250-gf04475167a)-E occurence=1
возможность ограничить результаты только первым значением.РЕДАКТИРОВАТЬ: Это пока то, что я сделал. Я могу получить либо одно поле, либо другое, но не оба.
Чтобы получить дельту отметки времени:
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
? Без понятия.