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%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. 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. 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);
sizeof(struct iphdr)
anstatt sizeof(struct tcphdr)
sein. Tags und Links c sockets networking send recv