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);
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.
Voir 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.
CONFORMITÉ
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, voir 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.23 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
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
francophone de traduction de Debian.
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> ».