Wir versuchen, mit dem Server zu kommunizieren, der auf der Loopback-Schnittstelle von Linux über den Raw-Socket hört, und es scheint, als ob der Server kein einziges Paket von uns bekommt. Die Pakete, die wir senden, sind in Wireshark sichtbar.
Ist Raw Socket on Loopback überhaupt möglich? (Bitte fragen Sie nicht, warum wir es brauchen: Es ist zu kompliziert, es hier zu erklären)
EDIT: So öffnen wir es
%Vor%Der Server ist lighttpd und erreichbar über normalen Socket auf localhost. netstat --raw druckt leere Tabelle, aber ich bin mir absolut sicher, dass wir auf normalen eth-Geräten zwei rohe Sockets haben.
Raw-Sockets verhalten sich besonders gut mit bind () und connect (), aber ich kann nicht bestätigen, dass Ihr Problem bei ihnen liegt. Ich schlage vor, dass Sie einem geradlinigeren Ansatz folgen:
Absender
%Vor%Empfänger
%Vor% Ich hoffe, dass sich diese genau so verhalten, wie Sie es wollen. Lies man 7 raw
für die blutigen Details, warum dies funktioniert und wichtiger man 7 packet
, wenn du es erweitern möchtest. Beachten Sie auch, dass IPPROTO_RAW die Socket-Option IP_HDRINCL angibt, weshalb wir den IP-Header selbst konstruieren - obwohl die IP-Prüfsumme und die Gesamtlänge vom Kernel immer noch berechnet und ausgefüllt werden.
edit: Wenn Sie außerdem einen Raw-Socket wünschen, mit dem Sie gültige Daten an eine Anwendung wie lighttpd senden, müssen Sie das protocol
-Argument mit socket()
vergleichen und gültige Werte für die IP bereitstellen Header-Felder. Ein richtiger Ethernet-Header ist nicht zwingend erforderlich - das einzige wichtige Feld wird vom Kernel-Stack für Sie ausgefüllt.
Tags und Links sockets linux raw-sockets