qu'est-ce que RAW socket socket de programmation
Quand j'ai traversé programmation socket, je ne pouvais pas comprendre clairement RAW_SOCKET.
Ma compréhension est
Si j'ouvre un socket avec cette option AF_INET , RAW_SOCKET veux dire que je peux créer mon maintenant d'en-tête
avant AF_INET en-têtes, mais finalement les données est de l'envoyer dans le format de AF_INET protocole.
Ma compréhension est correcte . Si tort, certains m'expliquer.
Merci
Vous devez vous connecter pour publier un commentaire.
Dans chaque couche,le paquet a deux disjoints sections: la Tête, la Charge utile
non-Raw socket signifie que vous pouvez simplement de déterminer la Couche de Transport de Charge utile. j'.e c'est l'OS de la tâche de créer de Transport,Réseau, Liaison de Données la couche d'en-têtes.
Raw socket signifie que vous pouvez déterminer chaque section de paquet,soit en-tête ou d'une charge. Veuillez noter que le socket raw est un mot général. - Je classer raw socket dans: Prise Réseau andd de Liaison de Données à Douille (ou alternativly Socket L3 et L2 Socket)
En L3 support que vous pouvez déterminer en-tête et de la charge utile du paquet de couche réseau. Par exemple, si la couche réseau protocole IPv4, vous pouvez déterminer à en-tête IPv4 et de la charge utile. Ainsi, vous pouvez définir-tête de couche transport/charge utile, en-tête ICMP/charge utile, les Protocoles de Routage headder/charge utile.
En L2 Socket, vous pouvez définir l'en-tête et de la charge utile du paquet de couche de liaison de données, j'.e tout dans le paquet. Ainsi, vous n'avez tout fait avec Socket L3 + de déterminer ARP en-tête/charge utile, en-tête PPP/charge utile, l'en-tête PPPOE/charge utile , .... .
Maintenant dans la programmation:
Troisième paramètre, spécifiez la charge utile du protocole.
RAW_SOCKET permettre à l'utilisateur de mettre en œuvre son propre protocole de couche transport au-dessus de protocole internet (IP) de niveau . Vous êtes responsable pour la création et l'analyse de transport au niveau des en-têtes et la logique derrière elle. Un paquet ressemblerait à:
EDIT: il y a une bonne description des raw sockets sur Linux page de man, ou ici si vous utilisez Windows.
Vous pouvez également utiliser SOCK_RAW avec "Paquet Sockets" qui vous permettra d'avoir plein de contrôle sur la L2 (Ethernet) et L3 (IP) de couches.. ce qui signifie que vous pouvez complètement personnaliser-vous rendre paquet comme il s'agit d'un NIC..
Plus de détails ici:
http://www.kernel.org/doc/man-pages/online/pages/man7/packet.7.html
http://austinmarton.wordpress.com/2011/09/14/sending-raw-ethernet-packets-from-a-specific-interface-in-c-on-linux/
Il est également utilisé pour les protocoles tels que le protocole ICMP (ping), vous devez connaître la structure du MPCI paquet pour le créer. Aussi le noyau ne'n modifier vos paquets