C Przykład funkcji int_ntop

C Przykład funkcji int_ntop
Funkcja init_ntop () to funkcja używana do konwersji 32-bitowej adresu IPv4 i 128-bitowego IPv6 na czytelny format. W przeciwieństwie do funkcji init_ptop, adres jest konwertowany w formie oryginalnej, ponieważ został przekonwertowany na jakąś binarną formę numeryczną za pomocą init_pton (). Oznacza to, że obie funkcje są użyteczne do celów prywatności w zakresie szyfrowania i odszyfrowania adresów IP.

Składnia

#włączać
# const znak *inet_ntop (int af, const void *Źródło, znak *dst, socklen_t rozmiar);

Podobnie jak init_pton, ma trzy główne argumenty jako parametr, ale ma również czwarty argument, który dotyczy rozmiaru gniazda/bufora, który jest wskazany przez „DST.”Tutaj opiszemy parametry w funkcji init_ntop ().

Argumenty

Ogólny opis tej funkcji polega na tym, że ta funkcja konwertuje adres IP w czytelnym formacie binarnym. Jest to przede wszystkim numeryczna forma prostego tekstu. Ta konwersja odbywa się za pomocą określonego „SRC”, który konwertuje ją w formacie tekstowym, a następnie wynikowa wartość jest umieszczana w „DST.„Konieczne jest sprawdzenie rozmiaru/ przestrzeni obszaru DST (docelowego). Ponieważ jeśli miejsce jest wystarczające do przechowywania adresu, wówczas umieszczony jest wynikowy adres. W drugim przypadku musi istnieć rozszerzenie wolnego buforu, aby dodać adres.

Argument „AF” odnosi się do rodziny adresu internetowego. Może to być AF_INET dla IPv4 domyślnie lub AF_INET6 dla IPv6. Parametr argumentujący „SRC” pokazuje bufor trzymający adres internetowy IPv4, jeśli argument „AF” to AF_INET lub IPv6. Podany adres musi znajdować się w kolejności bajtu sieciowego.

Podobnie jak argument źródłowy, miejsce docelowe „ds” odnosi się do bufora, w którym funkcja init_ntop () będzie przechowywać wynikowy adres w formie ciągu. Czwarty określa argument wielkości wskazujący na rozmiar bufora. W tym argumencie stwierdzono, że zawsze powinien określać nie-zerowy argument dla miejsca docelowego. W przypadku adresów IPv6 bufor pamięci powinien mieć co najmniej 46 bajtów, podczas gdy w przypadku adresów IPv4 bufor powinien wynosić co najmniej 16 bajtów.

Do przydzielania przechowywania w postaci bufora jest konieczne i powinno być wykonywane na poziomie priorytetu, ponieważ rozmiar ma znaczenie dla przechowywania adresu o wartości wynikowej, aby uniknąć problemów związanych z rozmiarem. Zdefiniowaliśmy dwa ograniczenia, aby umożliwić aplikacjom na łatwe zadeklarowanie/ przydzielenie buforów o dokładnym rozmiarze, aby przyjmować adresy IPv4 i IPv6 w formacie ciągów. Ograniczenia te są również zdefiniowane w bibliotece .

#definicja INET_ADDRSTLEN 16
#definicja INET_ADDRSTRLEN 46

Wartość zwracana

Typ powrotu jest wartością uzyskaną przez funkcję w obu przypadkach; albo jest skutecznie wywoływany lub bezskutecznie zakończony z powodu jakiegokolwiek błędu. Ale zawsze wraca; Dlatego zawsze używamy typu „int” dla głównej funkcji. Jeśli funkcja się powiodła, inet_ntop () zwraca wskaźnik zwracany do bufora zawierającego adres po procesie konwersji. Z drugiej strony, jeśli funkcja się nie powiodła, inet_ntop () zwraca zerową lub „0” i wysyła errno, aby łatwo naprawić błąd.

Błędy spowodowane funkcją init_ntop ()

Wiele możliwych błędów może stłumić funkcję init_ntop () do skutecznego wykonywania, ale podkreśliliśmy głównie dwa z nich tutaj.

Eafnosupport

Parametr to nieprawidłowa liczba. Innymi słowy, nie należy do rodziny obsługiwanej sieci.

Enospc

Ten błąd występuje z powodu mniejszej przestrzeni do przechowywania konwertowanego adresu. Miejsce docelowe „DST” nie jest duże, co prowadzi do wystarczającej pamięci, aby przechowywać wynikową wartość lub przetłumaczony adres. Tak więc Errno wspomina o przyczynie, a następnie błędy te są usuwane.

Podobnie jak inet_pton, init_ntop jest również powiązany z programowaniem gniazda. Ponieważ funkcja gniazda zawiera argument domeny jako parametr należący do AF_INET (IP), więc w przypadku obu protokołów wybierane są IPv4 lub IPv6.

Implementacja init_ntop ()

Przed rozpoczęciem wdrożenia widzieliśmy, że użycie i ogólny opis tej funkcji są również udostępniane na stronie ręcznej systemu operacyjnego Ubuntu Linux, aby ułatwić użytkownikowi jego funkcjonalność działającą.

$ man inet_ntop

Korzystając z wspomnianego powyżej, użytkownik jest skierowany na stronę zawierającą wszystkie opisy init_ntop (). Przyłączyliśmy fragment do Twojej pomocy.

Przykład 1

Wdrożyliśmy przykłady w systemie operacyjnym Linux; W tym celu musisz mieć edytora tekstu, aby napisać w nim kody źródłowe. Podczas gdy dla wartości wynikających z tego użyjemy terminali Ubuntu. Otwórz domyślny edytor tekstu Ubuntu i użyj poniżej wspomnianego kodu źródłowego, aby zademonstrować działanie init_ntop ().

Init_ntop () działa przeciwnie do init_pton; Jeśli masz trochę wiedzy o init_pton (), łatwo zrozumiesz funkcjonalność. W przeciwnym razie konwertowanie adresów nie jest zbyt trudne przy użyciu tych funkcji w języku programowania C.

Zaczynając od bibliotek, możesz zobaczyć, że użyliśmy ARPA/INET.Biblioteka H, ​​ponieważ zawiera wszystkie informacje dotyczące adresów internetowych. Z drugiej strony, biblioteka gniazd systemowych również musi być kierowana, ponieważ bez niego połączenie nie jest możliwe.

#włączać
#włączać

Po bibliotekach wykorzystaliśmy ograniczenia, aby wymienić adresy dotyczące protokołów internetowych 4 i 6. Podany tutaj adres to format binarny przekonwertowany na format numeryczny i łatwo zrozumiały. Tutaj inicjowane są dwie struktury zarówno dla TH4, jak i 6 IP. Podobnie oba bufory są tutaj używane do przechowywania wynikowych wartości. Wywołując funkcję init_ntop, należy upewnić się, że rozmiar bufora nie jest zerowy. A następnie, po konwersji, adres jest wyświetlany. W drugiej części należy zidentyfikować błąd. Podobny przypadek to SF_INET6.

Wykonanie potrzebuje kompilatora. To jest kompilator GCC. Z kompilatorem wymieniono nazwę pliku. Jej ntop.C 'to nazwa pliku.

$ gcc -o ntop ntop.C
$./ ntop

Podczas wykonania zobaczysz, że oba adresy obu protokołów internetowych są wyświetlane pomyślnie bez napotkania żadnego błędu.

Przykład 2

Ten przykład obejmuje funkcje zarówno funkcji INET_NTOP (), jak i inet_pton () w jednym kodzie źródłowym. Funkcja PTON () zawiera trzy argumenty z adresem. Jednocześnie inet_ntop () ma 4 parametry o rozmiarze bufora. Po pierwsze, PTON () przekształca adres w format binarny z wartościami liczbowymi, które nie są łatwo czytelne przez ludzi. Init_ntop () przekształca go z powrotem w format tekstu.

Skompiluj kod i wykonaj go.

Możesz zobaczyć, że adres podany jako wejście jest wyświetlany bez żadnej zmiany za pomocą prostego ciągu do utworzenia adresu w formacie tekstowym.

Wniosek

Stwierdzono, że artykuł „Przykład funkcji init_ntop” zawiera wszystkie możliwe ogólne opisy dotyczące użycia funkcji NTOP () wraz z użytymi argumentami. Wspomniano również niektóre błędy, które należy zidentyfikować, czy coś pójdzie nie tak w przypadku miejsca do przechowywania lub miejsca docelowego źródła. W każdym razie wykorzystaliśmy dwa podstawowe, ale wpływowe przykłady, aby wykazać działanie tej funkcji.