Oprogramowanie komunikacyjne dla Internetu rzeczy Laboratorium nr 4 komunikacja unicastowa IPv6

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

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

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

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

socket(int domain, int type, int protocol)

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

Programowanie sieciowe

Programowanie Sieciowe 1

Iteracyjny serwer TCP i aplikacja UDP

2. Interfejs gniazd Gniazdo

Programowanie współbieżne i rozproszone

Komunikacja sieciowa - interfejs gniazd

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

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

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

Aplikacja Sieciowa. Najpierw tworzymy nowy projekt, tym razem pracować będziemy w konsoli, a zatem: File->New- >Project

Programowanie Sieciowe 1

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

Instytut Teleinformatyki

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

Winsock. Sieci Komputerowe II Wyk ład 3

Akademia Techniczno-Humanistyczna w Bielsku-Białej

Tworzenie aplikacji rozproszonej w Sun RPC

Klient-Serwer Komunikacja przy pomocy gniazd

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

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

Instytut Teleinformatyki

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013

KONFIGURACJA SIECIOWA SYSTEMU WINDOWS

Gniazda. S. Samolej: Gniazda 1

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

Programowanie przy użyciu gniazdek

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

Wireshark analizator ruchu sieciowego

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2011/2012. Programowanie usług sieciowych

Programowanie współbieżne i rozproszone

Ćwiczenie 2. Obsługa gniazd w C#. Budowa aplikacji typu klient-serwer z wykorzystaniem UDP.

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Gniazda BSD implementacja w C#

Instytut Teleinformatyki

IBM i Wersja 7.2. Programowanie Programowanie z użyciem gniazd

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

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

pasja-informatyki.pl

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

TRX API opis funkcji interfejsu

Sieci komputerowe - Protokoły warstwy transportowej

Podstawowe typy serwerów

Programowanie sieciowe

76.Struktura oprogramowania rozproszonego.

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej

1 Moduł Diagnostyki Sieci

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

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

4. Podstawowa konfiguracja

Programowanie Programowanie z użyciem gniazd

1. Model klient-serwer

Wykład 2: Budowanie sieci lokalnych. A. Kisiel, Budowanie sieci lokalnych

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

Tryb bezpołączeniowy (datagramowy)

Sieci Komputerowe. Wykład 1: TCP/IP i adresowanie w sieci Internet

Wybrane działy Informatyki Stosowanej

Laboratorium Sieci Komputerowych - 2

Aplikacja Sieciowa wątki po stronie klienta

Sieci komputerowe i bazy danych

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

Sieci komputerowe Warstwa transportowa

Laboratorium - Wykorzystanie programu Wireskark do badania ramek Ethernetowych

ArtPlayer oprogramowanie do odtwarzania plików video sterowane Artnet/DMX V1.0.1

Zadanie1: Odszukaj w serwisie internetowym Wikipedii informacje na temat protokołu http.

Tomasz Greszata - Koszalin

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

SIECI KOMPUTEROWE I TECHNOLOGIE INTERNETOWE

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

OBSŁUGA I KONFIGURACJA SIECI W WINDOWS

Protokoły sieciowe - TCP/IP

Jarosław Kuchta Administrowanie Systemami Komputerowymi. Dostęp zdalny

Ataki na serwery Domain Name System (DNS Cache Poisoning)

Programowanie Programowanie z użyciem gniazd

Architektura typu klient serwer: uproszczony klient POP3

Programowanie aplikacji równoległych i rozproszonych. Wykład 4

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Możesz podłączyć drukarkę do routera wykorzystując port USB. Wszystkie komputery podłączone do routera będą mogły drukować poprzez router.

Laboratorium - Przeglądanie tablic routingu hosta

Laboratorium - Używanie programu Wireshark do obserwacji mechanizmu uzgodnienia trójetapowego TCP

Synchronizacja czasu - protokół NTP

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

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej. Laboratorium przyrządów wirtualnych. Ćwiczenie 4

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

Wykład Nr Sieci bezprzewodowe 2. Monitorowanie sieci - polecenia

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

KT-ETH-RS232-1 Instrukcja użytkownika KRISTECH,

Ko n f i gura cja p ra cy V ISO z bazą SQL S e rve r

Gniazda - Wstęp. Oprogramowanie systemów równoległych i rozproszonych. Sposób komunikacji. Domena adresowa. olas@icis.pcz.pl

Spring Web MVC, Spring DI

Przykład. Podaj nazwę domenową hosta a odczytaj jego adres IP, lub odwrotnie:

Połączenie LAN-LAN ISDN

Laboratorium podstaw telekomunikacji

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

Transkrypt:

Oprogramowanie komunikacyjne dla Internetu rzeczy Laboratorium nr 4 komunikacja unicastowa IPv6 Celem ćwiczenia jest zdobycie umiejętności programowania komunikacji unicastowej za pomocą protokołu IPv6 w językach C i C# na poziomie interfejsu gniazd. Materiały dotyczące poszczególnych funkcji były podane na wykładzie. 1. Narzędzia i konfiguracja Dla potrzeb laboratorium w SO Windows wykorzystany zostanie kompilator języka C++ DevCpp. Wersję instalacyjną oraz wersję przenośną można pobrać ze strony: http://sourceforge.net/projects/orwelldevcpp/files/. W konfiguracji linkera koniecznie należy dołączyć bibliotekę ws2_32.dll. W tym celu w menu należy wybrać kolejno: Tools/Options/Compiler Options z dopisać l ws2_32 jak na poniższym rysunku. W systemach wbudowanych użyte zostanie środowisko.net (dla SO Linux wersja otwarto źródłowa Mono) i język programowania C# http://www.mono-project.com. W SO Linux do kompilacji kodu C# można wykorzystać kompilator Mono mcs albo Microsoft csc np.: mcs kod.cs mono kod.cs Przy pracy z interfejsem graficznym (MS Windows, X Window) pomocne może być środowisko IDE MonoDevelop http://www.monodevelop.com. Ostatnia aktualizacja: 2017-05-17-1 -

2. Najważniejsze struktury danych i najważniejsze funkcje 2.1.Struktura addrinfo struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socket_t ai_addrlen; char *ai_canonname; struct sockaddr *ai_addr; struct addrinfo *ai_next; }; Wartości poszczególnych pól struktury: ai_flags ai_family ai_socktype ai_protocol ai_addrlen ai_canonname ai_addr ai_next AI_PASSIVE 0x01 Adres może być użyty w funkcji bind AI_CANONAME 0x02 Adres jest adresem domenowym AI_NUMERICHOST 0x04 Adres jest adresem numerycznym IP AF_UNSPEC 0 Protokół nie jest wyspecyfikowany AF_INET 2 Protokół IPv4 AF_INET6 23 Protokół Ipv6 AI_STREAM 1 Protokół transportowy TCP dla AF_INET i AF_INET6 AI_DGRAM 2 Protokół transportowy UDP dla AF_INET i AF_INET6 AI_RAW 3 Tzw. surowe pakiety umożliwiają manipulację nagłówkiem protokołów kolejnej warstwy IPPROTO_TCP 6 Protokół TCP IPPROTO_UDP 17 Protokół UDP Rozmiar w bajtach struktury ai_addr Adres jako łańcuch znaków Adres sieciowy Wskaźnik na kolejną strukturę addrinfo 2.2.Struktury sockaddr W zależności od wartości parametru sa_family struktury sockaddr są różnie zdefinowane. Należy pamiętać, że adresy w strukturach sockaddr są umieszczane w sieciowej kolejności bajtów. struct sockaddr { unsigned short sa_family; // address family, AF_xxx char sa_data[14]; // 14 bytes of protocol address }; // IPv4 AF_INET sockets: struct sockaddr_in { short sin_family; // e.g. AF_INET, AF_INET6 unsigned short sin_port; // e.g. htons(3490) struct in_addr sin_addr; // see struct in_addr char sin_zero[8]; }; struct in_addr { unsigned long s_addr; // load with inet_pton() }; // IPv6 AF_INET6 sockets: struct sockaddr_in6 { short sin6_family; // address family, AF_INET6 u_short sin6_port; // port number, Network Byte Order Ostatnia aktualizacja: 2017-05-17-2 -

u_long sin6_flowinfo; // IPv6 flow information struct in6_addr sin6_addr; // IPv6 address u_long sin6_scope_id; // Scope ID }; struct in6_addr { unsigned char s6_addr[16]; // load with inet_pton() }; 2.3.Funkcja getaddrinfo() Funkcja getaddrinfo() zastępuje funkcję gethostbyname(), która obsługiwała wyłącznie protokół IPv4. int getaddrinfo(char*, char*, addrinfo*, addrinfo** ); Argumenty: 1. adres docelowy jako 2. port albo usługa połączenia 3. preferencje dla resolvera 4. wskaźnik na strukturę wyników Czwarty parametr zwraca wskaźnik na listę jednokierunkową struktur adresowych typu addrinfo. Będzie ona wykorzystywana we wszystkich kolejnych wywołaniach funkcji dotyczących obsługi interfejsu gniazd. Funkcja ta zwraca zero, gdy zakończy się sukcesem albo wartość mniejszą od zera sygnalizującą błąd. Strukturę wyników należy zwolnić po wykorzystaniu za pomocą funkcji freeaddrinfo(). int freeaddrinfo(addrinfo* ); 2.4 Obsługa IPv6 w języku C# Poprawną konwersję zapisów tekstowych adresów domenowych albo adresów IP na klasę IPAddress zapewnia metoda IPAddress[] System.Net.Dns.GetHostAddresses(string host). Zwaraca ona tablicę wszystkich adresów przypisanych do danej nazwy. Kolejność adresów wynika z preferencji zystemu (obecnie zawsze najpierw IPv6). Jeśli w systemie nie ma obsługi IPv6 albo połączenie jest nieaktywne zwracana lista nie zawiera adresów IPv6. Utworzenie gniazda dla IPv6 wymaga podania jako parametru System.Net.Sockets.AddressFamily.InterNetworkV6. Przykłady: UdpClient udpclient = new UdpClient(AddressFamily.InterNetworkV6); UdpClient udpserver = new UdpClient(port, AddressFamily.InterNetworkV6); TcpClient tcpclient = new TcpClient(AddressFamily.InterNetworkV6); TcpListener tcpserver = new TcpListener(IPAddress.IPv6Any, port); W SO Windows NT6 (Windows Vista i nowsze) wprowadzono funkcjonującą wcześniej w SO Linux funkcję umożliwiającą obsługę przychodzących połączeń zarówno IPv4 jak i IPv6 za pomocą pojedynczego gniazda IPv6 z wyzerowaną opcją IPV6ONLY. Dla środowiska.net 4.5 można taką obsługę włączyć dla gniazd TCP ustawiając właściwość DualMode na true, a dla obsługi UDP należy Ostatnia aktualizacja: 2017-05-17-3 -

wymienić gniazdo. Przychodzące połączenia IPv4 mają w tym rozwiązaniu adresy mapowane do IPv6 do postaci ::ffff:1.2.3.4. Przykład inicjacji serwera TCP do równoczesnej obsługi połączeń IPv4 i IPv6: tcp = new TcpListener(IPAddress.IPv6Any, port); tcp.server.dualmode = true; tcp.start(); Przykład inicjacji serwera UDP do równoczesnej obsługi połączeń IPv4 i IPv6: UdpClient udpserver = new UdpClient(port, AddressFamily.InterNetworkV6); Socket socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp); socket.dualmode = true; udpserver.client.close(); udpserver.client = socket; udpserver.client.bind(new IPEndPoint(IPAddress.IPv6Any, port)); Ostatnia aktualizacja: 2017-05-17-4 -

3.1. Odczytanie wszystkich adresów lokalnych interfejsów (język C) Program umożliwia wypisanie wszystkich adresów lokalnych interfejsów. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametr, adres domenowy, dla którego zostaną zwrócone wszystkie adresy IP. Ostatnia aktualizacja: 2017-05-17-5-

3.2. Odczytanie wszystkich adresów lokalnych interfejsów (język C#) Program umożliwia wypisanie wszystkich adresów lokalnych interfejsów. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametr, adres domenowy, dla którego zostaną zwrócone wszystkie adresy IP. Ostatnia aktualizacja: 2017-05-17-6 -

4.1. Klient połączenia TCP (język C) Program umożliwia wysłanie tekstu protokołem TCP i odebrania odpowiedzi w ramach tego samego połączenia. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametry, adres, numer portu i treść wiadomości. Ostatnia aktualizacja: 2017-05-17-7-

4.2. Klient połączenia TCP (język C#) Program umożliwia wysłanie tekstu protokołem TCP i odebrania odpowiedzi w ramach tego samego połączenia. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametry, adres, numer portu i treść wiadomości. Ostatnia aktualizacja: 2017-05-17-8 -

5.1. Echo serwer połączeń TCP (język C) Program przyjmuje połączenia i odsyła z powrotem dane przesłane protokołem TCP w ramach tego samego połączenia. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametry, numer portu i lokalny adres interfejsu. Ostatnia aktualizacja: 2017-05-17-9-

5.2. Echo serwer połączeń TCP (język C#) Program przyjmuje połączenia i odsyła z powrotem dane przesłane protokołem TCP w ramach tego samego połączenia. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametr, numer portu. Ostatnia aktualizacja: 2017-05-17-10 -

6.1. Klient komunikacji UDP (język C) Program umożliwia wysłanie tekstu protokołem UDP i odebrania odpowiedzi w ramach tego samego połączenia. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametry, adres, numer portu i treść wiadomości. Ostatnia aktualizacja: 2017-05-17-11 -

6.1. Klient komunikacji UDP (język C#) Program umożliwia wysłanie tekstu protokołem UDP i odebrania odpowiedzi w ramach tego samego połączenia. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametry, adres, numer portu i treść wiadomości. Ostatnia aktualizacja: 2017-05-17-12 -

7.1. Echo serwer komunikacji UDP (język C) Program przyjmuje przychodzące datagramy UDP i odsyła z powrotem dane przesłane protokołem UDP w ramach tego samego połączenia. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametry, numer portu i lokalny adres interfejsu. Ostatnia aktualizacja: 2017-05-17-13 -

7.2. Echo serwer komunikacji UDP (język C#) Program przyjmuje przychodzące datagramy UDP i odsyła z powrotem dane przesłane protokołem UDP w ramach tego samego połączenia. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametr, numer portu. Ostatnia aktualizacja: 2017-05-17-14 -