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'implementer des protocoles IPv4
       dans  l'espace  utilisateur.  Une  socket  raw  recoit  ou  envoie  des
       datagrammes sans les en-tetes de la couche de liaison.

       La  couche  IPv4  genere des en-tetes IP lorsqu'elle envoie un paquet a
       moins que l'option IP_HDRINCL soit activee sur la  socket.  Lorsqu'elle
       est  activee,  la socket doit contenir l'en-tete IP. Pour la reception,
       l'en-tete IP est toujours inclus dans le paquet.

       Seuls  les  processus  avec  un  UID  effectif  nul  ou  une   capacite
       CAP_NET_RAW sont autorises a ouvrir des sockets raw.

       Tous  les  paquets  ou les erreurs correspondant au numero de protocole
       specifie pour la socket raw sont transmis a cette socket. Pour voir une
       liste  des protocoles autorises, consultez les numeros assignes dans la
       RFC 1700 et getprotobyname(3).

       Un  protocole  IPPROTO_RAW  implique  l'activation  de  IP_HDRINCL   et
       autorise  l'emission  suivant n'importe quel protocole IP indiquee dans
       l'en-tete. La reception de tous  les  protocoles  IP  avec  IPPROTO_RAW
       n'est pas possible avec les sockets raw.

              +--------------------------------------------------------+
              |IP Champs d'en-tete modifies en emission par IP_HDRINCL |
              +--------------------+-----------------------------------+
              |Checksum IP         | Toujours rempli.                  |
              +--------------------+-----------------------------------+
              |Adresse source      | Rempli si contient des zeros.     |
              +--------------------+-----------------------------------+
              |ID Paquet           | Rempli si contient des zeros.     |
              +--------------------+-----------------------------------+
              |Longueur totale     | Toujours rempli.                  |
              +--------------------+-----------------------------------+

       Si  IP_HDRINCL est specifie et si l'en-tete IP a une adresse non-nulle,
       alors l'adresse destination de la socket est utilisee  pour  router  le
       paquet.  Quand  MSG_DONTROUTE  est  specifie,  l'adresse de destination
       devrait toujours viser une interface locale. Sinon,  un  examen  de  la
       table de routage a quand meme lieu, mais les routes avec une passerelle
       sont ignorees.

       Si IP_HDRINCL n'est pas specifie, les options d'en-tete IP peuvent etre
       fixees  sur  les  sockets  raw avec setsockopt(2); consultez ip(7) pour
       plus d'informations.

       Dans Linux 2.2 tous les champs d'en-tete et les  options  peuvent  etre
       fixes en utilisant les options IP. Ceci signifie que les sockets raw ne
       servent en general que pour les nouveaux protocoles ou  les  protocoles
       sans interface utilisateur (comme ICMP).

       Lorsqu'un  paquet  est  recu, il est passe a toutes les sockets raw qui
       ont  ete  attachees  a  son  protocole  avant   d'etre   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,
       definie  dans  ip(7).  Le  champ  sin_port  pourrait  etre utilise pour
       specifier un numero de protocole IP, mais il est ignore pour l'emission
       dans  Linux 2.2  et  devrait  etre toujours mis a zero (voir paragraphe
       BOGUES).  Pour  les  paquets  entrants  sin_port  est  rempli  avec  le
       protocole du paquet. Consultez le fichier d'en-tete <netinet/in.h> pour
       les protocoles IP valides.

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

       ICMP_FILTER
              Active  un  filtre  special  sur  les  sockets  raw attachees au
              protocole IPPROTO_ICMP. La valeur a un bit pour chaque  type  de
              message  ICMP  qui doit etre rejete. La valeur par defaut 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 reseau ne sont transmises a l'utilisateur que
       lorsque la socket est connectee ou si le drapeau IP_RECVERR est  actif.
       Pour les sockets connectees, seules EMSGSIZE et EPROTO sont transmises,
       pour compatibilite. Avec IP_RECVERR, toutes  les  erreurs  reseau  sont
       sauvegardees 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 memoire invalide a ete 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 depasse le maximum autorise par IPv4 (64 Ko).

       EOPNOTSUPP
              Un attribut invalide a ete transmis a 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  capacite
              CAP_NET_RAW peuvent le faire.

       EPROTO Une   erreur   ICMP   est  arrivee,  indiquant  un  probleme  de
              parametrage.

VERSIONS

       IP_RECVERR et ICMP_FILTER sont nouveaux dans  Linux 2.2.  Ce  sont  des
       extensions  Linux  et  ne doivent pas etre employes dans des programmes
       portables.

       Linux 2.0 assurait une compatibilite bogue-a-bogue  avec  le  code  des
       sockets  raw de BSD lorsque l'attribut SO_BSDCOMPAT etait utilise. Ceci
       a ete supprime dans 2.2.

NOTES

       Par  defaut,  les  sockets  brutes  utilisent  la  detection   du   MTU
       (<< Maximum  Transmission Unit >>) pour le chemin. Cela signifie que le
       noyau garde en memoire le MTU vers une adresse IP cible specifique,  et
       renvoie  EMSGSIZE  lorsqu'un  paquet brut depasse cette taille. Dans ce
       cas, l'application doit diminuer la taille du paquet. La  detection  du
       MTU  par  chemin  peut  aussi  etre desactivee 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
       details. Lorsque  cette  option  est  desactivee,  les  sockets  brutes
       fragmenteront les paquets sortants qui depassent le MTU de l'interface.
       Ceci est cependant decourage, pour des raisons  de  performance  et  de
       fiabilite.

       Une  socket  raw  peut etre attachee a une adresse locale specifique en
       utilisant l'appel bind(2). Si elle n'est pas attachee, tous les paquets
       du  protocole IP specifie sont recus. De plus, une socket raw peut etre
       attachee a un peripherique reseau  particulier  avec  SO_BINDTODEVICE ;
       consultez socket(7).

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

       Si  vous  voulez  recevoir  tous  les  paquets  ICMP  pour  une  socket
       datagramme,  il  est souvent preferable d'utiliser IP_RECVERR sur cette
       socket particuliere, consultez ip(7).

       Les sockets raw peuvent capturer tous les  protocoles  IP  sous  Linux,
       meme  les protocoles comme ICMP ou TCP qui ont un module dans le noyau.
       Dans ce cas, le paquet est passe simultanement au module du noyau et  a
       la socket raw. Ce comportement n'est pas portable, de nombreuses autres
       implementations des sockets BSD ont des limitations ici.

       Linux ne modifie jamais les en-tetes fournis  par  l'utilisateur  (sauf
       pour  remplir  les  champs  ne  contenant  que des zeros comme cela est
       decrit  pour   IP_HDRINCL).   Ceci   differe   de   nombreuses   autres
       implementations des sockets raw.

       Les  sockets  raw sont en general peu portables et devrait etre evitees
       dans les programmes destines a etre portables.

       L'emission sur les sockets  raw  devrait  employer  le  protocole  dans
       sin_port  ;  ceci  a ete perdu dans Linux 2.2. Un remede est d'utiliser
       IP_HDRINCL.

BOGUES

       Les extensions de Proxy transparent ne sont pas decrites.

       Lorsque l'option IP_HDRINCL est active, les datagrammes ne  seront  pas
       fragmentes et sont limites au MTU de l'interface.

       Utiliser  en  emission  le  protocole  IP  indique  dans sin_port a ete
       supprime dans Linux 2.2. On utilise toujours  le  protocole  auquel  la
       socket  a  ete  attachee  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-tete <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      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis  2010,  cette  traduction est maintenue a l'aide de l'outil po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   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'equipe francophone de traduction de Debian (2006-2009).

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

       Vous pouvez toujours avoir acces a la version anglaise de  ce  document
       en utilisant la commande << man -L C <section> <page_de_man> >>.