Verfolgen Sie ein Paket, wie es durch den Kernel (Linux) geht

8

Ich habe zwei Maschinen, die für die Verwendung von Ip-Security eingerichtet sind, und Maschine A (nennen wir sie A und B) hat einen Socket, der an einen bestimmten UDP-Port des lokalen Rechners gebunden ist alles wird darauf empfangen.

Wenn ich die Ip-Sicherheit deaktiviere, gehen die Daten zwischen den beiden Rechnern gut durch und ich sende und empfange die Pakete in Ordnung. Aber wenn Ip-Security aktiviert ist, gelangt das Paket nicht zu diesem Socket auf Computer A, der von Computer B gesendet wird.

Ich mache einen tcpdump auf beiden Maschinen und ich kann sehen, dass das (verschlüsselte) Paket von Maschine B gesendet und auf Maschine A empfangen wird. Aber danach geht das Paket zum Kernel und irgendwo in die Entschlüsselung des Pakets oder in einer anderen Phase, das Paket wird fallen gelassen.

Ich möchte in der Lage sein, das Paket zu verfolgen, während es durch den Kernel läuft und um zu sehen, wo es gelöscht wird. Gibt es% /proc , die ich für diesen Zweck verwenden kann? Die andere Methode, die ich mir vorstellen kann, besteht darin, Debug-Anweisungen im gesamten Kernel einzufügen und neu zu kompilieren und dann zu versuchen, das Paket erneut zu senden und das Debugging zu durchlaufen.

Danke und Entschuldigung für die lange Nachricht, aber es war notwendig.

    
mtahmed 03.11.2011, 17:32
quelle

2 Antworten

9

Bitte beziehen Sie sich auf das Projekt namens SystemTap . Es ermöglicht Ihnen, benutzerfreundliche Skripts in jeden Kernel-Code einzubinden, ohne den Kernel neu kompilieren zu müssen. Zum Beispiel:

%Vor%

Er gibt für jedes empfangene Paket in der Netzwerkschicht einen Kernel-Print aus. Natürlich müssten Sie die Quellen lesen, um von dort tiefer in den Netzwerkstack zu folgen.

SystemTap ist sehr fähig und ziemlich dokumentiert über die verschiedenen Haken, die eingefügt werden können.

    
Dan Aloni 04.11.2011, 06:28
quelle
7

Ja, wie Dan sagte, SystemTap ist nützlich. Aber mein Favorit ist ftrace.

Als Referenz:

Pfad des UDP-Pakets im Linux-Kernel

Um den Netzwerkverkehr im Allgemeinen zurückzuverfolgen, fügen Sie das Folgende in eine Bash-Shell ein und führen Sie es als root aus:

%Vor%

Und so weiter auf dem empfangenden Eingangspfad:

%Vor%

und das:

Netlink-Verarbeitung:

%Vor%

und das ist auch der Eintritt:

%Vor%

Und das ist der Ausgang (ausgehend vom syscall "sendmsg ()"):

%Vor%

Ich hoffe, Sie genießen ....

    
Peter Teoh 12.03.2015 15:29
quelle