Ich lernte den Linux- ping
Befehl und seine Optionen und las über die -m
Option, die zum Markieren des ausgehenden Pakets verwendet wird. Beim Empfang können wir zuerst das markierte Paketergebnis filtern.
Ich versuche, die Markierung für das Paket zu setzen, habe jedoch eine Warnmeldung erhalten:
$ ping -m 10 server
PING server (192.168.2.2) 56(84) bytes of data.
Warning: Failed to set mark 10
64 bytes from server (192.168.2.2): icmp_req=1 ttl=64 time=0.182 ms
64 bytes from server (192.168.2.2): icmp_req=2 ttl=64 time=0.201 ms
Warum wird es nicht markiert? Wie kann ich ein Paket mit der -m
Option markieren ?
Antworten:
Kurze Antwort: Mit einem normalen Benutzer kann man nichts anfangen.
Lange Antwort: Um Pakete markieren zu können, müssen Sie ein Root-Benutzer oder zumindest ein Benutzer mit der
SO_MARK
Fähigkeit sein (muss als Root festgelegt werden):SO_MARK am Socket (7) :
Der Code bei ping_common.c von iputils, der diese Theorie bestätigt:
Um mehr über Fähigkeiten zu erfahren: Übersicht über die Fähigkeiten des Menschen (7) und die Fähigkeiten (7) .
Wenn Sie die Funktionen aller anderen Binärdateien des Systems weiter ausbauen möchten, ist dies eine gute Möglichkeit, sie zu prüfen. Umfasst die Kernel-Kompilierung, sodass sie möglicherweise nicht für die Produktionsumgebung geeignet ist.
Nützlichkeit der ICMP-Kennzeichnung:
Wie auf den Manpages beschrieben :
Und wie in einer Superuser- Frage erläutert , kann diese Funktion nützlich sein, wenn Sie eine Multilink- / Multiroute-Netzwerkumgebung prüfen, in der Sie erzwingen müssen, dass ein ICMP-Paket einen bestimmten "Fluss" durchläuft.
Praktisches Beispiel. Host 1:
Host 2. Ändern Sie die Standardrichtlinie für
INPUT
toDROP
und akzeptieren Sie Pakete nur von der Quell-IP der spezifischen Route, die auf Host 1 die Markierung 10 aufweist:Dies wurde bereits erklärt hier . Auch hier wird es besser zum Debuggen von Routing-Entscheidungen verwendet (wenn Sie mehr als einen Pfad zwischen zwei Hosts haben), da a
tcpdump -nevvv -i <interface> src host <source_host>
mehr als genug ist, um nur die "Ankunft von ICMP-Paketen" zu prüfen.quelle