Provided by: manpages-fr_3.32d0.2p4-1_all bug

NOM

       raw, SOCK_RAW - Sockets brutes (raw) IPv4 sous Linux

SYNOPSIS

       #include <sys/socket.h>
       #include <netinet/in.h>
       raw_socket = socket(AF_INET, SOCK_RAW, int protocole);

DESCRIPTION

       Les  sockets  brutes  (raw)  permettent  d'implémenter  des  protocoles IPv4 dans l'espace
       utilisateur. Une socket raw reçoit ou envoie des  datagrammes  sans  les  en-têtes  de  la
       couche de liaison.

       La  couche  IPv4  génère des en-têtes IP lorsqu'elle envoie un paquet à moins que l'option
       IP_HDRINCL soit activée sur la socket. Lorsqu'elle est activée, la  socket  doit  contenir
       l'en-tête IP. Pour la réception, l'en-tête IP est toujours inclus dans le paquet.

       Seuls  les processus avec un UID effectif nul ou une capacité CAP_NET_RAW sont autorisés à
       ouvrir des sockets raw.

       Tous les paquets ou les erreurs correspondant au numéro  de  protocole  spécifié  pour  la
       socket  raw  sont  transmis  à cette socket. Pour voir une liste des protocoles autorisés,
       consultez les numéros assignés dans la RFC 1700 et getprotobyname(3).

       Un protocole IPPROTO_RAW  implique  l'activation  de  IP_HDRINCL  et  autorise  l'émission
       suivant  n'importe  quel  protocole  IP  indiquée dans l'en-tête. La réception de tous les
       protocoles IP avec IPPROTO_RAW n'est pas possible avec les sockets raw.

              ┌────────────────────────────────────────────────────────┐
              │IP Champs d'en-tête modifiés en émission par IP_HDRINCL │
              ├────────────────────┬───────────────────────────────────┤
              │Checksum IP         │ Toujours rempli.                  │
              ├────────────────────┼───────────────────────────────────┤
              │Adresse source      │ Rempli si contient des zéros.     │
              ├────────────────────┼───────────────────────────────────┤
              │ID Paquet           │ Rempli si contient des zéros.     │
              ├────────────────────┼───────────────────────────────────┤
              │Longueur totale     │ Toujours rempli.                  │
              └────────────────────┴───────────────────────────────────┘

       Si IP_HDRINCL est spécifié et si l'en-tête IP à une  adresse  non-nulle,  alors  l'adresse
       destination  de  la  socket  est  utilisée  pour router le paquet. Quand MSG_DONTROUTE est
       spécifié, l'adresse de destination devrait toujours viser une interface locale. Sinon,  un
       examen  de la table de routage a quand même lieu, mais les routes avec une passerelle sont
       ignorées.

       Si IP_HDRINCL n'est pas spécifié, les options d'en-tête IP peuvent  être  fixées  sur  les
       sockets raw avec setsockopt(2); consultez ip(7) pour plus d'informations.

       Dans  Linux 2.2  tous  les champs d'en-tête et les options peuvent être fixés en utilisant
       les options IP. Ceci signifie que les sockets raw ne  servent  en  général  que  pour  les
       nouveaux protocoles ou les protocoles sans interface utilisateur (comme ICMP).

       Lorsqu'un  paquet  est reçu, il est passé à toutes les sockets raw qui ont été attachées à
       son protocole avant d'être transmis aux gestionnaires des autres protocoles  (par  exemple
       les modules des protocoles du noyau).

   Format d'adresse
       Les sockets raw utilisent la structure d'adresse sockaddr_in standard, définie dans ip(7).
       Le champ sin_port pourrait être utilisé pour spécifier un numéro de protocole IP, mais  il
       est  ignoré  pour  l'émission  dans  Linux 2.2  et  devrait être toujours mis à zéro (voir
       paragraphe BOGUES). Pour les paquets entrants sin_port est rempli  avec  le  protocole  du
       paquet. Consultez le fichier d'en-tête <netinet/in.h> pour les protocoles IP valides.

   Options de sockets
       Les  options  des  sockets  raw  peuvent  être  écrites  avec  setsockopt(2)  et lues avec
       getsockopt(2) en passant l'attribut de famille IPPROTO_RAW.

       ICMP_FILTER
              Active un filtre spécial sur les sockets raw attachées au  protocole  IPPROTO_ICMP.
              La valeur a un bit pour chaque type de message ICMP qui doit être rejeté. La valeur
              par défaut est de ne filtrer aucun messages ICMP.

       De plus, toutes les options IPPROTO_IP de ip(7) valides pour les sockets datagrammes  sont
       prises en charge.

   Traitement des erreurs
       Les  erreurs  provenant du réseau ne sont transmises à l'utilisateur que lorsque la socket
       est connectée ou si le drapeau IP_RECVERR est actif. Pour les sockets  connectées,  seules
       EMSGSIZE  et  EPROTO  sont  transmises,  pour  compatibilité.  Avec IP_RECVERR, toutes les
       erreurs réseau sont sauvegardées dans la file d'erreurs.

ERREURS

       EACCES L'utilisateur essaye d'envoyer sur une adresse  broadcast  sans  avoir  le  drapeau
              broadcast sur la socket.

       EFAULT Une adresse mémoire invalide a été fournie.

       EINVAL Argument invalide.

       EMSGSIZE
              Paquet trop grand. Soit la recherche du MTU des chemins est active (voir l'attribut
              IP_MTU_DISCOVER de socket), soit la taille du paquet dépasse  le  maximum  autorisé
              par IPv4 (64 Ko).

       EOPNOTSUPP
              Un attribut invalide a été transmis à un appel sur la socket (comme MSG_OOB).

       EPERM  L'utilisateur  n'a  pas la permission d'ouvrir des sockets raw. Seuls les processus
              avec un UID effectif nul ou la capacité CAP_NET_RAW peuvent le faire.

       EPROTO Une erreur ICMP est arrivée, indiquant un problème de paramétrage.

VERSIONS

       IP_RECVERR et ICMP_FILTER sont nouveaux dans Linux 2.2. Ce sont des extensions Linux et ne
       doivent pas être employés dans des programmes portables.

       Linux 2.0  assurait  une  compatibilité  bogue-à-bogue avec le code des sockets raw de BSD
       lorsque l'attribut SO_BSDCOMPAT était utilisé. Ceci a été supprimé dans 2.2.

NOTES

       Par défaut, les sockets brutes utilisent  la  détection  du  MTU  (« Maximum  Transmission
       Unit »)  pour  le  chemin.  Cela  signifie  que  le noyau garde en mémoire le MTU vers une
       adresse IP cible spécifique, et renvoie  EMSGSIZE  lorsqu'un  paquet  brut  dépasse  cette
       taille.  Dans ce cas, l'application doit diminuer la taille du paquet. La détection du MTU
       par chemin peut aussi être désactivée en utilisant l'option de socket  IP_MTU_DISCOVER  ou
       le  fichier  /proc/sys/net/ipv4/ip_no_pmtu_disc,  consultez  ip(7)  pour  plus de détails.
       Lorsque cette option est désactivée, les sockets brutes fragmenteront les paquets sortants
       qui  dépassent  le  MTU  de l'interface. Ceci est cependant découragé, pour des raisons de
       performance et de fiabilité.

       Une socket raw peut être attachée à une adresse locale  spécifique  en  utilisant  l'appel
       bind(2). Si elle n'est pas attachée, tous les paquets du protocole IP spécifié sont reçus.
       De plus, une socket raw peut être attachée  à  un  périphérique  réseau  particulier  avec
       SO_BINDTODEVICE ; consultez socket(7).

       Une  socket  IPPROTO_RAW  ne  fonctionne qu'en émission. Si vous désirez vraiment recevoir
       tous les paquets IP, utilisez une socket packet(7) avec le protocole ETH_P_IP.  Notez  que
       les sockets packet ne réassemblent pas les fragments IP contrairement aux sockets raw.

       Si  vous  voulez recevoir tous les paquets ICMP pour une socket datagramme, il est souvent
       préférable d'utiliser IP_RECVERR sur cette socket particulière, consultez ip(7).

       Les sockets raw peuvent capturer tous les protocoles IP sous Linux,  même  les  protocoles
       comme  ICMP  ou  TCP  qui  ont  un  module dans le noyau. Dans ce cas, le paquet est passé
       simultanément au module du noyau et à la socket raw. Ce comportement n'est  pas  portable,
       de nombreuses autres implémentations des sockets BSD ont des limitations ici.

       Linux  ne  modifie  jamais  les  en-têtes fournis par l'utilisateur (sauf pour remplir les
       champs ne contenant que des zéros comme cela est décrit pour IP_HDRINCL). Ceci diffère  de
       nombreuses autres implémentations des sockets raw.

       Les  sockets raw sont en général peu portables et devrait être évitées dans les programmes
       destinés à être portables.

       L'émission sur les sockets raw devrait employer le protocole dans sin_port ;  ceci  a  été
       perdu dans Linux 2.2. Un remède est d'utiliser IP_HDRINCL.

BOGUES

       Les extensions de Proxy transparent ne sont pas décrites.

       Lorsque  l'option  IP_HDRINCL est active, les datagrammes ne seront pas fragmentés et sont
       limités au MTU de l'interface.

       Utiliser en émission le protocole IP indiqué dans sin_port a été supprimé dans  Linux 2.2.
       On  utilise toujours le protocole auquel la socket a été attachée avec bind(2) ou celui de
       l'appel socket(2) initial.

VOIR AUSSI

       recvmsg(2), sendmsg(2), capabilities(7), ip(7), socket(7).

       RFC 1191 pour la recherche du MTU du chemin.

       RFC 791 et le fichier d'en-tête <linux/ip.h> pour le protocole IP.

COLOPHON

       Cette page fait partie de la publication 3.32 du projet man-pages Linux.  Une  description
       du  projet  et  des  instructions  pour  signaler  des  anomalies  peuvent être trouvées à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis   2010,   cette   traduction   est   maintenue   à   l'aide   de    l'outil    po4a
       <URL:http://po4a.alioth.debian.org/>  par  l'équipe  de  traduction francophone au sein du
       projet perkamon <URL:http://perkamon.alioth.debian.org/>.

       Christophe  Blaess  <URL:http://www.blaess.fr/christophe/>   (1996-2003),   Alain   Portal
       <URL:http://manpagesfr.free.fr/>  (2003-2006).  Julien  Cristau et l'équipe francophone de
       traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>   ou   par   un  rapport  de  bogue  sur  le  paquet
       manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document  en  utilisant  la
       commande « man -L C <section> <page_de_man> ».