Paketerfassungen: Filtern nach RX vs TX

8

Ich habe ein Netzwerkproblem, bei dem Frames mit einem Quell-MAC, der mit einem der Quell-MACs meines Hosts übereinstimmt, am Host ankommen - ein offensichtlicher doppelter MAC, eine Schleife oder ein anderes L2-Problem.

Ich glaube, dies ist die Situation, weil die MAC-Tabellen (CAM-Tabellen) meiner Linux-Bridge einen lokalen MAC (für eine gehostete virtuelle Maschine) als am Upstream-Port befindlich registrieren und die Kernel-Protokolle Fehler anzeigen:

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

Ich würde gerne mehr Details über diese "Schurken" -Pakete / Frames erfahren, aber ich kann nicht herausfinden, wie ich sie herausfinden kann. Mit tcpdump können Sie nach einem bestimmten Quell-MAC ('ether src MAC') filtern. Dies basiert jedoch auf den Bytes im Frame - nicht darauf, ob der Frame "gesendet" oder "empfangen" wurde. Wir gehen normalerweise davon aus, dass ein Frame mit unserem Quell-MAC bedeutet, dass wir ihn senden. Wenn jedoch ein doppelter Frame empfangen würde, würde der Inhalt für den Filter genauso aussehen.

Wie kann man beobachten, ob bei einer Paketerfassung ein Frame empfangen oder gesendet wurde?

Joshua Miller
quelle
1
Funktioniert nicht tcpdump -i <interface> inbound(oder "ausgehend")?
Die Manpage scheint anzuzeigen, dass dies auf SLIP beschränkt ist. Wenn ich es gegen eine meiner Schnittstellen versuche (Loopback, Eth / Em, Bond, VLAN, Tap ...), sagt tcpdump: "tcpdump: Inbound / Outbound wird auf Linktyp 1 nicht unterstützt"
Joshua Miller
2
Es beantwortet Ihre Frage nicht, aber wenn Sie iptables und ulogd verwenden, können Sie eine PCAP mit nur den interessanten Paketen erhalten.
lsmooth
Verwendung tcpdump -Lfür siehe unterstützte Schnittstellen,
PersianGulf
Verwenden Siengrep -d dev
PersianGulf

Antworten:

6

Verwenden Sie die --directionOption zum 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
quelle
1
Diese Option scheint nur mit der neuesten stabilen Version von tcpdump - 4.6.2 verfügbar zu sein. Aber nachdem es auf Ubuntu erstellt wurde, scheint es erfolgreich zwischen eingehenden und ausgehenden Frames zu unterscheiden. Huzzah!
Joshua Miller
1
@JoshuaMiller Ich habe gerade die tcpdumpManpage unter Ubuntu 14.04 überprüft und es gibt eine Option mit genau der gleichen Beschreibung, die jedoch -Peher aufgerufen wird als -Q(und die Langform wird nicht erwähnt).
Kasperd
@kasperd Du hast recht! tcpdump 4.5.1 hat tatsächlich -P. Vielleicht ist die Funktionalität nicht so neu wie ich ursprünglich dachte.
Joshua Miller
0

Mit iptables haben Sie unterschiedliche "Ketten" für eingehende und ausgehende Pakete. Aus der Manpage 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 kann einige Protokollierungen (-l) durchführen, die Ihnen möglicherweise zeigen, was Sie benötigen. Es kann vermutlich auch Kopien von Paketen an eine Schnittstelle zur Protokollierung mit anderen Tools weiterleiten, aber ich hatte keinen Grund dazu.

mc0e
quelle