inet_pton(3) Library Functions Manual inet_pton(3) NUME inet_pton - convertete adresele IPv4 i IPv6 din format text in format binar BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include int inet_pton(int af, const char *restrict src, void *restrict dst); DESCRIERE Aceasta funcie convertete irul de caractere src intr-o structura de adrese de reea din familia de adrese af, apoi copiaza structura de adrese de reea in dst. Argumentul af trebuie sa fie fie AF_INET sau AF_INET6. dst este scris in ordinea octeilor reelei. In prezent, sunt acceptate urmatoarele familii de adrese: AF_INET src indica un ir de caractere care conine o adresa de reea IPv4 in format zecimal punctat, "ddd.ddd.ddd.ddd.ddd", unde ddd este un numar zecimal de pana la trei cifre in intervalul 0-255. Adresa este convertita intr-o structura struct in_addr i copiata in dst, care trebuie sa aiba o lungime de sizeof(struct in_addr) (4) octei (32 de bii). AF_INET6 src indica un ir de caractere care conine o adresa de reea IPv6. Adresa este convertita intr-o structura struct in6_addr i copiata in dst, care trebuie sa aiba o lungime de sizeof(struct in6_addr) (16) octei (128 de bii). Formatele permise pentru adresele IPv6 respecta urmatoarele reguli: o Formatul preferat este x:x:x:x:x:x:x:x. Acest format este format din opt numere hexazecimale, fiecare dintre acestea exprimand o valoare pe 16 bii (adica fiecare x poate avea pana la 4 cifre hexazecimale). o O serie de valori zero contigue in formatul preferat poate fi prescurtata ::. Intr-o adresa nu poate aparea decat un singur element ::. De exemplu, adresa loopback 0:0:0:0:0:0:0:1 poate fi abreviata ca ::1. Adresa ,,joker", formata toata din zerouri, poate fi scrisa ca ::. o Un format alternativ este util pentru exprimarea adreselor IPv4 transpuse in adrese IPv6. Acest format se scrie ca x:x:x:x:x:x:d.d.d.d, unde cele ase x din faa sunt valori hexazecimale care definesc cele mai semnificative ase pari de 16 bii ale adresei (adica 96 de bii), iar d exprima o valoare in notaie zecimala punctata care definete cei mai puin semnificativi 32 de bii ai adresei. Un exemplu de astfel de adresa este ::FFFF:204.152.189.116. A se vedea RFC 2373 pentru detalii suplimentare privind reprezentarea adreselor IPv6. VALOAREA RETURNATA inet_pton() returneaza 1 in caz de succes (adresa de reea a fost convertita cu succes). Se returneaza 0 daca src nu conine un ir de caractere care sa reprezinte o adresa de reea valida in familia de adrese specificata. Daca af nu conine o familie de adrese valida, se returneaza -1, iar errno este configurata la EAFNOSUPPORT. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +-------------------------------+---------------------+----------------+ |Interfaa | Atribut | Valoare | +-------------------------------+---------------------+----------------+ |inet_pton() | Sigurana firelor | MT-Safe locale | +-------------------------------+---------------------+----------------+ VERSIUNI Spre deosebire de inet_aton(3) i inet_addr(3), inet_pton() accepta adrese IPv6. Pe de alta parte, inet_pton() accepta numai adrese IPv4 in notaie zecimala punctata, in timp ce inet_aton(3) i inet_addr(3) accepta notaia mai generala numere i puncte (formate de numere hexazecimale i octale i formate care nu necesita scrierea explicita a tuturor celor patru octei). Pentru o interfaa care gestioneaza atat adrese IPv6, cat i adrese IPv4 in notaie numere i puncte, a se vedea getaddrinfo(3). STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001. ERORI AF_INET6 nu recunoate adresele IPv4. In schimb, in src trebuie furnizata o adresa IPv4 explicita, care sa fie transpusa intr-o adresa IPv6. EXEMPLE Programul de mai jos demonstreaza utilizarea inet_pton() i inet_ntop(3). Iata cateva exemple de execuie: $ ./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 Sursa programului #include #include #include #include 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, "Utilizare: %s {i4|i6|} ir\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, "Nu este in format de prezentare"); 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); } CONSULTAI I getaddrinfo(3), inet(3), inet_ntop(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.8 2 mai 2024 inet_pton(3)