INET_PTON
Section : Manuel du programmeur Linux (
3)
Mise à jour de la version anglaise : 18 juin 2008
Index
Menu principal
NOM
inet_pton - Créer une structure d'adresse réseau
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ères contenant une adresse
réseau IPv4 au format décimal pointé « ddd.ddd.ddd.ddd », où
ddd
est un nombre décimal jusqu'à trois chiffres de 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évié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évié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 IPv6 projetées IPv4 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
ds
exprime 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 valide pour la famille indiquée.
Si
af
ne contient pas de famille d'adresse valide, -1 est renvoyé et
errno
contient
EAFNOSUPPORT.
CONFORMITÉ
POSIX.1-2001.
BOGUES
AF_INET6
ne reconnaît pas les adresses IPv4.
Il faut dans ce cas fournir dans
src
une adresse IPv6 projetée dans l'espace IPv4
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 où
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).
EXAMPLE
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
#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)
TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess
<http://www.blaess.fr/christophe/> le 31 août 2000
et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 3 inet_pton ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- CONFORMITÉ
-
- BOGUES
-
- NOTES
-
- EXAMPLE
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008