inet_pton
Table des matières
Retour à l'index
NOM
inet_pton - Convertir des adresses IPv4 et IPv6 sous forme texte en forme
binaire
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <arpa/inet.h>
int inet_pton(int af, const char *restrict src, void *restrict 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. dst
est écrit dans l'ordre d'octets du réseau.
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 :
-
- -
-
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).
- -
-
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 ::.
- -
-
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.
ATTRIBUTS
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
| Interface | Attribut | Valeur
|
|
inet_pton().
| Sécurité des threads | MT-Safe locale
|
VERSIONS
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).
STANDARDS
POSIX.1-2008.
HISTORIQUE
POSIX.1-2001.
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.
EXEMPLES
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)
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ATTRIBUTS
-
- VERSIONS
-
- STANDARDS
-
- HISTORIQUE
-
- BOGUES
-
- EXEMPLES
-
- Source du programme
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:17 GMT, September 19, 2025