Inet pton -funksjon på C -språk

Inet pton -funksjon på C -språk

Socketfunksjonene bruker strukturer i sine inngangsargumenter som inneholder klient- og serverspesifikke data. Den viktigste informasjonen i disse strukturene er utvilsomt IP -adressene.

Det er flere typer strukturer som brukes av socketfunksjoner for å lagre disse adressene. For eksempel: Sockaddr, addrinfo eller in_addr, etc.

Uansett hvilken type struktur de er lagret, er IP -adresser ikke kodet, noe som betyr at hvert av tallene i deres felt er representert med dets binære ekvivalent. Dette betyr at det i visse tilfeller er nødvendig å konvertere IP -adressene til strenger eller strenger til IP -adresser for å jobbe med dem.

I dette Linux hint Artikkel, vil du lære hvordan du konverterer strengene til IP -adresser ved hjelp av inet_pton () funksjon.

Vi vil se på syntaks for denne funksjonen og en teoretisk beskrivelse av hvordan den fungerer, inngangs- og utgangsargumentene og datatypen i hver av dem.

Vi bruker deretter det vi lærte i praktiske eksempler som inkluderer kodebiter og bilder som viser hvordan INET_PTON () -funksjonen i C -språket konverterer strengene til IP -adresser.

Syntaks av INET_PTON () -funksjonen på C -språk

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

Beskrivelse av INET_PTON () -funksjonen på C -språk

De inet_pton () funksjon konverterer strengen som er referert til i src til en nettverksadresse til familien som er spesifisert i AF. Resultatet av denne prosessen er en adresse i direkte binært format, returnert i strukturen som er pekt på av DEST.

Denne funksjonen godtar IPv4- og IPv6 -adresser og er veldig nyttig når vi ønsker å opprette tilkoblingsapplikasjoner i lokale nettverk der vi kjenner IP -adressen som vi ønsker å koble til.

Inet_pton () er komplementær til inet_ntop () -funksjonen og utfører en omvendt konvertering.

Deretter ser vi på inngangsargumentene til denne funksjonen i detalj:

AF: Denne oppføringen spesifiserer adressefamilien som skal konverteres.

AF_inet konverterer strengen til en IPv4 -familieadresse.

AF_INET6 konverterer strengen til en adresse til IPv6 -familien.

SRC: Strengen eller pekeren til den som spesifiserer adressen i tekstformat.

dest: Pekeren til strukturen hvor du skal lagre adressen i direkte binærformat. Disse strukturene kan være av typen sockaddr, sockaddr_in, sockaddr_in6, etc.

Hvis konverteringen er vellykket, returnerer denne funksjonen 1. Hvis det oppstår en feil, returnerer den 0. Feilkoden kan spørres i errno Global variabel.

De inet_pton () Funksjonen er definert i “inet.h ”header og er en av en serie“.H ”-filer som definerer tilkoblingsfunksjonene og lagres i“ ARPA ”-mappen. For å bruke denne funksjonen, må vi inkludere den i C -filen vår som følger:

#inkludere

Hvordan konvertere en streng til en IP -adresse ved hjelp av INET_PTON () -funksjonen på C -språket

I det følgende eksempel konverterer vi buffer streng inn i en adresse og lagre den i en struktur av Sockaddr_in type hvis peker er addr_in. For å gjøre dette, tildeler vi “192.168.1.1" adresse til bufferstrengen og erklære addr_in -strukturen og dens peker.

Da, fra hvis betinget, vi kaller inet_pton () og passere familien av adresser som inndata argumenter AF, som i dette tilfellet er af _inet. Vi passerer adressen som er lagret i buffer Som det andre argumentet i strengformat. Til slutt passerer vi adressen til addr_in pekeren til strukturen der vi lagrer adressen i binært format.

Hvis det oppstår en feil under konverteringen, kommer programmet inn i hvis Betinget og viser følgende melding: “Konverteringsfeil”.

Hvis inet_pton () gir ikke en feil, vi sjekker adressen som er lagret i Addr_in -strukturen og bruker den komplementære inet_ntop () -funksjonen for å konvertere den tilbake til en streng og sende den til skallet med printf ().

Følgende er koden som utfører konverteringen med inet_pton (). Deretter konverterer den adressen tilbake til en streng og skriver ut resultatet til kommandokonsoll:

#inkludere
#inkludere
#inkludere
#inkludere
int main ()

char buffer [inet_addrstrlen] = "192.168.1.1";
struct sockaddr_in *addr_in;
//omdannelse
if (inet_pton (af_inet, buffer, & addr_in) == 0)
printf ("konverteringsfeil");
retur 1;
// sjekk adressen som er lagret
memset (& buffer, '\ 0', størrelse av (buffer));
inet_ntop (af_inet, & addr_in, buffer, inet_addrstrlen);
printf ("IP -adresse: %s \ n \ n", buffer);

Følgende bilde viser sammenstilling og utførelse av denne koden:

Følgende figur viser resultatet av å sende en streng med et ugyldig adresseformat. I dette tilfellet returnerer INET_PTON () 0 og programstrømmen kommer inn i IF -tilstanden der en feilmelding vises.

Hvordan konvertere en streng til en IPv6 -adresse ved hjelp av INET_PTON () -funksjonen på C -språket

For å konvertere en streng til en IPv6 -familieadresse, kan koden fra forrige eksempel brukes. Vi trenger bare å bruke strukturer og buffere med størrelsene som er kompatible med denne adressetypen og setter AF _inet6 -familien til AF inngang.

I dette tilfellet må bufferstørrelsen være inet6_addrstrlen, og destinasjonsstrukturen må være av type SOCKADDR_IN6. Her er den modifiserte koden for å konvertere strengene til IPv6 -adresser:

#inkludere
#inkludere
#inkludere
#inkludere
int main ()

char buffer [inet6_addrstrlen] = "FD10: 1AFF: 48CA: B5F4: 0: 0: 0: 0";
struct sockaddr_in6 *addr_in;
//omdannelse
if (inet_pton (af_inet6, buffer, & addr_in) == 0)
printf ("konverteringsfeil");
retur 1;
// sjekk adressen som er lagret
memset (& buffer, '\ 0', størrelse av (buffer));
inet_ntop (af_inet6, & addr_in, buffer, inet6_addrstrlen);
printf ("\ n \ nip adresse: %s \ n \ n", buffer);

Følgende bilde viser sammenstilling og utførelse av denne koden som konverterer en streng til en IPv6 -adresse:

Konklusjon

I dette Linux hint Artikkel, vi forklarte hvordan du konverterer strengformatet til IP -adresser i direkte binær ved hjelp av inet_pton () funksjon.

Vi har sett en teoretisk beskrivelse av denne funksjonen, dens inngangsargumenter og hvilken type data som hver prosesser. Deretter implementerte vi denne funksjonen i praktiske eksempler som viser hvordan man konverterer karakterstrenger til IP -adresser som er lagret i Sockaddr_in -type strukturer som oftest brukes til å etablere tilkoblingene.

Vi håper at du fant denne artikkelen nyttig. Abonner på nettstedet vårt og bruk vår søkemotor etter flere C -artikler og Linux -hint.