Man page - inet_net_pton(3)

Packages contains this manual

Available languages:

en fr ja ru

Manual

inet_net_pton

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
inet_net_pton()
inet_net_ntop()
VALEUR RENVOYÉE
ERREURS
STANDARDS
NOTES
Format de présentation en entrée pour inet_net_pton()
Valeur de retour de inet_net_pton()
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION

NOM

inet_net_pton, inet_net_ntop - Conversion d’adresse rĂ©seau Internet

BIBLIOTHÈQUE

BibliothĂšque resolver ( libresolv , -lresolv )

SYNOPSIS

#include <arpa/inet.h>

int inet_net_pton(int af , const char * pres ,
void
netp [. nsize ], size_t nsize );
char *inet_net_ntop(int
af ,
const void
netp [(. bits - CHAR_BIT + 1) / CHAR_BIT],
int
bits ,
char
pres [. psize ], size_t psize );

Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros (7)) :

inet_net_pton (), inet_net_ntop () :
Depuis la glibc 2.20 :
_DEFAULT_SOURCE
Avant la glibc 2.20 :
_BSD_SOURCE || _SVID_SOURCE

DESCRIPTION

Ces fonctions convertissent les adresses de réseau entre leur format de représentation (c-à-d. textuelle) et leur format binaire pour le réseau.

Dans le cas des deux fonctions, af indique la famille d’adresse à utiliser lors de la conversion. Seule la valeur AF_INET est prise en charge.

inet_net_pton()

La fonction inet_net_pton () convertit pres , une chaĂźne terminĂ©e par un caractĂšre nul et contenant la reprĂ©sentation d’une adresse rĂ©seau vers le format rĂ©seau. Le rĂ©sultat de la conversion, dans l’ordre du rĂ©seau, est placĂ© dans le tampon pointĂ© par netp . (Le paramĂštre netp pointe typiquement vers une structure in_addr .) Le paramĂštre nsize indique le nombre d’octets disponibles dans netp .

En cas de rĂ©ussite, inet_net_pton () renvoie le nombre de bits dans le champ de numĂ©ro de rĂ©seau du rĂ©sultat placĂ© dans netp . Pour une discussion sur le format de prĂ©sentation de l’entrĂ©e et la valeur de retour, consultez NOTES .

Remarque : le tampon pointĂ© par netp devrait ĂȘtre mis Ă  zĂ©ro avant d’appeler inet_net_pton () puisque l’appel n’écrit que le nombre d’octets nĂ©cessaire pour le numĂ©ro de rĂ©seau (ou qu’explicitement indiquĂ© par pres ), ce qui pourrait ĂȘtre moins que le nombre d’octets dans une adresse de rĂ©seau complĂšte.

inet_net_ntop()

La fonction inet_net_ntop () convertit le numĂ©ro de rĂ©seau dans le tampon pointĂ© par netp au format de prĂ©sentation ; *netp est interprĂ©tĂ© comme une valeur dans l’ordre d’octets du rĂ©seau. L’argument bits indique le nombre de bits dans le numĂ©ro de rĂ©seau *netp .

La chaĂźne au format de prĂ©sentation terminĂ©e par NULL est placĂ©e dans le tampon pointĂ© par pres . L’argument psize indique le nombre d’octets disponibles dans pres . La chaĂźne de prĂ©sentation est au format CIDR : notation dĂ©cimale pointĂ©e reprĂ©sentant l’adresse rĂ©seau, suivie par une barre oblique et la taille du numĂ©ro de rĂ©seau en bit.

VALEUR RENVOYÉE

Si elle rĂ©ussit, inet_net_pton () renvoie le nombre de bits de l’adresse rĂ©seau. En cas d’erreur, -1 est renvoyĂ© et errno est dĂ©fini pour indiquer l’erreur.

Si elle rĂ©ussit, inet_net_ntop () renvoie pres . En cas d’erreur, elle renvoie NULL et errno est dĂ©fini pour indiquer l’erreur.

ERREURS

EAFNOSUPPORT

af indique une valeur différente de AF_INET .

EMSGSIZE

La taille du tampon de sortie est insuffisante.

ENOENT

( inet_net_pton ()) pres n’était pas dans un format de prĂ©sentation correct.

STANDARDS

Aucun.

NOTES

Format de présentation en entrée pour inet_net_pton()

L’adresse rĂ©seau peut ĂȘtre indiquĂ©e sous forme de valeur hexadĂ©cimale ou de notation dĂ©cimale pointĂ©e.

Les valeurs hexadĂ©cimales sont indiquĂ©es en prĂ©fixant par "0x" ou "0X". Les symboles hexadĂ©cimaux remplissent les nibbles (semioctets) de l’adresse rĂ©seau de gauche Ă  droite dans l’ordre du rĂ©seau.

Dans la notation dĂ©cimale pointĂ©e, jusqu’à quatre octets sont indiquĂ©s sous la forme de nombres dĂ©cimaux sĂ©parĂ©es par des points. Ainsi, n’importe laquelle des formes suivantes est acceptĂ©e :

a.b.c.d
a.b.c
a.b
a

Chaque partie est un nombre dans l’intervalle 0 Ă  255 remplissant un octet de l’adresse rĂ©seau, de gauche Ă  droite, dans l’ordre des octets du rĂ©seau (gros-boutisme). Si une partie est omise, l’octet correspondant dans l’adresse rĂ©seau vaut zĂ©ro.

Pour la notation hexadĂ©cimale comme la notation dĂ©cimale pointĂ©e, l’adresse rĂ©seau peut ĂȘtre suivie d’une barre oblique et d’un nombre compris entre 0 et 32, dĂ©finissant la taille de l’adresse rĂ©seau en bits.

Valeur de retour de inet_net_pton()

La valeur de retour de inet_net_pton () est le nombre de bits dans le champ de numéro de réseau. Si la chaßne de présentation se termine par une barre oblique et une valeur de taille explicite, alors cette taille devient la valeur de retour de inet_net_pton (). Sinon, la valeur de retour, bits , est supposée comme suit.

-

Si l’octet de poids fort de l’adresse rĂ©seau est supĂ©rieur ou Ă©gal Ă  240, alors bits vaut 32.

-

Sinon, si l’octet de poids fort de l’adresse rĂ©seau est supĂ©rieur ou Ă©gal Ă  224, alors bits vaut 4.

-

Sinon, si l’octet de poids fort de l’adresse rĂ©seau est supĂ©rieur ou Ă©gal Ă  192, alors bits vaut 24.

-

Sinon, si l’octet de poids fort de l’adresse rĂ©seau est supĂ©rieur ou Ă©gal Ă  128, alors bits vaut 16.

-

Sinon bits vaut 8.

Si la valeur de bits rĂ©sultant des Ă©tapes prĂ©cĂ©dentes est au moins Ă©gale Ă  8, mais que le nombre d’octets indiquĂ© dans le numĂ©ro de rĂ©seau dĂ©passe bits/8 , alors bits est dĂ©fini Ă  huit fois le nombre d’octets vraiment indiquĂ©.

EXEMPLES

Le programme suivant montre l’utilisation de inet_net_pton () et inet_net_ntop (). Il utilise inet_net_pton () pour convertir une adresse rĂ©seau au format de prĂ©sentation fourni en premier argument de ligne de commande vers sa forme binaire et affiche la valeur renvoyĂ©e par inet_net_pton (). Il utilise ensuite inet_net_ntop () pour reconvertir la forme binaire au format de prĂ©sentation, et affiche la chaĂźne rĂ©sultante.

De façon Ă  dĂ©montrer que inet_net_pton () peut ne pas Ă©crire sur tous les octets de son argument netp , le programme permet un deuxiĂšme argument de ligne de commande : un nombre utilisĂ© pour initialiser le tampon avant d’appeler inet_net_pton (). Comme en derniĂšre ligne de sa sortie, le programme affiche tous les octets du tampon renvoyĂ© par inet_net_pton (), cela permet Ă  l’utilisateur de voir les octets qui n’ont pas Ă©tĂ© modifiĂ©s par inet_net_pton ().

Un exemple oĂč inet_net_pton () dĂ©duit le nombre de bits de l’adresse rĂ©seau :

$ ./a.out 193.168
inet_net_pton() a renvoyé : 24
inet_net_ntop() a produit : 193.168.0/24
Adresse brute : c1a80000

Démontrer que inet_net_pton () ne met pas à zéro les octets inutilisés du tampon de résultat :

$ ./a.out 193.168 0xffffffff
inet_net_pton() a renvoyé : 24
inet_net_ntop() a produit : 193.168.0/24
Adresse brute : c1a800ff

DĂ©montrer que inet_net_pton () Ă©largira la taille supposĂ©e du numĂ©ro de rĂ©seau si le nombre d’octets fournis dans la chaĂźne de prĂ©sentation dĂ©passe la valeur supposĂ©e :

$ ./a.out 193.168.1.128
inet_net_pton() a renvoyé : 32
inet_net_ntop() a produit : 193.168.1.128/32
Adresse brute : c1a80180

DĂ©finir explicitement la taille de l’adresse rĂ©seau outrepasse toute dĂ©duction au sujet de sa taille (mais tous les octets en trop explicitement dĂ©finis seront tout de mĂȘme utilisĂ©s par inet_net_pton () pour remplir le tampon de rĂ©sultat).

$ ./a.out 193.168.1.128/24
inet_net_pton() a renvoyé : 24
inet_net_ntop() a produit : 193.168.1/24
Adresse brute : c1a80180

Source du programme

/* Effectuer l’édition des liens avec "-lresolv" */
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \
} while (0)
int
main(int argc, char *argv[])
{
char buf[100];
struct in_addr addr;
int bits;
if (argc < 2) {
fprintf(stderr,
"Utilisation : %s forme-présentation [val-adr-init]\n",
argv[0]);
exit(EXIT_FAILURE);
}
/* Si argv[2] est fourni (une valeur numĂ©rique), l’utiliser pour
initialiser le tampon de sortie fourni Ă  inet_net_pton(), afin
de montrer que inet_net_pton() n’initialise que les octets
nĂ©cessaires pour stocker l’adresse rĂ©seau.
Si argv[2] n’est pas fourni, alors initialiser le tampon Ă  zĂ©ro
(ce qui est une bonne pratique). */
addr.s_addr = (argc > 2) ? strtod(argv[2], NULL) : 0;
/* Convertir le numéro de réseau sous forme de présentation
argv[1] sous forme binaire. */
bits = inet_net_pton(AF_INET, argv[1], &addr, sizeof(addr));
if (bits == -1)
errExit("inet_net_ntop");
printf("inet_net_pton() a renvoyé : %d\n", bits);
/* Reconvertir de la forme binaire au format de présentation, en
utilisant « bits » renvoyé par inet_net_pton(). */
if (inet_net_ntop(AF_INET, &addr, bits, buf, sizeof(buf)) == NULL)
errExit("inet_net_ntop");
printf("inet_net_ntop() a produit : %s\n", buf);
/* Afficher « aqaddr » sous forme brute (en ordre d’octets du
réseau), pour permettre de voir les octets non affichés par
inet_net_ntop() ; certains de ces octets pourraient ne pas
avoir été modifiés par inet_net_ntop(), et avoir toujours la
valeur initiale qui était indiquée argv[2]. */
printf("Adresse brute : %x\n", htonl(addr.s_addr));
exit(EXIT_SUCCESS);
}

VOIR AUSSI

inet (3), networks (5)

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 à debian-l10n-french@lists.debian.org .