SOCK_PACKET
-
Hallo zusammen,
wenn ich ein Socket mit
int sockfd = socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL))
öffne, werden dann die fragmentierten IP-Pakete bereits vom Kernel wieder zusammengesetzt oder einzeln an mein Programm weitergeleitet?
Vielen Dank für eure Hilfe!
-
1. SOCK_PACKET soll man nicht mehr benutzen! Nimm lieber SOCK_RAW
2. Bei RAW Sockets liefert dir der Kernel die Packete ohne Veränderung, dh. die werden auch nicht zusammengefügt oder andere TCP Operationen durchgeführt!
-
kingruedi schrieb:
[...] 2. Bei RAW Sockets liefert dir der Kernel die Packete ohne Veränderung, dh. die werden auch nicht zusammengefügt oder andere TCP Operationen durchgeführt!
Trotzdem kann der kernel unter Umständen einen Header einfach hinzufügen und den Inhalt des buffers (ob ip header oder nur Inhalt) als Payload verwenden. Deshalb vor dem senden am besten:
setsockopt (sockfd, IPPROTO_IP, IP_HDRINCL, &yes, sizeof (int));
hinzufügen
-
Schon mal vielen Dank für die Antworten, mir geht es allerdings erstmal nur ums Empfangen.
Der Grund warum ich SOCK_PACKET benutze, ist dass dann auch TCP- und UDP-Pakete an das Socket weitergeleitet werden, was bei RAW-Sockets nicht der Fall ist, oder?
Das Seltsame ist, dass ich bei dem ganzen Datenverkehr(LAN+WWW) noch kein einziges Paket hatte, dass fragmentiert angekommen ist. War dies nur Zufall, oder könnte dies an irgendwelchen Einstellungen liegen?