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:
#inkludereHvordan 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:
#inkludereFø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:
#inkludereFø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.