Raw Socket Linux sendet / empfängt ein Paket

8

Habe Probleme beim Empfang von Paketen. Ich kann eingehende Pakete empfangen und lesen, aber ich denke, dass ich mit keinem Host einen Handschlag bekomme. Ich möchte nur ein Paket an einen Remote-Computer mit einem offenen Port senden, um eine Antwort zu erhalten, um die TTL (time to live) und die Fenstergröße zu sehen. Hat jemand eine Idee, wo die Fehler sind? (Ich habe kein sehr tiefes Wissen in C-Programmierung)

CODE:

%Vor%     
x4k3p 30.12.2012, 04:16
quelle

2 Antworten

10
  1. Sie empfangen und speichern Pakete in buffer , aber Sie drucken Daten aus ip und tcp , ohne diesen Puffer zu analysieren. Sie sollten das Paket von buffer nach dem Empfang und vor dem Drucken analysieren.
  2. Ihr Code geht davon aus, dass alle Pakete TCP sind, was nicht der Fall ist. RAW-Sockets unterstützen nur Layer-3-Protokolle (IP, ICMP usw.). Mit anderen Worten, die Verwendung von IPPROTO_TCP ist beim Erstellen eines RAW-Sockets irreführend. Bleiben Sie bei IPPROTO_IP und fügen Sie Ihrem Code die notwendigen Bedingungen für jedes Protokoll hinzu, das Ihnen wichtig ist (TCP, UDP, usw.). Dies funktioniert, weil der Linux-Kernel die Protokollnummer und Rückfälle auf IPPROTO_IP validiert. Dies funktioniert jedoch möglicherweise nicht in anderen Systemen.
  3. Überprüfen Sie, ob Ihre Netzwerkkommunikation die richtige Byte-Reihenfolge verwendet. Die Netzwerk-Byte-Reihenfolge ist Big-Endian, während die Host-Byte-Reihenfolge von Ihrer Architektur abhängt. Daher müssen Sie möglicherweise mehrere Byte-Felder vor und zurück konvertieren.
  4. Ihr tcp->seq hat möglicherweise einen ungültigen Wert, da TCP nur Werte bis zu 65535 akzeptiert, während random() Werte von 0 bis RAND_MAX (0x7fffffff) zurückgibt. Versuchen Sie tcp->seq = htonl(random() % 65535);
  5. Ihre Offset-Berechnung für den TCP-Header ist falsch. Es sollte sizeof(struct iphdr) anstatt sizeof(struct tcphdr) sein.
jweyrich 30.12.2012, 04:48
quelle
-1
%Vor%

Um den Array-Index des tcp-Headers in buffer zu erhalten, müssen Sie wie unten erwähnt sizeof(struct iphdr) zu buffer hinzufügen.

%Vor%     
rashok 29.12.2014 06:31
quelle

Tags und Links