Captura de pacotes: filtragem em RX vs TX

8

Eu tenho um problema de rede em que os quadros com um MAC de origem que corresponde a um dos MACs de origem do meu host estão chegando ao host - um aparente duplicado MAC, loop ou outro problema L2.

Acredito que esta seja a situação, porque as tabelas MAC (tabelas CAM) da minha ponte linux registram um MAC local (para uma máquina virtual hospedada) como estando na porta upstream, e os logs do kernel mostram erros:

bridgename: received packet on bond0.2222 with own address as source address

Gostaria de obter mais detalhes sobre esses pacotes / quadros "não autorizados", mas não consigo descobrir como zerá-los. Com o tcpdump, você pode filtrar um MAC de origem específico ('ether src MAC'), mas isso se baseia nos bytes no quadro - não se o quadro foi "enviado" versus "recebido". Normalmente, assumimos que um quadro com o MAC de origem significa que o estamos enviando, mas se um quadro duplicado for recebido, o conteúdo parecerá exatamente o mesmo para o filtro.

Como observar se um quadro foi recebido ou transmitido em uma captura de pacote?

Joshua Miller
fonte
1
Não tcpdump -i <interface> inbound(ou "de saída") funciona?
A página de manual parece indicar que está limitado ao SLIP. Quando eu tento isso em qualquer uma das minhas interfaces (loopback, eth / em, bond, vlan, tap ...) tcpdump diz: "tcpdump: entrada / saída não suportada no tipo de link 1"
Joshua Miller
2
Ele não responde à sua pergunta, mas, usando o iptables e o ulogd, você seria capaz de obter um pcap apenas com os pacotes interessantes.
Lsmooth #
uso tcpdump -Lpara interfaces see suportado,
Golfo Pérsico
usengrep -d dev
PersianGulf

Respostas:

7

Use a --directionopção para tcpdump:

-Q direction
--direction=direction
       Choose send/receive direction direction for which packets should be
       captured. Possible values are `in', `out' and `inout'. Not available on
       all platforms.
abacabadabacaba
fonte
1
Esta opção parece estar disponível apenas na versão estável mais recente do tcpdump - 4.6.2. Mas depois de construí-lo no ubuntu, parece diferenciar com êxito os quadros de entrada e os de saída. Huzzah!
Joshua Miller
1
@ JoshuaMiller Acabei de verificar a tcpdumppágina de manual no Ubuntu 14.04, e existe uma opção com a mesma descrição exata, mas ela é chamada -Pe não -Q(e o formulário longo não é mencionado).
precisa saber é o seguinte
@kasperd Você está certo! O tcpdump 4.5.1 realmente possui -P. Talvez a funcionalidade não seja tão nova quanto eu pensava inicialmente.
Joshua Miller
0

Com o iptables, você tem 'cadeias' diferentes para pacotes de entrada e saída. Na página do manual iptables (8):

... the chains INPUT and OUTPUT are only traversed for packets coming into 
the local host and originating from the local host  respectively.   Hence 
every  packet  only  passes  through one of the three chains (except 
loopback traffic, which involves both INPUT and OUTPUT chains) ...

O iptables pode fazer alguns registros (-l), o que pode mostrar o que você precisa. Presumivelmente, ele também pode encaminhar cópias de pacotes para uma interface para fazer logon com outras ferramentas, mas não tive motivos para fazer isso.

mc0e
fonte