NOM¶
inet_pton - Convertir des adresses IPv4 et IPv6 sous forme texte en forme
binaire
SYNOPSIS¶
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
DESCRIPTION¶
Cette fonction convertit la chaîne de caractères
src en une
structure d'adresse réseau de la famille
af, puis copie cette
structure dans
dst .L'argument
af doit être soit
AF_INET soit
AF_INET6.
Les familles d'adresses suivantes sont dès à présent
supportées :
- AF_INET
- src pointe sur une chaîne de caractère
contenant une adresse réseau IPv4 au format décimal pointé
ddd.ddd.ddd.ddd, où ddd est un nombre décimal,
contenant jusqu'à trois chiffres, dans l'intervalle 0 à 255.
L'adresse est alors convertie en une structure struct in_addr et
copiée dans dst, qui doit donc contenir au minimum
sizeof(struct in_addr) (4) octets (32 bits).
- AF_INET6
- src pointe sur une chaîne de caractères
contenant une adresse réseau IPv6. L'adresse est convertie en une
structure struct in6_addr et copiée dans dst, qui doit
donc contenir au moins sizeof(struct in6_addr) (16) octets
(128 bits). Les formats d'adresse IPv6 autorisés suivent les
règles suivantes :
- 1.
- Le format préféré est
x:x:x:x:x:x:x:x. Cette forme consiste en 8 nombres
hexadécimaux, chacun d'entre eux exprimant une valeur sur
16 bits (c'est-à-dire que chaque x peut contenir
jusqu'à 4 symboles hexadécimaux).
- 2.
- Une série de zéros contigus dans la forme
préférée peut être abrégée en ::. Une
seule instance de :: peut apparaître dans une adresse. Par
exemple, l'adresse de boucle 0:0:0:0:0:0:0:1 peut être
abrégée en ::1. L'adresse joker, constituée
uniquement de zéros, peut être écrite comme ::.
- 3.
- Un autre format utile pour exprimer des adresses IPv4
projetées dans l'espace IPv6 est x:x:x:x:x:x:d.d.d.d, où
les six x de tête sont des valeurs hexadécimales qui
définissent les 6 mots 16 bits de poids fort de l'adresse
(c'est-à-dire 96 bits), et les d expriment une valeur en
notation décimale pointée définissant les 32 bits de
poids faible de l'adresse. Un exemple d'une telle adresse est
::FFFF:204.152.189.116.
- Consultez la RFC 2373 pour plus de détails sur la
représentation des adresses IPv6.
VALEUR RENVOYÉE¶
inet_pton() renvoie 1 si elle réussit (l'adresse réseau a
été convertie avec succès). Elle renvoie une valeur nulle si
src ne contient pas une adresse réseau valable pour la famille
indiquée. Si
af ne contient pas de famille d'adresse valable, -1
est renvoyé et
errno contient
EAFNOSUPPORT.
POSIX.1-2001.
NOTES¶
Contrairement à
inet_aton(3) et
inet_addr(3),
inet_pton() gère les adresses IPv6. D'un autre coté,
inet_pton() n'accepte que les adresses IPv4 en notation décimale
pointée alors que
inet_aton(3) et
inet_addr(3) autorisent
la notation plus générale numérique pointée (formats
à nombre hexadécimaux et octaux, de même que les formats
n'exigeant pas que les 4 octets soient explicitement écrits). Pour une
interface gérant les adresses IPv6 et IPv4 en notation numérique
pointée, consultez
getaddrinfo(3).
BOGUES¶
AF_INET6 ne reconnaît pas les adresses IPv4. Il faut dans ce cas
fournir dans
src une adresse IPv4 projetée dans l'espace IPv6.
EXEMPLE¶
Le programme suivant montre une utilisation de
inet_pton() et
inet_ntop(3). Voici quelques exemples d'exécution :
$ ./a.out i6 0:0:0:0:0:0:0:0
::
$ ./a.out i6 1:0:0:0:0:0:0:8
1::8
$ ./a.out i6 0:0:0:0:0:FFFF:204.152.189.116
::ffff:204.152.189.116
Source du programme¶
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char *argv[])
{
unsigned char buf[sizeof(struct in6_addr)];
int domain, s;
char str[INET6_ADDRSTRLEN];
if (argc != 3) {
fprintf(stderr, "Usage: %s {i4|i6|<num>} string\n", argv[0]);
exit(EXIT_FAILURE);
}
domain = (strcmp(argv[1], "i4") == 0) ? AF_INET :
(strcmp(argv[1], "i6") == 0) ? AF_INET6 : atoi(argv[1]);
s = inet_pton(domain, argv[2], buf);
if (s <= 0) {
if (s == 0)
fprintf(stderr, "Not in presentation format");
else
perror("inet_pton");
exit(EXIT_FAILURE);
}
if (inet_ntop(domain, buf, str, INET6_ADDRSTRLEN) == NULL) {
perror("inet_ntop");
exit(EXIT_FAILURE);
}
printf("%s\n", str);
exit(EXIT_SUCCESS);
}
VOIR AUSSI¶
getaddrinfo(3),
inet(3),
inet_ntop(3)
COLOPHON¶
Cette page fait partie de la publication 3.44 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
<
http://www.kernel.org/doc/man-pages/>.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau 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> ».