Search code examples
bashshellredhattcpdump

Tcpdump with -w writing gibberish to file


When trying to capture tcpdump output to a file, I get the following:

▒ò▒▒▒▒3▒X▒▒<<▒▒▒▒▒▒▒4▒4▒b 7 7▒▒3▒X▒▒<<▒▒▒▒▒▒▒4▒4▒b 7 7▒▒3▒X▒▒<<▒▒▒▒▒▒▒4▒4▒b 7 7▒▒3▒X▒<<▒▒▒▒▒▒▒4▒4▒b 7 7▒▒3▒Xu<<▒▒▒▒▒▒▒4▒4▒b 7 7▒▒3▒X▒<<▒▒▒▒▒▒▒4▒4▒b 7 7▒▒3▒X▒D<<▒▒▒▒▒▒▒4▒4▒b 7 7▒▒3▒X▒D<<▒▒▒▒▒▒▒4▒4▒b 7 7▒▒3▒X5▒<<▒▒▒▒▒▒▒4▒4▒b 7 7▒▒3▒X▒<<▒▒▒▒▒▒▒4▒4▒b

If I run tcpdump without the -w the output displays fine in the shell.

Here is the input:

tcpdump -i eth0 -Z root -w `date '+%m-%d-%y.%T.pcap'`

Solution

  • tcpdump -w writes the raw file, which is not meant for reading directly. You can read the file back with the tcpdump -r option as suggested in the man page:

    -r Read packets from file (which was created with the -w option). Standard input is used if file is ‘‘-’’.

    -w Write the raw packets to file rather than parsing and printing them out. They can later be printed with the -r option. Standard output is used if file is ‘‘-’’. See pcap-savefile(5) for a description of the file format.

    Another option would be to redirect the output without using the -w option:

    tcpdump -i eth0 -Z root > `date '+%m-%d-%y.%T.pcap'`
    

    But if I remember correctly you don’t get exactly what would be written with the -w option.