Eu me deparei com isso novamente, esquecendo que fiz essa pergunta, mas o google me trouxe de volta aqui:).
Eu descobri uma solução alternativa para isso se você tiver editcap
(de wireshark) disponível. Nenhuma alteração no código-fonte é necessária:
tcpdump -i eth0 -w - | editcap -C 82 - - | tcpdump -r -
A primeira chamada tcpdump captura os pacotes e os envia em formato pcap para um pipe. O editcap corta 82 bytes do início de cada pacote no fluxo de pacotes pcap. Então a invocação final do tcpdump lê o fluxo do pacote pcap e o disseca normalmente.
Note que os pipes causam uma boa quantidade de buffer, então a saída não é necessariamente imediata. O tcpdump tem a opção -l
para buffering orientado a linha, mas mesmo com stdbuf -i0 -o0
eu não consegui remover o buffer completamente. YMMV.