I have a 1.5Gb capture of small UDP packets that I would like to turn into a CSV with just timestamp and UDP payload data in hex format.
An example of the desired output would be as follows:
% head Data3.txt
0.000000,0000000041000000005ec812ac00047dce00000000
0.000194,0000000042000000005ec812ac00047db500000000
0.000227,0000000041000000005ec812ac00047dce00000000
0.000619,0000000042000000005ec812ac00047db500000000
0.000663,0000000041000000005ec812ac00047dce00000000
0.000854,0000000042000000005ec812ac00047db500000000
0.000883,0000000041000000005ec812ac00047dce00000000
I do not need this exact format, just a format that can later be transformed into this data (in this case they are 21 bytes length UDP packets).
I am struggling to achieve this with tcpdump without success, so I have found that tshark can do the job:
tshark -r May31Jun5.pcap -t r -T fields -e frame.time -e data
That command gives the delta time and payload as required (see below excerpt).
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
However I would like to have just seconds with decimals, so instead of:
Jun 1, 2020 00:02:28.095487000
It would be:
148.095487000
How can I achieve that? I guess it is possible because the GUI version of Wireshark display that value.
To get a CSV-style output for simple fields, you can use the
-T fields
option withtshark
, combined with the-E separator=,
option to use commas as separator as opposed to tabs.Next, to figure out what kind of field names to use, check the status bar in the GUI for a selected field, or use
tshark -T pdml -r some.pcap
for example, ortshark -G fields
for a full list of supported fields.For columns, you can use the special
_ws.col.<name>
field. For example,_ws.col.Time
.Combining this information, you can use something like:
Bonus information:
data
field will be empty. Add the--disable-protocol dns
to avoid that.udp.payload
option has been added which should avoid the previous option. (commit v3.3.0rc0-250-gf04475167a)-E occurence=1
option to limit the results to the first value only.EDIT: This is so far what I have done. I can either get one field or another, but not both.
To get timestamp delta:
To get data payload:
Then in UNIX you can easily mix both with
paste
:How to geth both a the same time with
tshark
? No Idea.