Gniazda surowe. Bartłomiej Świercz. Łódź,9maja2006. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda surowe

Podobne dokumenty
Gniazda UDP. Bartłomiej Świercz. Łódź, 3 kwietnia Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda UDP

Gniazda BSD. Procesy w środowisku sieciowym. Gniazda podstawowe funkcje dla serwera. Gniazda podstawowe funkcje dla klienta

Przesyłania danych przez protokół TCP/IP

Adresowanie grupowe. Bartłomiej Świercz. Katedra Mikroelektroniki i Technik Informatycznych. Łódź, 25 kwietnia 2006

Klient-Serwer Komunikacja przy pomocy gniazd

Na podstawie: Kirch O., Dawson T. 2000: LINUX podręcznik administratora sieci. Wydawnictwo RM, Warszawa. FILTROWANIE IP

Sieci komputerowe. Zajęcia 3 c.d. Warstwa transportu, protokoły UDP, ICMP

Standardy programowania protokołów komunikacyjnych Laboratorium nr 5 komunikacja multicastowa IPv6

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ

Instytut Teleinformatyki

Iteracyjny serwer TCP i aplikacja UDP

Oprogramowanie komunikacyjne dla Internetu rzeczy Laboratorium nr 4 komunikacja unicastowa IPv6

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

Warstwa sieciowa. Model OSI Model TCP/IP. Aplikacji. Aplikacji. Prezentacji. Sesji. Transportowa. Transportowa

Podstawy Transmisji Danych. Wykład IV. Protokół IPV4. Sieci WAN to połączenia pomiędzy sieciami LAN

Katedra Inżynierii Komputerowej Politechnika Częstochowska. Zastosowania protokołu ICMP Laboratorium podstaw sieci komputerowych

MODEL OSI A INTERNET

Sieci komputerowe. Wykład 5: Warstwa transportowa: TCP i UDP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Gniazda BSD implementacja w C#

Zarządzanie ruchem w sieci IP. Komunikat ICMP. Internet Control Message Protocol DSRG DSRG. DSRG Warstwa sieciowa DSRG. Protokół sterujący

iptables/netfilter co to takiego?

Sieci komputerowe - administracja

Unicast jeden nadawca i jeden odbiorca Broadcast jeden nadawca przesyła do wszystkich Multicast jeden nadawca i wielu (podzbiór wszystkich) odbiorców

Podstawowe typy serwerów

Programowanie współbieżne i rozproszone

Programowanie Sieciowe 1

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

Internet Control Message Protocol (ICMP) Łukasz Trzciałkowski

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998

Routing. część 1: adresowanie. Sieci komputerowe. Wykład 2. Marcin Bieńkowski

Instytut Teleinformatyki

Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła

Komunikacja sieciowa - interfejs gniazd

Laboratorium 6.7.2: Śledzenie pakietów ICMP

Protokoły wspomagające. Mikołaj Leszczuk

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

Akademia Techniczno-Humanistyczna w Bielsku-Białej

Gniazda BSD. komunikacja bezpołączeniowa

Programowanie przy użyciu gniazdek

TCP/IP formaty ramek, datagramów, pakietów...

Wykład 3 Filtracja i modyfikacja pakietów za pomocą iptables.

Sieci komputerowe. Wykład 7: Transport: protokół TCP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

TCP - receive buffer (queue), send buffer (queue)

Programowanie Sieciowe 1

ARP Address Resolution Protocol (RFC 826)

Bezpieczeństwo w M875

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

ADRESY PRYWATNE W IPv4

PROTOKOŁY WARSTWY TRANSPORTOWEJ

Programowanie sieciowe

Sieci Komputerowe Modele warstwowe sieci

Laboratorium 6.7.1: Ping i Traceroute

Zadanie z lokalnych sieci komputerowych. 1. Cel zajęć

Routing. część 3: wewnątrz routera. Sieci komputerowe. Wykład 4. Marcin Bieńkowski

Akademia Techniczno-Humanistyczna w Bielsku-Białej

POŁĄCZENIE STEROWNIKÓW ASTRAADA ONE MIĘDZY SOBĄ Z WYKORZYSTANIEM PROTOKOŁU UDP. Sterowniki Astraada One wymieniają między sobą dane po UDP

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ ADRESACJA W SIECIACH IP. WSTĘP DO SIECI INTERNET Kraków, dn. 24 października 2016r.

TRX API opis funkcji interfejsu

Instrukcja 5 - Zastosowania protokołu ICMP

Sieci komputerowe - Wstęp do intersieci, protokół IPv4

Systemy operacyjne i sieci komputerowe Szymon Wilk Adresowanie w sieciach Klasy adresów IP a) klasa A

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ

Tworzenie aplikacji rozproszonej w Sun RPC

Narzędzia diagnostyczne protokołów TCP/IP

Sieci Komputerowe Translacja adresów sieciowych

Komunikacja pomiędzy sterownikami PLC za pomocą łącza GSM GPRS

Routing. część 3: wewnątrz routera. Sieci komputerowe. Wykład 4. Marcin Bieńkowski

1 Moduł Diagnostyki Sieci

Routing. część 3: wewnątrz routera. Sieci komputerowe. Wykład 4. Marcin Bieńkowski

Warstwa transportowa. Warstwa transportowa. Enkapsulacja. Zapewnienie niezawodnego przesyłania danych /wg ISO/ Transmisja bezpołączeniowa

Ping. ipconfig. getmac

Stos protokołów TCP/IP (ang. Transmission Control Protocol/Internet Protocol)

System operacyjny Linux

Tunelowanie, kapsułkowanie, XDR. 1. Transmisja tunelowa i kapsułkowanie serwery proxy. 2. Zewnętrzna reprezentacja danych XDR.

Plan wykładu. Warstwa sieci. Po co adresacja w warstwie sieci? Warstwa sieci

Co to jest iptables?

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Przykłady interfejsu TCP i UDP w Javie

Protokoły sieciowe - TCP/IP

Laboratorium podstaw telekomunikacji

Instalacja i konfiguracja pakietu iptables

Laboratorium - Wykorzystanie programu Wireskark do badania ramek Ethernetowych

Plan wykładu. Warstwa sieci. Po co adresacja w warstwie sieci? Warstwa sieci

LABORATORIUM SIECI KOMPUTEROWYCH (compnet.et.put.poznan.pl)

Protokół IPsec. Patryk Czarnik

Filtrowanie pakietów IP minihowto

KONWERTER DVB ASI -> DVB IP DELTA-1

TELEFONIA INTERNETOWA

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Router programowy z firewallem oparty o iptables

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Kod produktu: MP-W7100A-RS232

Instrukcja EQU Kantech

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

Sieci komputerowe - Protokoły warstwy transportowej

Aplikacja Sieciowa wątki po stronie klienta

Transkrypt:

Gniazda surowe Bartłomiej Świercz Katedra Mikroelektroniki i Technik Informatycznych Łódź,9maja2006

Wstęp Gniazda surowe posiadają pewne właściwości, których brakuje gniazdom TCP i UDP: Gniazda surowe pozwalają na wysyłanie i odbiór pakietów ICMPiIGMP. Za pomocą surowych gniazd można przetwarzać datagramy IP, których wartość pola oznaczającego typ protokołu jest nie obsługiwana przez jądro. Pozwala to na realizację obsługi własnego protokołu sieciowego na poziomie użytkownika. Przy pomocy gniazd surowych można utworzyć własny nagłówek IPv4, co pozwala na wysyłanie ręcznie spreparowanych pakietów TCP i UDP.

Wstęp Gniazda surowe posiadają pewne właściwości, których brakuje gniazdom TCP i UDP: Gniazda surowe pozwalają na wysyłanie i odbiór pakietów ICMPiIGMP. Za pomocą surowych gniazd można przetwarzać datagramy IP, których wartość pola oznaczającego typ protokołu jest nie obsługiwana przez jądro. Pozwala to na realizację obsługi własnego protokołu sieciowego na poziomie użytkownika. Przy pomocy gniazd surowych można utworzyć własny nagłówek IPv4, co pozwala na wysyłanie ręcznie spreparowanych pakietów TCP i UDP.

Wstęp Gniazda surowe posiadają pewne właściwości, których brakuje gniazdom TCP i UDP: Gniazda surowe pozwalają na wysyłanie i odbiór pakietów ICMPiIGMP. Za pomocą surowych gniazd można przetwarzać datagramy IP, których wartość pola oznaczającego typ protokołu jest nie obsługiwana przez jądro. Pozwala to na realizację obsługi własnego protokołu sieciowego na poziomie użytkownika. Przy pomocy gniazd surowych można utworzyć własny nagłówek IPv4, co pozwala na wysyłanie ręcznie spreparowanych pakietów TCP i UDP.

Tworzenie gniazda surowego 1 Należy utworzyć gniazdo ze stałą SOCK_RAW: int sockfd; sockfd = socket (AFINET, SOCKRAW, protokół); Stała oznaczająca protokół może być jedną ze stałych IPPROTO_xxx, zdefiniowanych w pliku <netinet/in.h>. 2 Można ustawić opcję IP_HDRINCL: const int on = 1; setsockopt (sockfd, IPPROTOIP, IPHDRINCL, &on, sizeof (on));

Tworzenie gniazda surowego 1 Należy utworzyć gniazdo ze stałą SOCK_RAW: int sockfd; sockfd = socket (AFINET, SOCKRAW, protokół); Stała oznaczająca protokół może być jedną ze stałych IPPROTO_xxx, zdefiniowanych w pliku <netinet/in.h>. 2 Można ustawić opcję IP_HDRINCL: const int on = 1; setsockopt (sockfd, IPPROTOIP, IPHDRINCL, &on, sizeof (on));

Funkcja bind Dla gniazda surowego można wywołać funkcję bind(), któr dowiązuje tylko adres lokalny. Dla gniazd surowych nie istnieje pojęcie portu. Dla operacji wyjściowych funkcja bind() powoduje ustalenie adresu wyjściowego IP, który będzie użyty w datagramach wysyłanych przez surowe gniazdo(nie dotyczy to gniazd z ustawioną opcją IP_HDRINCL). Jeżeli nie wywoła się funkcji bind() to jądro jako adres źródłowy ustali adres podstawowego interfejsu sieciowego.

Funkcja connect Funkcja connect() podobnie jak funkcja bind() może ale nie musi być użyta. Ponieważ dla gniazd surowych nie istnieje pojęcie portu, to funkcja connect() powoduje jedynie przypisanie adresu docelowego do gniazda. Dzięki temu możemy użyć funkcji write() i send() zamiast funkcji sendto().

Podstawowe reguły wysyłania danych z gniazda surowego Operacje wyjścia wykonuje się za pomocą funkcji sendto() lub sendmsg() i określenia docelowego adresu IP. Jeżeli gniazdo jest połączone to można użyć funkcji write(). Jeżeli nie ustawiono opcji IP_HDRINCL to jądro automatycznie wstawia adres źródłowy do nagłówka IP. Jądro dokonuje fragmentacji pakietów surowych, których wielkość jest większa od jednostki MTU dla danego interfejsu sieciowego. W protokole IPv4 proces użytkownika odpowiada za obliczanie i umieszczanie w nagłówku każdej sumy kontrolnej w tym co występuje za nagłówkiem IPv4.

Podstawowe reguły wysyłania danych z gniazda surowego Operacje wyjścia wykonuje się za pomocą funkcji sendto() lub sendmsg() i określenia docelowego adresu IP. Jeżeli gniazdo jest połączone to można użyć funkcji write(). Jeżeli nie ustawiono opcji IP_HDRINCL to jądro automatycznie wstawia adres źródłowy do nagłówka IP. Jądro dokonuje fragmentacji pakietów surowych, których wielkość jest większa od jednostki MTU dla danego interfejsu sieciowego. W protokole IPv4 proces użytkownika odpowiada za obliczanie i umieszczanie w nagłówku każdej sumy kontrolnej w tym co występuje za nagłówkiem IPv4.

Podstawowe reguły wysyłania danych z gniazda surowego Operacje wyjścia wykonuje się za pomocą funkcji sendto() lub sendmsg() i określenia docelowego adresu IP. Jeżeli gniazdo jest połączone to można użyć funkcji write(). Jeżeli nie ustawiono opcji IP_HDRINCL to jądro automatycznie wstawia adres źródłowy do nagłówka IP. Jądro dokonuje fragmentacji pakietów surowych, których wielkość jest większa od jednostki MTU dla danego interfejsu sieciowego. W protokole IPv4 proces użytkownika odpowiada za obliczanie i umieszczanie w nagłówku każdej sumy kontrolnej w tym co występuje za nagłówkiem IPv4.

Podstawowe reguły wysyłania danych z gniazda surowego Operacje wyjścia wykonuje się za pomocą funkcji sendto() lub sendmsg() i określenia docelowego adresu IP. Jeżeli gniazdo jest połączone to można użyć funkcji write(). Jeżeli nie ustawiono opcji IP_HDRINCL to jądro automatycznie wstawia adres źródłowy do nagłówka IP. Jądro dokonuje fragmentacji pakietów surowych, których wielkość jest większa od jednostki MTU dla danego interfejsu sieciowego. W protokole IPv4 proces użytkownika odpowiada za obliczanie i umieszczanie w nagłówku każdej sumy kontrolnej w tym co występuje za nagłówkiem IPv4.

Pobieranie danych z gniazda surowego Odbierane pakiety UDP i TCP nigdy nie są przekazywane do gniazda surowego. Jeżeli proces chce poprać pakiety UDP lub TCPtomusitozrobićzwarstwykanałowej. Większość pakietów ICMP przesyła się do gniazda surowego po zakończeniu przetwarzania komunikatu ICMP przez jądro. Wyjątek to np. ICMP Echo Request. Wszystkie pakiety IGMP są przekazywane do gniazda surowego po zakończeniu przetwarzania komunikatu przez jądro. Wszystkie datagramy IP, których pola protokołu mają numer nie znany przez jądro są przekazywane do gniazda surowego. Jądro sprawdza jedynie wersję nagłówka IP, sumę kontrolną IPv4, długość nagłówka i adres docelowy IP. Jeżeli datagram przybędzie we fragmentach to zostanie przekazany do gniazda surowego dopiero po otrzymaniu przez jądro wszystkich fragmentów i ich połączeniu.

Pobieranie danych z gniazda surowego Odbierane pakiety UDP i TCP nigdy nie są przekazywane do gniazda surowego. Jeżeli proces chce poprać pakiety UDP lub TCPtomusitozrobićzwarstwykanałowej. Większość pakietów ICMP przesyła się do gniazda surowego po zakończeniu przetwarzania komunikatu ICMP przez jądro. Wyjątek to np. ICMP Echo Request. Wszystkie pakiety IGMP są przekazywane do gniazda surowego po zakończeniu przetwarzania komunikatu przez jądro. Wszystkie datagramy IP, których pola protokołu mają numer nie znany przez jądro są przekazywane do gniazda surowego. Jądro sprawdza jedynie wersję nagłówka IP, sumę kontrolną IPv4, długość nagłówka i adres docelowy IP. Jeżeli datagram przybędzie we fragmentach to zostanie przekazany do gniazda surowego dopiero po otrzymaniu przez jądro wszystkich fragmentów i ich połączeniu.

Pobieranie danych z gniazda surowego Odbierane pakiety UDP i TCP nigdy nie są przekazywane do gniazda surowego. Jeżeli proces chce poprać pakiety UDP lub TCPtomusitozrobićzwarstwykanałowej. Większość pakietów ICMP przesyła się do gniazda surowego po zakończeniu przetwarzania komunikatu ICMP przez jądro. Wyjątek to np. ICMP Echo Request. Wszystkie pakiety IGMP są przekazywane do gniazda surowego po zakończeniu przetwarzania komunikatu przez jądro. Wszystkie datagramy IP, których pola protokołu mają numer nie znany przez jądro są przekazywane do gniazda surowego. Jądro sprawdza jedynie wersję nagłówka IP, sumę kontrolną IPv4, długość nagłówka i adres docelowy IP. Jeżeli datagram przybędzie we fragmentach to zostanie przekazany do gniazda surowego dopiero po otrzymaniu przez jądro wszystkich fragmentów i ich połączeniu.

Pobieranie danych z gniazda surowego Odbierane pakiety UDP i TCP nigdy nie są przekazywane do gniazda surowego. Jeżeli proces chce poprać pakiety UDP lub TCPtomusitozrobićzwarstwykanałowej. Większość pakietów ICMP przesyła się do gniazda surowego po zakończeniu przetwarzania komunikatu ICMP przez jądro. Wyjątek to np. ICMP Echo Request. Wszystkie pakiety IGMP są przekazywane do gniazda surowego po zakończeniu przetwarzania komunikatu przez jądro. Wszystkie datagramy IP, których pola protokołu mają numer nie znany przez jądro są przekazywane do gniazda surowego. Jądro sprawdza jedynie wersję nagłówka IP, sumę kontrolną IPv4, długość nagłówka i adres docelowy IP. Jeżeli datagram przybędzie we fragmentach to zostanie przekazany do gniazda surowego dopiero po otrzymaniu przez jądro wszystkich fragmentów i ich połączeniu.

Pobieranie danych z gniazda surowego Odbierane pakiety UDP i TCP nigdy nie są przekazywane do gniazda surowego. Jeżeli proces chce poprać pakiety UDP lub TCPtomusitozrobićzwarstwykanałowej. Większość pakietów ICMP przesyła się do gniazda surowego po zakończeniu przetwarzania komunikatu ICMP przez jądro. Wyjątek to np. ICMP Echo Request. Wszystkie pakiety IGMP są przekazywane do gniazda surowego po zakończeniu przetwarzania komunikatu przez jądro. Wszystkie datagramy IP, których pola protokołu mają numer nie znany przez jądro są przekazywane do gniazda surowego. Jądro sprawdza jedynie wersję nagłówka IP, sumę kontrolną IPv4, długość nagłówka i adres docelowy IP. Jeżeli datagram przybędzie we fragmentach to zostanie przekazany do gniazda surowego dopiero po otrzymaniu przez jądro wszystkich fragmentów i ich połączeniu.

Pobieranie danych z gniazda surowego- C.D. Kiedy jądro ma przekazać datagram IP do gniazda surowego to najpierw bada wszystkie otwarte gniazda surowe należące do każdego procesu w celu odnalezienia gniazda spełniającego określone warunki. Kopia pakietu IP przekazana jest do każdego gniazda, które spełnia trzy warunki: Sprawdza wartość trzeciego parametru przekazanego do funkcji socket() określającego protokół. AdresdocelowypakietuIPmusibyćtakisamjakadres gniazda dowiązany za pomocą funkcji bind(). Jeżeli adres docelowy był określony dla gniazda za pomocą funkcji connect() to adres źródłowy pakietu IP musi być taki sam. Pytanie: Kiedy przekazane będą do gniazda surowego wszystkie pakiety?

Pobieranie danych z gniazda surowego- C.D. Kiedy jądro ma przekazać datagram IP do gniazda surowego to najpierw bada wszystkie otwarte gniazda surowe należące do każdego procesu w celu odnalezienia gniazda spełniającego określone warunki. Kopia pakietu IP przekazana jest do każdego gniazda, które spełnia trzy warunki: Sprawdza wartość trzeciego parametru przekazanego do funkcji socket() określającego protokół. AdresdocelowypakietuIPmusibyćtakisamjakadres gniazda dowiązany za pomocą funkcji bind(). Jeżeli adres docelowy był określony dla gniazda za pomocą funkcji connect() to adres źródłowy pakietu IP musi być taki sam. Pytanie: Kiedy przekazane będą do gniazda surowego wszystkie pakiety?

Pobieranie danych z gniazda surowego- C.D. Kiedy jądro ma przekazać datagram IP do gniazda surowego to najpierw bada wszystkie otwarte gniazda surowe należące do każdego procesu w celu odnalezienia gniazda spełniającego określone warunki. Kopia pakietu IP przekazana jest do każdego gniazda, które spełnia trzy warunki: Sprawdza wartość trzeciego parametru przekazanego do funkcji socket() określającego protokół. AdresdocelowypakietuIPmusibyćtakisamjakadres gniazda dowiązany za pomocą funkcji bind(). Jeżeli adres docelowy był określony dla gniazda za pomocą funkcji connect() to adres źródłowy pakietu IP musi być taki sam. Pytanie: Kiedy przekazane będą do gniazda surowego wszystkie pakiety?

Pobieranie danych z gniazda surowego- C.D. Kiedy jądro ma przekazać datagram IP do gniazda surowego to najpierw bada wszystkie otwarte gniazda surowe należące do każdego procesu w celu odnalezienia gniazda spełniającego określone warunki. Kopia pakietu IP przekazana jest do każdego gniazda, które spełnia trzy warunki: Sprawdza wartość trzeciego parametru przekazanego do funkcji socket() określającego protokół. AdresdocelowypakietuIPmusibyćtakisamjakadres gniazda dowiązany za pomocą funkcji bind(). Jeżeli adres docelowy był określony dla gniazda za pomocą funkcji connect() to adres źródłowy pakietu IP musi być taki sam. Pytanie: Kiedy przekazane będą do gniazda surowego wszystkie pakiety?

Suma kontrolna IPv4 Sposób liczenia internetowej sumy kontrolnej zdefiniowany jest w dokumencie RFC 1071. Jedna z możliwych implementacji przedstawiona jest po niżej: unsigned short csum (unsigned short buf, int nwords) { unsigned long sum; for (sum = 0; nwords > 0; nwords ) sum+= buf++; sum = (sum >> 16) + (sum & 0xffff); sum+= (sum >> 16); return sum; } Długość pola nwords jest połową długości nagłówka: iph >ip sum = controlsum ((unsigned short ) datagram, iph >ip len >> 1);

W ramach wprawki napiszmy odpowiednik programu ping...