Ich erstelle ein traceroute-ish-Tool, um die Anzahl der Hops zu ermitteln, die für ein UDP-Paket benötigt werden, um eine Adresse mit nur einer Sonde zu erreichen. Zu diesem Zweck möchte ich die TTL aus der ICMP-Nachricht, die ich nach dem Senden der Sonde erhalte, extrahieren. Ich mache das folgende und erfolgreich die ICMP-Nachricht empfangen:TTL aus einer ICMP-Nachricht lesen, die über Python-Raw-Sockets empfangen wurde
data, source = in_socket.recvfrom(d_bufsize)
Aber ich habe keine Ahnung, wie data
zu etwas machen, dass ich die TTL aus lesen kann. in_socket
wird wie folgt erklärt:
in_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp_proto)
Hier icmp_proto
nur die Protokollnummer für ICMP ist (erhalten durch icmp_proto = socket.getprotobyname("icmp")
tun).
Jede Hilfe wäre sehr willkommen!
Die TTL ist im IP-Header, nicht Teil von ICMP. Wenn dies nicht das gesamte IP-Paket zurückgibt, können Sie es nicht tun. – Barmar
@Barmar: Der Trick ist, dass die ICMP-Nachricht einen Teil des Datagramms enthält, das den Fehler ausgelöst hat. Indem Sie also ein Datagramm mit einer bekannten TTL aussenden und dann den enthaltenen Teil des fehlerauslösenden Datagramms verwenden, um seine TTL bei der Ankunft zu bestimmen, sollten Sie in der Lage sein, die Anzahl der Hops zu bestimmen. – hexaflexagonal
Oh, ich dachte, Sie sprachen über die TTL des empfangenen Datagramms, nicht über die TTL des gesendeten Datagramms, das den ICMP ausgelöst hat. – Barmar