Ich möchte den Datenverkehr auf virtuellen Linux-Schnittstellen zu Debugging-Zwecken erfassen. Ich habe experimentiert mit veth
, tun
und dummy
Interface - Typen; Bei allen dreien habe ich Probleme, tcpdump
etwas zu zeigen.
So richte ich die Dummy-Schnittstelle ein:
ip link add dummy10 type dummy
ip addr add 99.99.99.1 dev dummy10
ip link set dummy10 up
In einem Terminal sehen Sie es mit tcpdump
:
tcpdump -i dummy10
Hören Sie gleich mit nc
:
nc -l 99.99.99.1 2048
In einem dritten Schritt stellen Sie eine HTTP-Anfrage mit curl
:
curl http://99.99.99.1:2048/
Obwohl wir in Terminal 2 die Daten aus der curl
Anfrage sehen können, zeigt sich nichts von tcpdump
.
In einem Tun / Tap-Tutorial werden einige Situationen erläutert , in denen der Kernel möglicherweise keine Pakete sendet, wenn er auf einer lokalen Schnittstelle ausgeführt wird:
Wenn wir die Ausgabe von tshark betrachten, sehen wir ... nichts. Es wird kein Datenverkehr über die Schnittstelle geleitet. Dies ist richtig: Da wir die IP-Adresse der Schnittstelle anpingen, entscheidet das Betriebssystem korrekt, dass kein Paket "auf dem Draht" gesendet werden muss, und der Kernel selbst antwortet auf diese Pings. Wenn Sie darüber nachdenken, ist es genau das, was passieren würde, wenn Sie die IP-Adresse einer anderen Schnittstelle anpingen würden (zum Beispiel eth0): Es würden keine Pakete gesendet. Dies mag offensichtlich klingen, könnte aber zunächst Verwirrung stiften (es war für mich).
Es ist jedoch schwer einzusehen, wie dies auf TCP-Datenpakete zutreffen könnte.
Vielleicht tcpdump
sollte das Interface anders angebunden sein?