2013-11-27 10 views
5

Wie kann ich die Prüfsumme einer ICMP-Echoanforderung oder -antwort berechnen, wenn die Prüfsumme den Datenteil enthalten soll, der Datenteil variabel sein kann und die Datengröße nicht vorhergesehen werden kann?ICMP-Echo-Prüfsumme

Hier ist documentation zur Berechnung der Prüfsumme eines ICMP-Headers.

ICMP Header Prüfsumme. 16 Bits. Das 16-Bit-Einerkomplement der Einerkomplement-Summe der ICMP-Nachricht, beginnend mit dem ICMP-Feld . Wenn die Prüfsumme berechnet wird, sollte das Prüfsummenfeld zuerst auf 0 zurückgesetzt werden. Wenn das Datenpaket übertragen wird, wird die Prüfsumme berechnet und in dieses Feld eingefügt. Wenn das Datenpaket empfangen wird, wird die Prüfsumme erneut berechnet und mit dem Prüfsummenfeld verifiziert. Wenn die beiden Prüfsummen nicht übereinstimmen, ist ein Fehler aufgetreten.

+0

www.roseperrone.com kann nicht erreicht werden! – fedorqui

Antwort

4

Wenn der Absender die Prüfsumme berechnet, wird der Wert in das Nullfeld eingefügt. Der Empfänger führt dann den umgekehrten Vorgang aus, zieht die Prüfsumme heraus, setzt das Feld auf Null und berechnet die Prüfsumme, wobei dieses Feld auf Nullen gesetzt ist. Es vergleicht den berechneten Wert mit dem extrahierten Wert.

Beide Seiten der Übertragung berechnen die Prüfsumme mit dem Feld Null.

aktualisieren

Ein Beispiel, wie diese Berechnung auf dieser Scribd presentation existiert auszuführen, auf Folie ausgehend 44. Ich auch das entsprechende Beispiel unten gleiten einschließlich bin.

Abbildung 9.19 zeigt ein Beispiel für die Prüfsummenberechnung für eine einfache Echoanforderungsnachricht (siehe Abbildung 9.14). Wir wählten nach dem Zufallsprinzip die Kennung zu 1 und die Sequenznummer zu 9. Die Nachricht ist unterteilt in 16-Bit (2-Byte) Worte. Die Wörter werden addiert und die Summe wird ergänzt. Jetzt kann der Absender diesen Wert in das Feld Prüfsumme setzen.

Ping Checksum calculation

Sie teilten die ICMP-Header und Daten in 16-Bit-Worte (0x0000 für das Prüfsumme Feld verwenden), erhält die Summe dieser Worte und dann aus der Summe des Einerkomplement. Dies wird dann in das Prüfsummenfeld eingefügt.

+0

Das ist nicht meine Frage. Ich muss die Prüfsumme über die gesamte ICMP-Nachricht berechnen, die einen Datenabschnitt variabler Größe enthalten kann. Woher weiß ich die Größe der Nachricht, über die ich die Prüfsumme berechnen? –

+0

Ich denke, die bessere Frage an diesem Punkt ist, wie analysieren Sie Ihre Pakete? Die Paketdaten sollten Teil Ihrer Paketanalyse sein. Das würde Ihnen die Größe der Daten geben. – Andy

+0

Die Daten sind optional, und für meine Zwecke ist es mir egal, was die Daten sind, also analysiere ich sie überhaupt nicht. Aber der Absender hat die Daten möglicherweise noch in die Prüfsumme aufgenommen, daher muss ich die Länge der Daten kennen, damit ich sie in meine Überprüfung der Prüfsumme einbeziehen kann. –

3

Sie können die ICMP-Nachrichtenlänge berechnen, indem Sie die Größe des IP-Headers vom Feld "Gesamtlänge" im IP-Header subtrahieren.

+0

Gibt es einen Beweis dafür? –

+0

Ein ICMP-Paket besteht aus einem IP-Header und einer ICMP-Nachricht. RFC 792 beschreibt das Feld Gesamtlänge als "Länge des Internet-Headers und der Daten in Oktetten". Bei einem ICMP-Paket sind die Daten die ICMP-Nachricht. –

+0

Ops, ich dachte, du sprichst über Checksum. Aber du fragst nur über Checksum. –

1

Bedenken Sie, dass in IPv6 auch ein Pseudo-Header des IPv6-Headers in die Prüfsummenberechnung einbezogen wird. In IPv4 ist dies nicht getan, da der Header bereits selbst Prüfsummen enthält.