Captures de paquets: filtrage sur RX vs TX

8

J'ai un problème de réseau où des trames avec un MAC source qui correspond à l'un des MAC source de mon hôte arrivent sur l'hôte - un MAC ou une boucle en double apparent ou un autre problème L2.

Je crois que c'est la situation parce que les tables MAC (tables CAM) de mon pont Linux enregistrent un MAC local (pour une machine virtuelle hébergée) comme étant sur le port en amont, et les journaux du noyau montrent des erreurs:

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

J'aimerais obtenir plus de détails sur ces paquets / trames "voyous", mais je ne sais pas comment les cibler. Avec tcpdump, vous pouvez filtrer sur un MAC source particulier ('ether src MAC'), mais cela est basé sur les octets dans la trame - pas si la trame a été "envoyée" par rapport à "reçue dans". Nous supposons généralement qu'une trame avec notre MAC source signifie que nous l'envoyons, mais si une trame en double était reçue, le contenu serait exactement le même pour le filtre.

Comment peut-on observer si une trame a été reçue ou transmise dans une capture de paquets?

Joshua Miller
la source
1
Ne fonctionne pas tcpdump -i <interface> inbound(ou "sortant")?
La page de manuel semble indiquer que c'est limité à SLIP. Quand je l'essaye contre n'importe laquelle de mes interfaces (loopback, eth / em, bond, vlan, tap ...) tcpdump dit: "tcpdump: inbound / outbound not supported on linktype 1"
Joshua Miller
2
Cela ne répond pas à votre question, mais en utilisant iptables et ulogd, vous pourrez obtenir un pcap avec uniquement les paquets intéressants.
lsmooth
utiliser tcpdump -Lpour voir les interfaces prises en charge,
PersianGulf
utilisationngrep -d dev
PersianGulf

Réponses:

7

Utilisez l' --directionoption pour 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
la source
1
Cette option ne semble être disponible qu'avec la dernière version stable de tcpdump - 4.6.2. Mais après l'avoir construit sur ubuntu, il semble réussir à différencier les trames entrantes des trames sortantes. Huzzah!
Joshua Miller
1
@JoshuaMiller Je viens de consulter la tcpdumppage de manuel sur Ubuntu 14.04, et une option avec la même description existe, mais elle est appelée -Pplutôt que -Q(et la forme longue n'est pas mentionnée).
kasperd
@kasperd Vous avez raison! tcpdump 4.5.1 a en fait -P. Peut-être que la fonctionnalité n'est pas aussi nouvelle que je le pensais à l'origine.
Joshua Miller,
0

Avec iptables, vous avez différentes «chaînes» pour les paquets entrants et sortants. Depuis la page de manuel 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) ...

iptables peut effectuer une journalisation (-l), ce qui pourrait vous montrer ce dont vous avez besoin. Il peut vraisemblablement également transmettre des copies de paquets à une interface pour se connecter avec d'autres outils, mais je n'ai pas eu de raison de le faire.

mc0e
la source