Funzione Inet Pton in lingua C

Funzione Inet Pton in lingua C

Le funzioni socket utilizzano le strutture nei loro argomenti di input che contengono dati specifici del client e del server. Le informazioni più importanti in queste strutture sono senza dubbio gli indirizzi IP.

Esistono diversi tipi di strutture utilizzate dalle funzioni socket per archiviare questi indirizzi. Ad esempio: Sockaddr, Addrinfo o in_addr, ecc.

Indipendentemente dal tipo di struttura in cui sono archiviati, gli indirizzi IP non sono codificati, il che significa che ciascuno dei numeri nei loro campi è rappresentato dal suo equivalente binario. Ciò significa che in alcuni casi è necessario convertire gli indirizzi IP in stringhe o stringhe in indirizzi IP per lavorare con loro.

In questo Suggerimento Linux Articolo, imparerai come convertire le stringhe in indirizzi IP utilizzando il inet_pton () funzione.

Esamineremo la sintassi di questa funzione e una descrizione teorica di come funziona, gli argomenti di input e output e il tipo di dati in ciascuno di essi.

Quindi applichiamo ciò che abbiamo appreso in esempi pratici che includono frammenti di codice e immagini che mostrano come funzionano l'INET_PTON () nella lingua C converte le stringhe sugli indirizzi IP.

Sintassi della funzione Inet_pton () in lingua C

int inet_pton (int af, const char *src, void *dst);

Descrizione della funzione Inet_pton () in lingua C

IL inet_pton () La funzione converte la stringa a cui si fa riferimento src a un indirizzo di rete della famiglia specificata in af. Il risultato di questo processo è un indirizzo in formato binario diretto, restituito nella struttura a cui è indicato dest.

Questa funzione accetta gli indirizzi IPv4 e IPv6 ed è molto utile quando vogliamo creare le applicazioni di connessione nelle reti locali in cui conosciamo l'indirizzo IP a cui vogliamo connetterci.

Inet_pton () è complementare alla funzione Inet_ntop () ed esegue una conversione inversa.

Successivamente, esaminiamo in dettaglio gli argomenti di input di questa funzione:

AF: Questa voce specifica la famiglia di indirizzi da convertire.

AF_INET converte la stringa in un indirizzo di famiglia IPv4.

AF_INET6 converte la stringa in un indirizzo della famiglia IPv6.

src: La stringa o il puntatore ad esso che specifica l'indirizzo in formato di testo.

dest: Il puntatore alla struttura dove archiviare l'indirizzo in formato binario diretto. Queste strutture possono essere di tipo Sockaddr, Sockaddr_in, Sockaddr_in6, ecc.

Se la conversione ha esito positivo, questa funzione restituisce 1. Se si verifica un errore, restituisce 0. Il codice di errore può essere interrogato in errno variabile globale.

IL inet_pton () La funzione è definita in "Inet.HE ”” ed è una serie di ".file h "che definiscono le funzioni di connessione e sono archiviati nella cartella" ARPA ". Per utilizzare questa funzione, dobbiamo includerla nel nostro file C come segue:

#includere

Come convertire una stringa in un indirizzo IP usando la funzione Inet_pton () nella lingua C

Nel seguente esempio, convertiamo il respingente stringa in un indirizzo e memorizzalo in una struttura di Sockaddr_in Digita il cui puntatore è addr_in. Per fare questo, assegniamo il “192.168.1.1 " Indirizzo alla stringa buffer e dichiarare la struttura addr_in e il suo puntatore.

Quindi, dal Se condizionale, chiamiamo il inet_pton () e passare la famiglia di indirizzi come argomenti di input af, che in questo caso è af _inet. Passiamo l'indirizzo che è archiviato in respingente Come secondo argomento in formato stringa. Infine, passiamo l'indirizzo del addr_in Puntatore della struttura in cui memorizziamo l'indirizzo in formato binario.

Se si verifica un errore durante la conversione, il programma entra in Se condizionale e visualizza il seguente messaggio: "Errore di conversione".

Se inet_pton () Non restituisce un errore, controlliamo l'indirizzo che viene archiviato nella struttura ADDR_IN e utilizziamo la funzione Inet_ntop () complementare per convertirlo in una stringa e lo uscirà nella shell con printf ().

Quello che segue è il codice che esegue la conversione con inet_pton (). Quindi, converte l'indirizzo in una stringa e stampa il risultato per comando Console:

#includere
#includere
#includere
#includere
int main ()

char buffer [inet_addrstrlen] = "192.168.1.1 ";
struct Sockaddr_in *addr_in;
//conversione
if (inet_pton (af_inet, buffer e addr_in) == 0)
printf ("errore di conversione");
return 1;
// Controlla l'indirizzo memorizzato
memset (& buffer, '\ 0', sizeof (buffer));
inet_ntop (Af_inet, & addr_in, buffer, inet_addrstrlen);
printf ("Indirizzo IP: %s \ n \ n", buffer);

La seguente immagine mostra la compilazione e l'esecuzione di questo codice:

La figura seguente mostra il risultato dell'invio di una stringa con un formato di indirizzo non valido. In questo caso, inet_pton () restituisce 0 e il flusso del programma inserisce la condizione IF in cui viene visualizzato un messaggio di errore.

Come convertire una stringa in un indirizzo IPv6 usando la funzione Inet_pton () nella lingua C

Per convertire una stringa in un indirizzo familiare IPv6, è possibile utilizzare il codice dell'esempio precedente. Dobbiamo solo usare le strutture e i buffer con le dimensioni compatibili con questo tipo di indirizzo e impostare la famiglia AF _inet6 af ingresso.

In questo caso, la dimensione del buffer deve essere Inet6_addrtrlen e la struttura di destinazione deve essere di tipo Sockaddr_in6. Ecco il codice modificato per convertire le stringhe in indirizzi IPv6:

#includere
#includere
#includere
#includere
int main ()

char buffer [inet6_addrstrlen] = "fd10: 1aff: 48ca: b5f4: 0: 0: 0: 0: 0";
struct Sockaddr_in6 *addr_in;
//conversione
if (inet_pton (af_inet6, buffer e addr_in) == 0)
printf ("errore di conversione");
return 1;
// Controlla l'indirizzo memorizzato
memset (& buffer, '\ 0', sizeof (buffer));
inet_ntop (af_inet6, & addr_in, buffer, inet6_addrstrlen);
printf ("\ n \ nip indirizzo: %s \ n \ n", buffer);

La seguente immagine mostra la compilazione e l'esecuzione di questo codice che converte una stringa in un indirizzo IPv6:

Conclusione

In questo Suggerimenti Linux Articolo, abbiamo spiegato come convertire il formato stringa in indirizzi IP in binario diretto usando il inet_pton () funzione.

Abbiamo visto una descrizione teorica di questa funzione, i suoi argomenti di input e il tipo di dati che ogni elabora. Quindi, abbiamo implementato questa funzione in esempi pratici che mostrano come convertire le stringhe di caratteri in indirizzi IP memorizzati nelle strutture di tipo Sockaddr_in che sono più spesso utilizzate per stabilire le connessioni.

Speriamo che tu abbia trovato questo articolo utile. Iscriviti al nostro sito Web e usa il nostro motore di ricerca per altri articoli C e suggerimenti Linux.