Estou escrevendo um dissector Wireshark para nosso protocolo de barramento CAN e notei que o tcpdump captura quadros CAN duas vezes e sua saída difere do programa candump.
Por exemplo, quando executo os seguintes comandos
$ cansend vcan0 123#R
$ cansend vcan0 123#22
tcpdump mostra a seguinte saída
$ tcpdump -i vcan0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vcan0, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
00:19:18.372611
0x0000: 2301 0040 0000 0000 0000 0000 0000 0000 #..@............
00:19:18.374097
0x0000: 2301 0040 0000 0000 0000 0000 0000 0000 #..@............
00:19:33.605064
0x0000: 2301 0000 0100 0000 2200 0000 0000 0000 #.......".......
00:19:33.610799
0x0000: 2301 0000 0100 0000 2200 0000 0000 0000 #.......".......
mas o candump mostra isso corretamente.
$ candump vcan0
vcan0 123 [0] remote request
vcan0 123 [1] 22
versão tcpdump
$ tcpdump --version
tcpdump version 4.9.2
libpcap version 1.9.0-PRE-GIT (with TPACKET_V3)
Eu tenho duas perguntas
- Existe alguma solução para esse problema ou ele foi resolvido em uma versão mais recente?
- Se nenhuma versão ou uma versão mais recente for necessária, posso usar o candump na captura remota do Wireshark? Sei que posso visualizar os logs do candump, mas prefiro a inspeção ao vivo usando a captura remota.
O comportamento padrão de
tcpdump
é show show all traffic. Quando você injeta mensagens, isso envolve tanto umsend
bycansend
quanto umreceive
, entãotcpdump
imprime ambos.Se você quiser imprimir apenas mensagens recebidas (recebidas), você pode adicionar a
-Q in
opçãotcpdump
.