Funkcja INET PTON w języku C

Funkcja INET PTON w języku C

Funkcje gniazda używają struktur w swoich argumentach wejściowych, które zawierają dane dotyczące klienta i serwera. Najważniejszymi informacjami w tych strukturach są niewątpliwie adresy IP.

Istnieje kilka rodzajów struktur, które są używane przez funkcje gniazda do przechowywania tych adresów. Na przykład: sockaddr, addrinfo lub in_addr itp.

Niezależnie od rodzaju struktury, w której są przechowywane, adresy IP nie są kodowane, co oznacza, że ​​każda z liczb w ich polach jest reprezentowana przez jego równoważny binarny. Oznacza to, że w niektórych przypadkach konieczne jest konwersja adresów IP na struny lub ciągi na adresy IP, aby z nimi współpracować.

W tym Wskazówka Linux Artykuł, dowiesz się, jak przekonwertować ciągi na adresy IP za pomocą inet_pton () funkcjonować.

Przyjrzymy się składni tej funkcji i teoretycznym opisie tego, jak ona działa, argumenty wejściowe i wyjściowe oraz typ danych w każdym z nich.

Następnie stosujemy to, czego nauczyliśmy się w praktycznych przykładach, które zawierają fragmenty kodu i obrazy, które pokazują, jak funkcja inet_pton () w języku C przekształca struny na adresy IP.

Składnia funkcji inet_pton () w języku C

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

Opis funkcji inet_pton () w języku C

inet_pton () Funkcja konwertuje ciąg, do którego można się odwoływać src do adresu sieciowej, która jest określona Af. Rezultatem tego procesu jest adres w bezpośrednim formacie binarnym, zwróconym w strukturze wskazanej przez Dest.

Ta funkcja akceptuje adresy IPv4 i IPv6 i jest bardzo przydatne, gdy chcemy utworzyć aplikacje połączenia w sieciach lokalnych, w których znamy adres IP, do którego chcemy się połączyć.

Inet_pton () jest uzupełniający się do funkcji inet_ntop () i wykonuje odwrotną konwersję.

Następnie szczegółowo przyglądamy się argumentom wejściowym tej funkcji:

AF: Ten wpis określa rodzinę adresu do konwersji.

AF_INET przekształca ciąg na adres rodzinny IPv4.

AF_INET6 przekształca ciąg na adres rodziny IPv6.

SRC: Ciąg lub wskaźnik do niego określa adres w formacie tekstowym.

Dest: Wskaźnik do struktury, gdzie przechowywać adres w bezpośrednim formacie binarnym. Struktury te mogą być typu sockaddr, sockaddr_in, sockaddr_in6 itp.

Jeśli konwersja zakończy się powodzeniem, ta funkcja zwraca 1. Jeśli wystąpi błąd, zwraca 0. Kod błędu można zapytać w errno Zmienna globalna.

inet_pton () Funkcja jest zdefiniowana w „INET.H ”nagłówek i jest jednym z serii„.H ”pliki, które definiują funkcje połączenia i są przechowywane w folderze„ ARPA ”. Aby użyć tej funkcji, musimy ją podać w naszym pliku C w następujący sposób:

#włączać

Jak przekonwertować ciąg na adres IP za pomocą funkcji inet_pton () w języku C

W poniższym przykładzie konwertujemy bufor ciągnąć się w adres i przechowuj w strukturze sockaddr_in typ, którego wskaźnik jest addr_in. Aby to zrobić, przypisujemy „192.168.1.1 ” adres do ciągu bufora i zadeklaruj strukturę addr_in i jej wskaźnik.

Następnie z Jeśli warunkowe, nazywamy inet_pton () i przekazaj rodzinę adresów jako argumenty wejściowe Af, który w tym przypadku jest af _inet. Przekazujemy adres, który jest przechowywany w bufor jako drugi argument w formacie ciągów. Wreszcie, przekazujemy adres addr_in wskaźnik konstrukcji, w której przechowujemy adres w formacie binarnym.

Jeśli podczas konwersji wystąpi błąd, program wchodzi Jeśli warunkowe i wyświetla następującą wiadomość: „Błąd konwersji”.

Jeśli inet_pton () nie zwraca błędu, sprawdzamy adres przechowywany w strukturze Addr_in i używamy funkcji komplementarnej inet_ntop (), aby przekonwertować go z powrotem na ciąg i wysyłać do powłoki z printf ().

Poniżej znajduje się kod, który wykonuje konwersję z inet_pton (). Następnie przekształca adres z powrotem do ciągu i drukuje wynik na konsolę poleceń:

#włączać
#włączać
#włączać
#włączać
int main ()

Char Buffer [inet_adstrstlen] = "192.168.1.1 ";
struct sockaddr_in *addr_in;
//konwersja
if (inet_pton (af_inet, bufor i addr_in) == 0)
printf („Błąd konwersji”);
return 1;
// Sprawdź przechowywany adres
memset (i bufor, „\ 0”, sizeof (bufor));
inet_ntop (af_inet i addr_in, bufor, inet_adstrstlen);
printf („Adres IP: %s \ n \ n”, bufor);

Poniższy obraz pokazuje kompilację i wykonanie tego kodu:

Poniższy rysunek pokazuje wynik wysyłania ciągu z nieprawidłowym formatem adresu. W takim przypadku INET_PTON () zwraca 0, a przepływ programu wchodzi w warunek IF, w którym wyświetlany jest komunikat o błędzie.

Jak przekonwertować ciąg na adres IPv6 za pomocą funkcji inet_pton () w języku C

Aby przekonwertować ciąg na adres rodzinny IPv6, można użyć kodu z poprzedniego przykładu. Musimy tylko użyć struktur i buforów z rozmiarami kompatybilnymi z tym typem adresu i ustawić rodzinę AF _inet6 na Af wejście.

W takim przypadku rozmiar buforu musi być inet6_adstrstlen, a struktura docelowa musi być typowa sockaddr_in6. Oto zmodyfikowany kod do konwersji ciągów na adresy IPv6:

#włączać
#włączać
#włączać
#włączać
int main ()

Char Buffer [INET6_ADDRSTLEN] = "FD10: 1aff: 48CA: B5F4: 0: 0: 0: 0";
struct sockaddr_in6 *addr_in;
//konwersja
if (inet_pton (af_inet6, bufor i addr_in) == 0)
printf („Błąd konwersji”);
return 1;
// Sprawdź przechowywany adres
memset (i bufor, „\ 0”, sizeof (bufor));
inet_ntop (AF_INET6, i addr_in, bufor, inet6_adDrstlen);
printf ("\ n \ NIP Adres: %s \ n \ n", bufor);

Poniższy obraz pokazuje kompilację i wykonanie tego kodu, który konwertuje ciąg na adres IPv6:

Wniosek

W tym Linux wskazówki Artykuł, wyjaśniliśmy, jak przekonwertować format ciągu na adresy IP w bezpośrednim binarie za pomocą inet_pton () funkcjonować.

Widzieliśmy teoretyczny opis tej funkcji, jej argumenty wejściowe i rodzaj danych, które przetwarza każdy. Następnie zaimplementowaliśmy tę funkcję w praktycznych przykładach, które pokazują, jak przekonwertować struny znaków na adresy IP przechowywane w strukturach typu sockaddr_in, które najczęściej używane są do ustanowienia połączeń.

Mamy nadzieję, że ten artykuł uznałeś. Subskrybuj naszą stronę internetową i użyj naszej wyszukiwarki, aby uzyskać więcej artykułów C i wskazówek Linux.