Sprawko DG-RW, Semestr IV, Sieci Komputerowe


Damian Gądziak,

93818,

Grupa lab 1

23 lutego, 15:37

Link do wzorca tego dokumentu:

https://docs.google.com/document/d/16XE-sDB7Z6HBmE8yOnYUjOnGzNFQ2Q8CF1YsBGcF33U/edit

1. Skopij ten dokument i --> udostępnij go do współedycji[Author:(null)] użytkownikowi zwierzak@man.poznan.pl

2. Link do utworzonego dokumentu wklej do formularza:

https://docs.google.com/spreadsheet/viewform?formkey=dGx1b1oyUHVJNG53TWJCVWFaOVlsS2c6MQ#gid=0

--> Spis treści

Ćwiczenie 1

1. Odczytanie adresu IP komputera

2. Wyświetlenie tablicy rutingowej

3. Wyświetlenie tabeli translacji

4. Sprawdzenie dostępności hosta

5. Zapis komunikacji sieciowej

6. Określenie adresu IP wybranego hosta

7. Wyświetlenie statystyki wykorzystania połączeń sieciowych

Ćwiczenie 2

Konfiguracja A - B

Konfiguracja A - B - C (ruter)

Ćwiczenie 3

Konfiguracja A - B - C (NAT)

Ćwiczenie 4

Konfiguracja A - B - C - D (Tunel)

Ćwiczenie 5

Konfiguracja DHCP

Ćwiczenie 6

Ćwiczenie 7

Dodatki: Polecenia

ipconfig

route

arp

ping

tracert

nslookup

netstat

Literatura[Author:(null)]

Ćwiczenie 1

1. Odczytanie adresu IP komputera

(polecenie: ipconfig) i przedstawienie go w systemie binarnym. Odczytaj maskę sieciową i określ adres sieci. Ile urządzeń sieciowych może być podłączonych do tej sieci?

http://www.man.poznan.pl/~zwierzak/sk/kalkulator/kalkulator.html

Otwarcie konsoli tekstowej

cmd

Zapis do pliku

ipconfig > plik.txt

Dopisanie do pliku

ipconfig >> plik.txt

Przekierowanie błędów do pliku

ipconfig 2> plik.txt

Konfiguracja IP systemu Windows

Karta Ethernet Połączenie lokalne:

Sufiks DNS konkretnego połączenia : cie.put.poznan.pl

Adres IP. . . . . . . . . . . . . : 150.254.41.21

10010110 10010110 00101001 00010101

Maska podsieci. . . . . . . . . . : 255.255.255.192

Adres sieci

Brama domyślna. . . . . . . . . . : 150.254.41.1

Max podpięte urządzenia 62

2. Wyświetlenie tablicy rutingowej

(polecenie: route print)

===========================================================================

Lista interfejs˘w

0x1 ........................... MS TCP Loopback interface

0x2 ...00 19 99 50 b5 2a ...... Intel(R) 82567LF-3 Gigabit Network Connection - Sterownik miniport Harmonogramu pakietów

0x3 ...08 00 27 00 bc 07 ...... VirtualBox Host-Only Ethernet Adapter - Sterownik miniport Harmonogramu pakietów

===========================================================================

===========================================================================

Aktywne trasy:

Miejsce docelowe w sieci Maska sieci Brama Interfejs Metryka

0.0.0.0 0.0.0.0 150.254.41.1 150.254.41.21 20

68.232.35.119 255.255.255.255 150.254.41.5 150.254.41.21 1

74.125.79.189 255.255.255.255 150.254.41.5 150.254.41.21 1

80.252.0.145 255.255.255.255 150.254.41.5 150.254.41.21 1

85.17.25.236 255.255.255.255 150.254.41.5 150.254.41.21 1

127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1

150.254.41.0 255.255.255.192 150.254.41.21 150.254.41.21 20

150.254.41.21 255.255.255.255 127.0.0.1 127.0.0.1 20

150.254.173.3 255.255.255.255 150.254.41.5 150.254.41.21 1

150.254.255.255 255.255.255.255 150.254.41.21 150.254.41.21 20

173.194.70.120 255.255.255.255 150.254.41.5 150.254.41.21 1

192.168.56.0 255.255.255.0 192.168.56.1 192.168.56.1 20

192.168.56.1 255.255.255.255 127.0.0.1 127.0.0.1 20

192.168.56.255 255.255.255.255 192.168.56.1 192.168.56.1 20

209.85.148.113 255.255.255.255 150.254.41.5 150.254.41.21 1

224.0.0.0 240.0.0.0 150.254.41.21 150.254.41.21 20

224.0.0.0 240.0.0.0 192.168.56.1 192.168.56.1 20

255.255.255.255 255.255.255.255 150.254.41.21 150.254.41.21 1

255.255.255.255 255.255.255.255 192.168.56.1 192.168.56.1 1

Domyylna brama: 150.254.41.1.

===========================================================================

Trasy trwaae:

Brak

3. Wyświetlenie tabeli translacji

adresów IP na adresy fizyczne MAC (polecenie: arp -a)

Interfejs: 150.254.41.21 --- 0x2

Adres internetowy Adres fizyczny Typ

150.254.41.1 00-1b-21-4e-39-92 dynamiczne

150.254.41.3 20-fd-f1-98-80-0f dynamiczne

150.254.41.5 00-10-5a-22-b0-83 dynamiczne

4. Sprawdzenie dostępności hosta

(polecenie: ping localhost)

Badanie 127.0.0.1 z uľyciem 32 bajt˘w danych:

Odpowied« z 127.0.0.1: bajt˘w=32 czas<1 ms TTL=128

Odpowied« z 127.0.0.1: bajt˘w=32 czas<1 ms TTL=128

Odpowied« z 127.0.0.1: bajt˘w=32 czas<1 ms TTL=128

Odpowied« z 127.0.0.1: bajt˘w=32 czas<1 ms TTL=128\

Statystyka badania ping dla 127.0.0.1:

Pakiety: Wysˆane = 4, Odebrane = 4, Utracone = 0 (0% straty),

Szacunkowy czas bˆĄdzenia pakiet˘w w millisekundach:

Minimum = 0 ms, Maksimum = 0 ms, Czas ˜redni = 0 ms

5. Zapis komunikacji sieciowej

w programie WireShark

No. Time Source Destination Protocol Length Info

1 0.000000 150.254.41.21 150.254.41.1 DHCP 349 DHCP Request - Transaction ID 0xca4fc836

Frame 1: 349 bytes on wire (2792 bits), 349 bytes captured (2792 bits)

Ethernet II, Src: FujitsuT_50:b5:2a (00:19:99:50:b5:2a), Dst: IntelCor_4e:39:92 (00:1b:21:4e:39:92)

Internet Protocol Version 4, Src: 150.254.41.21 (150.254.41.21), Dst: 150.254.41.1 (150.254.41.1)

User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)

Bootstrap Protocol

No. Time Source Destination Protocol Length Info

2 0.000708 150.254.41.1 150.254.41.21 DHCP 343 DHCP ACK - Transaction ID 0xca4fc836

Frame 2: 343 bytes on wire (2744 bits), 343 bytes captured (2744 bits)

Ethernet II, Src: IntelCor_4e:39:92 (00:1b:21:4e:39:92), Dst: FujitsuT_50:b5:2a (00:19:99:50:b5:2a)

Internet Protocol Version 4, Src: 150.254.41.1 (150.254.41.1), Dst: 150.254.41.21 (150.254.41.21)

User Datagram Protocol, Src Port: bootps (67), Dst Port: bootpc (68)

Bootstrap Protocol

No. Time Source Destination Protocol Length Info

3 3.916706 FujitsuS_cd:f7:14 Broadcast ARP 60 Who has 150.254.41.1? Tell 150.254.41.43

Frame 3: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: FujitsuS_cd:f7:14 (00:30:05:cd:f7:14), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

Address Resolution Protocol (request)

No. Time Source Destination Protocol Length Info

4 5.008204 IntelCor_4e:39:92 FujitsuT_50:b5:2a ARP 60 Who has 150.254.41.21? Tell 150.254.41.1

Frame 4: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: IntelCor_4e:39:92 (00:1b:21:4e:39:92), Dst: FujitsuT_50:b5:2a (00:19:99:50:b5:2a)

Address Resolution Protocol (request)

No. Time Source Destination Protocol Length Info

5 5.008215 FujitsuT_50:b5:2a IntelCor_4e:39:92 ARP 42 150.254.41.21 is at 00:19:99:50:b5:2a

Frame 5: 42 bytes on wire (336 bits), 42 bytes captured (336 bits)

Ethernet II, Src: FujitsuT_50:b5:2a (00:19:99:50:b5:2a), Dst: IntelCor_4e:39:92 (00:1b:21:4e:39:92)

Address Resolution Protocol (reply)

No. Time Source Destination Protocol Length Info

6 18.167242 173.194.65.189 150.254.41.21 TLSv1 107 Application Data

Frame 6: 107 bytes on wire (856 bits), 107 bytes captured (856 bits)

Ethernet II, Src: 3com_22:b0:83 (00:10:5a:22:b0:83), Dst: FujitsuT_50:b5:2a (00:19:99:50:b5:2a)

Internet Protocol Version 4, Src: 173.194.65.189 (173.194.65.189), Dst: 150.254.41.21 (150.254.41.21)

Transmission Control Protocol, Src Port: https (443), Dst Port: netmagic (1196), Seq: 1, Ack: 1, Len: 53

Secure Sockets Layer

No. Time Source Destination Protocol Length Info

7 18.343074 150.254.41.21 173.194.65.189 TCP 54 netmagic > https [ACK] Seq=1 Ack=54 Win=64921 Len=0

Frame 7: 54 bytes on wire (432 bits), 54 bytes captured (432 bits)

Ethernet II, Src: FujitsuT_50:b5:2a (00:19:99:50:b5:2a), Dst: 3com_22:b0:83 (00:10:5a:22:b0:83)

Internet Protocol Version 4, Src: 150.254.41.21 (150.254.41.21), Dst: 173.194.65.189 (173.194.65.189)

Transmission Control Protocol, Src Port: netmagic (1196), Dst Port: https (443), Seq: 1, Ack: 54, Len: 0

No. Time Source Destination Protocol Length Info

8 23.175064 3com_22:b0:83 FujitsuT_50:b5:2a ARP 60 Who has 150.254.41.21? Tell 150.254.41.5

Frame 8: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: 3com_22:b0:83 (00:10:5a:22:b0:83), Dst: FujitsuT_50:b5:2a (00:19:99:50:b5:2a)

Address Resolution Protocol (request)

No. Time Source Destination Protocol Length Info

9 23.175072 FujitsuT_50:b5:2a 3com_22:b0:83 ARP 42 150.254.41.21 is at 00:19:99:50:b5:2a

Frame 9: 42 bytes on wire (336 bits), 42 bytes captured (336 bits)

Ethernet II, Src: FujitsuT_50:b5:2a (00:19:99:50:b5:2a), Dst: 3com_22:b0:83 (00:10:5a:22:b0:83)

Address Resolution Protocol (reply)

No. Time Source Destination Protocol Length Info

10 27.365827 FujitsuT_1c:9c:7a Broadcast ARP 60 Who has 150.254.41.1? Tell 150.254.41.36

Frame 10: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: FujitsuT_1c:9c:7a (00:19:99:1c:9c:7a), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

Address Resolution Protocol (request)

6. Określenie adresu IP wybranego hosta

(np. www.wp.pl) za pomocą programu nslookup

Nazwa: wp.pl

Address: 212.77.100.101

7. Wyświetlenie statystyki wykorzystania połączeń sieciowych

(polecenie: netstat)

Protok˘ˆ Adres lokalny Obcy adres Stan

TCP PC-50B52A:1026 localhost:1027 USTANOWIONO

TCP PC-50B52A:1027 localhost:1026 USTANOWIONO

TCP PC-50B52A:1054 localhost:1055 USTANOWIONO

TCP PC-50B52A:1055 localhost:1054 USTANOWIONO

TCP PC-50B52A:1056 localhost:1057 USTANOWIONO

TCP PC-50B52A:1057 localhost:1056 USTANOWIONO

TCP PC-50B52A:1258 ee-in-f105.1e100.net:http USTANOWIONO

TCP PC-50B52A:1259 ey-in-f94.1e100.net:http USTANOWIONO

TCP PC-50B52A:1260 ey-in-f132.1e100.net:http USTANOWIONO

TCP PC-50B52A:1261 ey-in-f94.1e100.net:http USTANOWIONO

TCP PC-50B52A:1262 fa-in-f120.1e100.net:http USTANOWIONO

TCP PC-50B52A:1263 ey-in-f94.1e100.net:http USTANOWIONO

TCP PC-50B52A:1264 ey-in-f94.1e100.net:http USTANOWIONO

TCP PC-50B52A:1265 fa-in-f120.1e100.net:http USTANOWIONO

TCP PC-50B52A:1267 fa-in-f139.1e100.net:https USTANOWIONO

TCP PC-50B52A:1269 fa-in-f120.1e100.net:https USTANOWIONO

TCP PC-50B52A:1270 fra07s07-in-f113.1e100.net:https USTANOWIONO

TCP PC-50B52A:1274 fra07s07-in-f155.1e100.net:http USTANOWIONO

TCP PC-50B52A:1280 fra07s07-in-f154.1e100.net:http USTANOWIONO

TCP PC-50B52A:1281 fra07s07-in-f155.1e100.net:http USTANOWIONO

TCP PC-50B52A:1282 fra07s07-in-f155.1e100.net:http USTANOWIONO

TCP PC-50B52A:1284 fra07s07-in-f113.1e100.net:http USTANOWIONO

TCP PC-50B52A:1285 fra07s07-in-f84.1e100.net:https USTANOWIONO

TCP PC-50B52A:1286 fra07s07-in-f154.1e100.net:https USTANOWIONO

TCP PC-50B52A:1288 fra07s07-in-f139.1e100.net:https USTANOWIONO

TCP PC-50B52A:1289 fra07s07-in-f100.1e100.net:https USTANOWIONO

TCP PC-50B52A:1290 fra07s07-in-f100.1e100.net:https USTANOWIONO

TCP PC-50B52A:1308 fa-in-f113.1e100.net:https USTANOWIONO

TCP PC-50B52A:1314 ee-in-f189.1e100.net:https USTANOWIONO

8. Co to jest hub (koncentrator)?

urządzenie koncentryczne przekazujące sygnał do innych komputerów w jedną lub drugą stronę. W architekturze rozgwiazdy

9. Co to jest switch (przełącznik sieciowy) ?

Urządzenie podobne do huba, lecz potrafiące jednocześnie prowadzić ruch sieci w dwie strony

10. Co to jest ruter ?

urządzenie posiadające zazwyczaj w sobie switcha, aczkolwiek głównym elementem routera jest przekazywanie połączenia drogą radiową. Nie posiada w sobie servera ftp, smtp itp ale działa na podobnej zasadzie jak server fizyczny

Ćwiczenie 2

Konfiguracja ustawień sieciowych wirtualnych komputerów

Windows Virtual PC

http://www.microsoft.com/windows/virtual-pc/support/virtual-pc-2007.aspx

Instalacja karty MS Looback:

http://support.microsoft.com/kb/839013/pl

Pobierz obraz systemu: dsl-4.4.10.iso z DSL

Virtual Box

https://www.virtualbox.org/

Wykorzystaj dystrybucję linuxa: http://rescuecd.pld-linux.org/

W przypadku Virtual Box ustawić 1GB pamięci RAM

0x01 graphic

Wartości zmiennych x i z należą do przedziału 2..50,

A:

192.168.x.z

eth0

B:

192.168.x.z+100

eth0

B:

192.168.x+100.z+100

eth1

C:

192.168.x+100.z+200

eth0

Konfiguracja A - B

Połączenie dwóch komputerów (A i B) za pomocą wirtualnej karty sieciowej (np. Microsoft loopback)

polecenia: ifconfig, ping, route

Konfiguracja A - B - C (ruter)

Połączenie dwóch komputerów (A i B) za pomocą wirtualnej karty sieciowej (np. Microsoft loopback)

polecenia: ifconfig, ping, route, sysctl (aby ustawić przekazywanie pakietów w B)

Ćwiczenie 3

Program klient/serwer, który przesyła bieżącą godzinę z wykorzystaniem protokołu TCP/IP

Programy uruchomić w środowisku Microsoft Visual Studio 2010.

File → New → Project : Win32 Console Application

1. Przykład: Serwer.cpp

#include "stdafx.h"

#define USL_STATUS 1

#define USL_STOP 2

#define USL_KILL 3

#define PORT 8111

#pragma comment(lib, "Ws2_32.lib")

#include <winsock2.h>

struct sockaddr_in server_sockaddr;

struct sockaddr_in client_sockaddr;

int sock;

/** */

int readsock(int sock, void * BUFOR, int len)

{

return recv(sock,(char *)BUFOR,len,0);

}

/** */

int writesock(int sock, void * BUFOR, int len)

{

return send(sock,(char *)BUFOR,len,0);

}

int _tmain(int argc, _TCHAR* argv[])

{

WSADATA wsd;

int ds, rc, arg;

int port, r;

unsigned char kod;

if (WSAStartup(MAKEWORD(2,2),&wsd) != 0) {perror("Blad WinSock\n"); exit(1);}

port = PORT; printf("Numer portu :[%d]\n",port);

sock = socket(PF_INET, SOCK_STREAM, 0);

if (sock == -1) { perror("socket"); exit(1);}

server_sockaddr.sin_family = AF_INET;

server_sockaddr.sin_port = htons(port);

rc = bind(sock, (struct sockaddr *) & server_sockaddr, sizeof (server_sockaddr));

if (rc == -1) { perror("bind"); exit(1); }

rc = listen(sock, 5); if (rc == -1) { perror("listen"); exit(1); }

for(;;)

{

arg = sizeof (client_sockaddr);

printf("Serwer: Czekam...\n");

ds = accept(sock, (struct sockaddr *) &client_sockaddr, &arg);

if (ds == -1) { perror("accept"); break; }

printf("IP klienta:%s\n",inet_ntoa(client_sockaddr.sin_addr));

printf("Obsluga polecen klienta na porcie %ld\n",ds);

do

{

if (readsock(ds,&kod,1) == 1)

{

printf("Kod polecenia %d\n",kod);

switch (kod)

{

case USL_STATUS:

r = 1;

writesock(ds,&r,4);

break;

case USL_STOP:

kod = 0;

printf("Koniec polaczenia z klientem\n\n");

break;

/*

case USL_KILL:

break;

*/

default:

printf("Nierozpoznane polecenie %d\n",kod);

kod = 0;

}

} else break;

} while (kod != 0);

closesocket(ds);

}

closesocket(sock);

WSACleanup();

return 0;

}

2. Przykład: Klient.cpp

#include "stdafx.h"

#define USL_STATUS 1

#define USL_STOP 2

#define USL_KILL 3

#define PORT 8111

#pragma comment(lib, "Ws2_32.lib")

#include <winsock2.h>

/** */

int readsock(int sock, void * BUFOR, int len)

{

return recv(sock,(char *)BUFOR,len,0);

}

/** */

int writesock(int sock, void * BUFOR, int len)

{

return send(sock,(char *)BUFOR,len,0);

}

struct sockaddr_in client_sockaddr;

int sock;

int _tmain(int argc, _TCHAR* argv[])

{

WSADATA wsd;

unsigned char kod;

int r;

char * ipchar ="127.0.0.1";

int ip;

if (WSAStartup(MAKEWORD(2,2),&wsd) != 0) {perror("Blad WinSock\n"); exit(1);}

ip = inet_addr(ipchar);

sock = socket(PF_INET, SOCK_STREAM, 0);

if (sock == -1) { perror("socket");exit(1);}

memset(&(client_sockaddr),0,sizeof(struct sockaddr_in));

client_sockaddr.sin_family = AF_INET;

memcpy(&(client_sockaddr.sin_addr),&ip,4);

client_sockaddr.sin_port = htons(PORT);

if (connect(sock,(struct sockaddr *)&(client_sockaddr),sizeof(struct sockaddr_in)) < 0)

{ // brak polaczenia

printf("Brak polaczenia\n");

return 0;

} else

{

printf("Polaczenie OK\n");

kod = USL_STATUS;

writesock(sock,&kod,1); // wybor uslugi 1

readsock(sock,&r,4);

printf("Odpowiedz serwera:%d\n",ntohl(r));

kod = USL_STOP;

writesock(sock,&kod,1); // zakonczenie polaczenia

}

closesocket(sock);

WSACleanup();

system("Pause");

return 0;

}

3. Określ przeznaczenie funkcji

Podaj znaczenie funkcji zaznaczonych na czerwono w kodzie programów serwera.cpp i klienta.cpp

Funkcja/

procedura

Do czego służy?

recv()

funkcja ta odbiera dane z gniazda

send()

wysyła dane

socket()

inicjuje gniazdo

bind()

binduje - czyli przypisuje gniazdo do adresu

listen()

nasłuchuje gniazdo

accept()

akceptuje połączenie

inet_ntoa()

konwertuje adres IP na strukture

closesocket()

zamyka gniazdo

connect()

nawiązuje połączenie

inet_addr()

funkcja odwrotna do inet_ntoa()

4. Określ schemat komunikacji

Określ przykładowy schemat wymiany danych między klientami a serwerem i przedstaw go graficznie. 0x01 graphic

5. Usługa zatrzymania działania serwera

Zmodyfikuj kod klienta i serwera dodając nową usługę USL_KILL, która zakończy działanie serwera. Wybór usług w kliencie uzależnić od wyboru użytkownika.

Usługa

Zmiany w kodzie Serwera

Zmiany w kodzie Klienta

USL_KILL

case USL_KILL:

kod = 0;

kod2= 0;

printf("Head shot\n\n");

break;

kod = USL_KILL;

writesock(sock,&kod,1); // ZABICIE SERWERA

6. Usługa zliczająca obsłużonych klientów

Dodaj usługę która zlicza ilu klientów zgłosiło się do serwera i informacja ta zostaje odesłana do klienta.

Usługa

Zmiany w kodzie Serwera

Zmiany w kodzie Klienta

int licz = 1;

case USL_STATUS:

r = htons(licz);

writesock(ds,&r,4);

break;

na koncu fora

licz++;

brak

7. Usługa przesyłania czasu

Zmodyfikuj kod klienta i serwera dodając usługę USL_TIME, która w odpowiedzi na zapytanie klienta zwróci bieżący czas.

Usługa

Zmiany w kodzie Serwera

Zmiany w kodzie Klienta

USL_TIME

time_t seconds;

seconds = time (NULL);

case USL_TIME:

r = seconds;

writesock(ds,&r,4);

break;

kod = USL_TIME;

writesock(sock,&kod,1);

readsock(sock,&r,4);

printf("Odpowiedz serwera:%d\n",r);

Ćwiczenie 4

1. Klient/Serwer UDP

Sprawdź działanie programów: Sender i Receiver.

1.1. Przykład: Sender

Dodawanie biblioteki

Project > [nazwa] Properties >

Linker

Input

Additional Dependencies

dopisać bibliotekę ws2_32.lib

Przekazywanie parametrów uruchomieniowych w środowisku VS 2010:

Project > [nazwa] Properties >

Debugging

Command Arguments

wpisać np. -n:50

// Module Name: Sender.c

//

// Description:

// This sample sends UDP datagrams to the specified recipient.

// The -c option first calls connect() to associate the

// recipient's IP address with the socket handle so that the

// send() function can be used as opposed to the sendto() call.

//

// Compile:

// cl -o Sender Sender.c ws2_32.lib

//

// Command line options:

// sender [-p:int] [-r:IP] [-c] [-n:x]

// -p:int Remote port

// -r:IP Recipient's IP address or hostname

// -c Connect to remote IP first

// -n:x Number of times to send message

//

#include "stdafx.h"

#include <winsock2.h>

#include <stdio.h>

#include <stdlib.h>

#pragma comment(lib, "ws2_32.lib")

#define DEFAULT_PORT 5150

#define DEFAULT_COUNT 25

BOOL bConnect = FALSE; // Connect to recipient first

int iPort = DEFAULT_PORT; // Port to send data to

int dwCount = DEFAULT_COUNT; // Number of messages to send

char szRecipient[128]; // Recipient's IP or hostname

//

// Function: usage

//

// Description:

// Print usage information and exit

//

void usage()

{

printf("usage: sender [-p:int] [-r:IP] "

"[-c] [-n:x] [-b:x] [-d:c]\n\n");

printf(" -p:int Remote port\n");

printf(" -r:IP Recipients IP address or hostname\n");

printf(" -c Connect to remote IP first\n");

printf(" -n:x Number of times to send message\n");

ExitProcess(1);

}

//

// Function: ValidateArgs

//

// Description:

// Parse the command line arguments, and set some global flags to

// indicate what actions to perform

//

void ValidateArgs(int argc, char **argv)

{

int i;

strcpy(szRecipient, "127.0.0.1");

for(i = 1; i < argc; i++)

{

if ((argv[i][0] == '-') || (argv[i][0] == '/'))

{

switch (tolower(argv[i][1]))

{

case 'p': // Remote port

if (strlen(argv[i]) > 3) iPort = atoi(&argv[i][3]);

break;

case 'r': // Recipient's IP addr

if (strlen(argv[i]) > 3) strcpy(szRecipient, &argv[i][3]);

break;

case 'c': // Connect to recipients IP addr

bConnect = TRUE;

break;

case 'n': // Number of times to send message

if (strlen(argv[i]) > 3) dwCount = atol(&argv[i][3]);

break;

default:

usage();

break;

}

}

}

}

//

// Function: main

//

// Description:

// Main thread of execution. Initialize Winsock, parse the command

// line arguments, create a socket, connect to the remote IP

// address if specified, and then send datagram messages to the

// recipient.

//

int main(int argc, char **argv)

{

WSADATA wsd;

SOCKET s;

int ret,i;

SOCKADDR_IN recipient;

// Parse the command line and load Winsock

//

ValidateArgs(argc, argv);

if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)

{

printf("WSAStartup failed!\n");

return 1;

}

// Create the socket

//

s = socket(AF_INET, SOCK_DGRAM, 0);

if (s == INVALID_SOCKET)

{

printf("socket() failed; %d\n", WSAGetLastError());

return 1;

}

// Resolve the recipient's IP address or hostname

//

recipient.sin_family = AF_INET;

recipient.sin_port = htons((short)iPort);

if ((recipient.sin_addr.s_addr = inet_addr(szRecipient))== INADDR_NONE)

{

struct hostent *host=NULL;

host = gethostbyname(szRecipient);

if (host)

CopyMemory(&recipient.sin_addr, host->h_addr_list[0],host->h_length);

else

{

printf("gethostbyname() failed: %d\n", WSAGetLastError());

WSACleanup();

return 1;

}

}

//

// If the connect option is set, "connect" to the recipient

// and send the data with the send() function

//

if (bConnect)

{

if (connect(s, (SOCKADDR *)&recipient, sizeof(recipient)) == SOCKET_ERROR)

{

printf("connect() failed: %d\n", WSAGetLastError());

WSACleanup();

return 1;

}

for(i = 0; i < dwCount; i++)

{

ret = send(s, (char *)&i, sizeof(i), 0);

if (ret == SOCKET_ERROR)

{

printf("send() failed: %d\n", WSAGetLastError());

break;

}

else if (ret == 0) break;

// send() succeeded!

}

}

else

{

// Otherwise, use the sendto() function

for(i = 0; i < dwCount; i++)

{

ret = sendto(s, (char *)&i, sizeof(i), 0, (SOCKADDR *)&recipient, sizeof(recipient));

if (ret == SOCKET_ERROR)

{

printf("sendto() failed; %d\n", WSAGetLastError());

break;

}

else if (ret == 0) break;

// sendto() succeeded!

}

}

closesocket(s);

WSACleanup();

return 0;

}

1.2. Przykład: Receiver

// Module Name: Receiver.c

//

// Description:

// This sample receives UDP datagrams by binding to the specified

// interface and port number and then blocking on a recvfrom()

// call

//

// Compile:

// cl -o Receiver Receiver.c ws2_32.lib

//

// Command line options:

// sender [-p:int] [-i:IP][-n:x]

// -p:int Local port

// -i:IP Local IP address to listen on

// -n:x Number of times to send message

//

//

#include "stdafx.h"

#include <winsock2.h>

#include <stdio.h>

#include <stdlib.h>

#pragma comment(lib, "ws2_32.lib")

#define DEFAULT_PORT 5150

#define DEFAULT_COUNT 50

int iPort = DEFAULT_PORT; // Port to receive on

int dwCount = DEFAULT_COUNT; // Number of messages to read

BOOL bInterface = FALSE; // Use an interface other than default

char szInterface[32]; // Interface to read datagrams from

//

// Function: usage:

//

// Description:

// Print usage information and exit

//

void usage()

{

printf("usage: sender [-p:int] [-i:IP][-n:x]\n\n");

printf(" -p:int Local port\n");

printf(" -i:IP Local IP address to listen on\n");

printf(" -n:x Number of times to send message\n");

ExitProcess(1);

}

//

// Function: ValidateArgs

//

// Description:

// Parse the command line arguments, and set some global flags to

// indicate what actions to perform

//

void ValidateArgs(int argc, char **argv)

{

int i;

for(i = 1; i < argc; i++)

{

if ((argv[i][0] == '-') || (argv[i][0] == '/'))

{

switch (tolower(argv[i][1]))

{

case 'p': // Local port

if (strlen(argv[i]) > 3)

iPort = atoi(&argv[i][3]);

break;

case 'n': // Number of times to receive message

if (strlen(argv[i]) > 3)

dwCount = atol(&argv[i][3]);

break;

case 'i': // Interface to receive datagrams on

if (strlen(argv[i]) > 3)

{

bInterface = TRUE;

strcpy(szInterface, &argv[i][3]);

}

break;

default:

usage();

break;

}

}

}

}

//

// Function: main

//

// Description:

// Main thread of execution. Initialize Winsock, parse the command

// line arguments, create a socket, bind it to a local interface

// and port, and then read datagrams.

//

int main(int argc, char **argv)

{

WSADATA wsd;

SOCKET s;

int ret,

i, r;

DWORD dwSenderSize;

SOCKADDR_IN sender,local;

// Parse arguments and load Winsock

//

ValidateArgs(argc, argv);

if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)

{

printf("WSAStartup failed!\n");

return 1;

}

// Create the socket and bind it to a local interface and port

//

s = socket(AF_INET, SOCK_DGRAM, 0);

if (s == INVALID_SOCKET)

{

printf("socket() failed; %d\n", WSAGetLastError());

return 1;

}

local.sin_family = AF_INET;

local.sin_port = htons((short)iPort);

if (bInterface) local.sin_addr.s_addr = inet_addr(szInterface);

else local.sin_addr.s_addr = htonl(INADDR_ANY);

if (bind(s, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR)

{

printf("bind() failed: %d\n", WSAGetLastError());

return 1;

}

// Read the datagrams

//

for(i = 0; i < dwCount; i++)

{

dwSenderSize = sizeof(sender);

ret = recvfrom(s, (char *)&r, sizeof(r), 0, (SOCKADDR *)&sender, (int *)&dwSenderSize);

if (ret == SOCKET_ERROR)

{

printf("recvfrom() failed; %d\n", WSAGetLastError());

break;

}

else if (ret == 0) break;

else

{

printf("[%s] sent me: '%d'\n", inet_ntoa(sender.sin_addr), r);

}

}

closesocket(s);

WSACleanup();

return 0;

}

2. Określ przeznaczenie funkcji

Podaj znaczenie funkcji zaznaczonych na czerwono w kodzie programów: Receiver.c

i Sender.c

Funkcja/

procedura

Do czego służy?

socket

Funkcja socket tworzy gniazdo, które jest związane z konkretnym dostawcą usług transportowych.

WSAStartup

Funkcja WSAStartup inicjuje użycie DLL Winsock przez proces.

htons

funkcja htons() przekształca wartość short integer hostshort z
lokalnego na sieciowy porządek bajtów.

inet_addr

Funkcja inet_addr konwertuje łańcuch zawierający adresu IPv4 w notacji dziesiętnej adres do odpowiedniego adresu dla in_addr struktury.

connect

wykonywana przez klienta do nawiazania polaczenia z serwerem.

sendto

Funkcja sendto wysyła dane do określonego przeznaczenia.

WSACleanup

Funkcja WSACleanup kończy korzystanie z biblioteki DLL Winsock 2 ust Ws2_32.dll).

htons

funkcja htons() przekształca wartość short integer hostshort z
lokalnego na sieciowy porządek bajtów.

htonl

konwersja wartości pomiędzy hostem a sieciowej kolejności bajtów /

funkcja htonl() przekształca wartość long integer hostlong z lokalnego
na sieciowy porządek bajtów.

recvfrom

Funkcja recvfrom odbiera datagram i zapisuje adresu źródłowego.

Pakiet zgubione w połączeniu.

0x01 graphic

Dzięki skonfigurowaniu programu, połączyłem dwa komputery z sali 111 i mogłem sprawdzić ile pakietów z 10000 zostanie zgubionych.

0x01 graphic

3. Określ schemat komunikacji

(Schemat podobny jak w ćwiczeniu 3)

4. Przesłanie ciągu liczb

Zmodyfikuj program Sender i Receiver tak, aby do serwera wysyłany był (w osobnych pakietach) ciąg kolejnych liczb z przedziału [1..1000].

Sender → [1000] → ... → [2] → [1] → Receiver

Odbiorca zna treść komunikatów jakie powinien otrzymać od nadawcy więc możliwe jest wykrycie anomalii:

Do realizacji tego zadania można wykorzystać tablicę, która zlicza ile razy wystąpiła dana liczba w komunikatach.

Można również zmienić typ komunikatu - zamiast łańcucha tekstowego przesyłać liczbę typu int.

Zmiany w kodzie Sender

Zmiany w kodzie Receiver

case USL_KILL:

kod = 0;

kod2= 0;

printf("Head shot\n\n");

break;

(..) POD KONIEC FOR'A

if (kod2 == 0) { break; }

kod = USL_TIME;

writesock(sock,&kod,1);

readsock(sock,&r,4);

printf("Odpowiedz serwera:%d\n",r);

5. Porównanie czasu wysyłania komunikatów

Porównaj czas wysyłania 1000 liczb za pomocą protokołu TCP/IP i UDP/IP

W przypadku protokołu UDP (ponieważ istnieje możliwość utraty pakietów) - czas liczymy od pojawienia się pierwszego pakietu, a kończymy pomiar czasu w przypadku wykrycia liczby równej lub większej od 1000.

Ćwiczenie 5

1. Konfiguracja IPv6 w Windows XP

1. Wybierz opcję: Start -> Ustawienia -> Połączenia sieciowe

2. Wybierz połączenie sieciowe związane z fizyczną kartą sieciową (Plik ->Właściwości)

3. Jeżeli na liście w zakładce "Ogólne" jest nie jest dostępny protokół: Microsoft TCP/IP wersja 6, to zainstaluj ten protokół

4. Testowanie protokołu IPv6:

Wybierz: Start -> Uruchom

wpisz komendę : cmd

następnie w oknie terminalna wpisz komendę: ipconfig

odszukaj adres IPv6 komputera

dla danego adresu IPv6 wykonaj polecenie: ping6

zapoznaj się z poleceniem: ipv6

5. Po zakończeniu testów odinstaluj protokół IPv6

ipv6 uninstall

Wykonaj polecenie:

ping6 ::1

0x01 graphic

Wykonaj ping6 dla adresu lokalnego

0x01 graphic

Wykonaj ping6 do “sąsiada”

0x01 graphic

2.2. Czy istnieje związek między adresem IPv6 i numerem MAC karty sieciowej?

Tak.

2.3. Co to jest adres unicast?

Adres emisji pojedynczej (adres określający pojedyncze urządzenie sieci);

Adres unicast - identyfikuje pojedynczy interfejs, pakiety są dostarczane tylko do odbiorcy.

2.4. Co to jest adres multicast?

Adres multicast - identyfikuje grupę interfejsów, pakiety są dostarczane do wszystkich członków grupy.

2.5. Co to jest adres anycast?

Adres anycast - identyfikuje grupę interfejsów, pakiety są dostarczane tylko do najbliższego odbiorcy.

4. Klient w wersji IPv6

// client.c - Simple TCP/UDP client using Winsock 2.2

//

// This is a part of the Microsoft<entity type="reg"/> Source Code Samples.

// Copyright 1996 - 2000 Microsoft Corporation.

// All rights reserved.

// This source code is only intended as a supplement to

// Microsoft Development Tools and/or WinHelp<entity type="reg"/> documentation.

// See these sources for detailed information regarding the

// Microsoft samples programs.

//

#define WIN32_LEAN_AND_MEAN

#include "stdafx.h"

#include <winsock2.h>

#include <ws2tcpip.h>

#include <stdio.h>

#include <stdlib.h>

//#include <string.h>

// Needed for the Windows 2000 IPv6 Tech Preview.

#if (_WIN32_WINNT == 0x0500)

#include <tpipv6.h>

#endif

// Link with ws2_32.lib

#pragma comment(lib, "Ws2_32.lib")

#define STRICMP _stricmp

//

// This code assumes that at the transport level, the system only supports

// one stream protocol (TCP) and one datagram protocol (UDP). Therefore,

// specifying a socket type of SOCK_STREAM is equivalent to specifying TCP

// and specifying a socket type of SOCK_DGRAM is equivalent to specifying UDP.

//

#define DEFAULT_SERVER NULL // Will use the loopback interface

#define DEFAULT_FAMILY PF_UNSPEC // Accept either IPv4 or IPv6

#define DEFAULT_SOCKTYPE SOCK_STREAM // TCP

#define DEFAULT_PORT "5001" // Arbitrary, albiet a historical test port

#define DEFAULT_EXTRA 0 // Number of "extra" bytes to send

#define BUFFER_SIZE 65536

#define UNKNOWN_NAME "<unknown>"

void Usage(char *ProgName)

{

fprintf(stderr, "\nSimple socket sample client program.\n");

fprintf(stderr,

"\n%s [-s server] [-f family] [-t transport] [-p port] [-b bytes] [-n number]\n\n",ProgName);

fprintf(stderr, " server\tServer name or IP address. (default: %s)\n",

(DEFAULT_SERVER == NULL) ? "loopback address" : DEFAULT_SERVER);

fprintf(stderr,

" family\tOne of PF_INET, PF_INET6 or PF_UNSPEC. (default: %s)\n",

(DEFAULT_FAMILY ==

PF_UNSPEC) ? "PF_UNSPEC" : ((DEFAULT_FAMILY ==

PF_INET) ? "PF_INET" : "PF_INET6"));

fprintf(stderr, " transport\tEither TCP or UDP. (default: %s)\n",

(DEFAULT_SOCKTYPE == SOCK_STREAM) ? "TCP" : "UDP");

fprintf(stderr, " port\t\tPort on which to connect. (default: %s)\n",

DEFAULT_PORT);

fprintf(stderr, " bytes\t\tBytes of extra data to send. (default: %d)\n",

DEFAULT_EXTRA);

fprintf(stderr, " number\tNumber of sends to perform. (default: 1)\n");

fprintf(stderr, " (-n by itself makes client run in an infinite loop,");

fprintf(stderr, " Hit Ctrl-C to terminate)\n");

WSACleanup();

exit(1);

}

LPTSTR PrintError(int ErrorCode)

{

static TCHAR Message[1024];

// If this program was multithreaded, we'd want to use

// FORMAT_MESSAGE_ALLOCATE_BUFFER instead of a static buffer here.

// (And of course, free the buffer when we were done with it)

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS |

FORMAT_MESSAGE_MAX_WIDTH_MASK,

NULL, ErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),

Message, 1024, NULL);

return Message;

}

int ReceiveAndPrint(SOCKET ConnSocket, char *Buffer, int BufLen)

{

int AmountRead;

AmountRead = recv(ConnSocket, Buffer, BufLen, 0);

if (AmountRead == SOCKET_ERROR) {

fprintf(stderr, "recv() failed with error %d: %s\n",

WSAGetLastError(), PrintError(WSAGetLastError()));

closesocket(ConnSocket);

WSACleanup();

exit(1);

}

//

// We are not likely to see this with UDP, since there is no

// 'connection' established.

if (AmountRead == 0) {

printf("Server closed connection\n");

closesocket(ConnSocket);

WSACleanup();

exit(0);

}

printf("Received %d bytes from server: [%.*s]\n",

AmountRead, AmountRead, Buffer);

return AmountRead;

}

int main(int argc, char **argv)

{

char Buffer[BUFFER_SIZE], AddrName[NI_MAXHOST];

char *Server = DEFAULT_SERVER;

int Family = DEFAULT_FAMILY;

int SocketType = DEFAULT_SOCKTYPE;

char *Port = DEFAULT_PORT;

WSADATA wsaData;

int i, RetVal, AddrLen, AmountToSend;

int ExtraBytes = DEFAULT_EXTRA;

unsigned int Iteration, MaxIterations = 1;

BOOL RunForever = FALSE;

ADDRINFO Hints, *AddrInfo, *AI;

SOCKET ConnSocket = INVALID_SOCKET;

struct sockaddr_storage Addr;

if (argc > 1) {

for (i = 1; i < argc; i++) {

if (((argv[i][0] == '-') || (argv[i][0] == '/')) &&

(argv[i][1] != 0) && (argv[i][2] == 0)) {

switch (tolower(argv[i][1])) {

case 'f':

if (!argv[i + 1]) Usage(argv[0]);

if (!STRICMP(argv[i + 1], "PF_INET"))

Family = PF_INET;

else if (!STRICMP(argv[i + 1], "AF_INET"))

Family = PF_INET;

else if (!STRICMP(argv[i + 1], "PF_INET6"))

Family = PF_INET6;

else if (!STRICMP(argv[i + 1], "AF_INET6"))

Family = PF_INET6;

else if (!STRICMP(argv[i + 1], "PF_UNSPEC"))

Family = PF_UNSPEC;

else if (!STRICMP(argv[i + 1], "AF_UNSPEC"))

Family = PF_UNSPEC;

else

Usage(argv[0]);

i++;

break;

case 't':

if (!argv[i + 1])

Usage(argv[0]);

if (!STRICMP(argv[i + 1], "TCP"))

SocketType = SOCK_STREAM;

else if (!STRICMP(argv[i + 1], "UDP"))

SocketType = SOCK_DGRAM;

else

Usage(argv[0]);

i++;

break;

case 's':

if (argv[i + 1]) {

if (argv[i + 1][0] != '-') {

Server = argv[++i];

break;

}

}

Usage(argv[0]); break;

case 'p':

if (argv[i + 1]) {

if (argv[i + 1][0] != '-') {

Port = argv[++i];

break;

}

}

Usage(argv[0]); break;

case 'b':

if (argv[i + 1]) {

if (argv[i + 1][0] != '-') {

ExtraBytes = atoi(argv[++i]);

if (ExtraBytes >

sizeof (Buffer) -

sizeof ("Message #4294967295"))

Usage(argv[0]);

break;

}

}

Usage(argv[0]); break;

case 'n':

if (argv[i + 1]) {

if (argv[i + 1][0] != '-') {

MaxIterations = atoi(argv[++i]);

break;

}

}

RunForever = TRUE;

break;

default:

Usage(argv[0]); break;

}

} else Usage(argv[0]);

}

}

// Ask for Winsock version 2.2.

if ((RetVal = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0) {

fprintf(stderr, "WSAStartup failed with error %d: %s\n",

RetVal, PrintError(RetVal));

WSACleanup();

return -1;

}

//

// By not setting the AI_PASSIVE flag in the hints to getaddrinfo, we're

// indicating that we intend to use the resulting address(es) to connect

// to a service. This means that when the Server parameter is NULL,

// getaddrinfo will return one entry per allowed protocol family

// containing the loopback address for that family.

memset(&Hints, 0, sizeof (Hints));

Hints.ai_family = Family;

Hints.ai_socktype = SocketType;

RetVal = getaddrinfo(Server, Port, &Hints, &AddrInfo);

if (RetVal != 0) {

fprintf(stderr,

"Cannot resolve address [%s] and port [%s], error %d: %s\n",

Server, Port, RetVal, gai_strerror(RetVal));

WSACleanup();

return -1;

}

//

// Try each address getaddrinfo returned, until we find one to which

// we can successfully connect.

for (AI = AddrInfo; AI != NULL; AI = AI->ai_next) {

// Open a socket with the correct address family for this address.

ConnSocket = socket(AI->ai_family, AI->ai_socktype, AI->ai_protocol);

//**** DEBUG

printf("socket call with family: %d socktype: %d, protocol: %d\n",

AI->ai_family, AI->ai_socktype, AI->ai_protocol);

if (ConnSocket == INVALID_SOCKET)

printf("socket call failed with %d\n", WSAGetLastError());

//**** DEBUG END

if (ConnSocket == INVALID_SOCKET) {

fprintf(stderr, "Error Opening socket, error %d: %s\n",

WSAGetLastError(), PrintError(WSAGetLastError()));

continue;

}

// Notice that nothing in this code is specific to whether we

// are using UDP or TCP.

// When connect() is called on a datagram socket, it does not

// actually establish the connection as a stream (TCP) socket

// would. Instead, TCP/IP establishes the remote half of the

// (LocalIPAddress, LocalPort, RemoteIP, RemotePort) mapping.

// This enables us to use send() and recv() on datagram sockets,

// instead of recvfrom() and sendto().

printf("Attempting to connect to: %s\n", Server ? Server : "localhost");

if (connect(ConnSocket, AI->ai_addr, (int) AI->ai_addrlen) != SOCKET_ERROR)

break;

i = WSAGetLastError();

if (getnameinfo(AI->ai_addr, (int) AI->ai_addrlen, AddrName,

sizeof (AddrName), NULL, 0, NI_NUMERICHOST) != 0)

strcpy_s(AddrName, sizeof (AddrName), UNKNOWN_NAME);

fprintf(stderr, "connect() to %s failed with error %d: %s\n",

AddrName, i, PrintError(i));

closesocket(ConnSocket);

}

if (AI == NULL) {

fprintf(stderr, "Fatal error: unable to connect to the server.\n");

WSACleanup();

return -1;

}

//

// This demonstrates how to determine to where a socket is connected.

AddrLen = sizeof (Addr);

if (getpeername(ConnSocket, (LPSOCKADDR) & Addr, (int *) &AddrLen) == SOCKET_ERROR) {

fprintf(stderr, "getpeername() failed with error %d: %s\n",

WSAGetLastError(), PrintError(WSAGetLastError()));

} else {

if (getnameinfo((LPSOCKADDR) & Addr, AddrLen, AddrName,

sizeof (AddrName), NULL, 0, NI_NUMERICHOST) != 0)

strcpy_s(AddrName, sizeof (AddrName), UNKNOWN_NAME);

printf("Connected to %s, port %d, protocol %s, protocol family %s\n",

AddrName, ntohs(SS_PORT(&Addr)),

(AI->ai_socktype == SOCK_STREAM) ? "TCP" : "UDP",

(AI->ai_family == PF_INET) ? "PF_INET" : "PF_INET6");

}

// We are done with the address info chain, so we can free it.

freeaddrinfo(AddrInfo);

//

// Find out what local address and port the system picked for us.

AddrLen = sizeof (Addr);

if (getsockname(ConnSocket, (LPSOCKADDR) & Addr, &AddrLen) == SOCKET_ERROR) {

fprintf(stderr, "getsockname() failed with error %d: %s\n",

WSAGetLastError(), PrintError(WSAGetLastError()));

} else {

if (getnameinfo((LPSOCKADDR) & Addr, AddrLen, AddrName,

sizeof (AddrName), NULL, 0, NI_NUMERICHOST) != 0)

strcpy_s(AddrName, sizeof (AddrName), UNKNOWN_NAME);

printf("Using local address %s, port %d\n",

AddrName, ntohs(SS_PORT(&Addr)));

}

// Send and receive in a loop for the requested number of iterations.

for (Iteration = 0; RunForever || Iteration < MaxIterations; Iteration++) {

// Compose a message to send.

AmountToSend =

sprintf_s(Buffer, sizeof (Buffer), "Message #%u", Iteration + 1);

for (i = 0; i < ExtraBytes; i++) {

Buffer[AmountToSend++] = (char) ((i & 0x3f) + 0x20);

}

// Send the message. Since we are using a blocking socket, this

// call shouldn't return until it's able to send the entire amount.

RetVal = send(ConnSocket, Buffer, AmountToSend, 0);

if (RetVal == SOCKET_ERROR) {

fprintf(stderr, "send() failed with error %d: %s\n",

WSAGetLastError(), PrintError(WSAGetLastError()));

WSACleanup();

return -1;

}

printf("Sent %d bytes (out of %d bytes) of data: [%.*s]\n",

RetVal, AmountToSend, AmountToSend, Buffer);

// Clear buffer just to prove we're really receiving something.

memset(Buffer, 0, sizeof (Buffer));

// Receive and print server's reply.

ReceiveAndPrint(ConnSocket, Buffer, sizeof (Buffer));

}

// Tell system we're done sending.

printf("Done sending\n");

shutdown(ConnSocket, SD_SEND);

//

// Since TCP does not preserve message boundaries, there may still

// be more data arriving from the server. So we continue to receive

// data until the server closes the connection.

if (SocketType == SOCK_STREAM)

while (ReceiveAndPrint(ConnSocket, Buffer, sizeof (Buffer)) != 0) ;

closesocket(ConnSocket);

WSACleanup();

return 0;

}

Screan z połączenia Klient - Serwer

0x01 graphic

5. Określ przeznaczenie funkcji

Podaj znaczenie funkcji zaznaczonych na czerwono w kodzie programów: Serwer i Klient w wersji IPv6

Funkcja/

procedura

Do czego służy?

getnameinfo

Getnameinfo - tłumaczenie adresu na nazwę w sposób niezależny od protokołu.

PF_INET6

Rodzina Protokół IP w wersji 6

getnameinfo

Getnameinfo funkcja zapewnia niezależny od protokołu rozwiązywania nazw z adresu do ANSI nazwę hosta oraz numer portu do ANSI nazwy usługi.

PF_INET6

Rodzina Protokół IP w wersji 6

getaddrinfo

Getaddrinfo - tłumaczenie adresów i usług sieciowych.

getnameinfo

Funkcja getnameinfo - uzyskuje informacje o nazwie

Getnameinfo () funkcja musi przetłumaczyć adres gniazda do węzła nazwy i lokalizacji usług, z których wszystkie są zdefiniowane w getaddrinfo ().

getpeername

Funkcja getpeername pobiera adres peera, do którego gniazdo jest podłączone.

freeaddrinfo

Freeaddrinfo funkcja uwalnia dane adresowe.

6. Zapis komunikacji

Za pomocą programu Wireshark prześledź komunikację między klientem i serwerem wykorzystującym protokół IPv6.

Wykorzystaj filtr: ipv60x01 graphic

Plik tekstowy z połączenia Klient - Serwer (pochodzi z Wireshark )

No. Time Source Destination Protocol Length Info

1 0.000000 3com_22:b0:83 Broadcast ARP 60 Who has 150.254.41.24? Tell 150.254.41.5

Frame 1: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: 3com_22:b0:83 (00:10:5a:22:b0:83), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

Address Resolution Protocol (request)

No. Time Source Destination Protocol Length Info

2 0.699916 3com_22:b0:83 Broadcast ARP 60 Who has 150.254.41.23? Tell 150.254.41.5

Frame 2: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: 3com_22:b0:83 (00:10:5a:22:b0:83), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

Address Resolution Protocol (request)

No. Time Source Destination Protocol Length Info

3 0.999956 3com_22:b0:83 Broadcast ARP 60 Who has 150.254.41.24? Tell 150.254.41.5

Frame 3: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: 3com_22:b0:83 (00:10:5a:22:b0:83), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

Address Resolution Protocol (request)

No. Time Source Destination Protocol Length Info

4 2.000015 3com_22:b0:83 Broadcast ARP 60 Who has 150.254.41.24? Tell 150.254.41.5

Frame 4: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: 3com_22:b0:83 (00:10:5a:22:b0:83), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

Address Resolution Protocol (request)

No. Time Source Destination Protocol Length Info

5 3.170190 173.194.65.189 150.254.41.21 TLSv1 134 Application Data, Application Data

Frame 5: 134 bytes on wire (1072 bits), 134 bytes captured (1072 bits)

Ethernet II, Src: 3com_22:b0:83 (00:10:5a:22:b0:83), Dst: FujitsuT_50:b5:2a (00:19:99:50:b5:2a)

Internet Protocol Version 4, Src: 173.194.65.189 (173.194.65.189), Dst: 150.254.41.21 (150.254.41.21)

Transmission Control Protocol, Src Port: https (443), Dst Port: amt-esd-prot (1082), Seq: 1, Ack: 1, Len: 80

Secure Sockets Layer

No. Time Source Destination Protocol Length Info

6 3.303535 150.254.41.21 173.194.65.189 TCP 54 amt-esd-prot > https [ACK] Seq=1 Ack=81 Win=32431 Len=0

Frame 6: 54 bytes on wire (432 bits), 54 bytes captured (432 bits)

Ethernet II, Src: FujitsuT_50:b5:2a (00:19:99:50:b5:2a), Dst: IntelCor_4e:39:92 (00:1b:21:4e:39:92)

Internet Protocol Version 4, Src: 150.254.41.21 (150.254.41.21), Dst: 173.194.65.189 (173.194.65.189)

Transmission Control Protocol, Src Port: amt-esd-prot (1082), Dst Port: https (443), Seq: 1, Ack: 81, Len: 0

No. Time Source Destination Protocol Length Info

7 3.745776 IntelCor_4e:39:92 Broadcast ARP 60 Who has 150.254.41.19? Tell 150.254.41.1

Frame 7: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: IntelCor_4e:39:92 (00:1b:21:4e:39:92), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

Address Resolution Protocol (request)

No. Time Source Destination Protocol Length Info

8 4.746082 IntelCor_4e:39:92 Broadcast ARP 60 Who has 150.254.41.19? Tell 150.254.41.1

Frame 8: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: IntelCor_4e:39:92 (00:1b:21:4e:39:92), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

Address Resolution Protocol (request)

No. Time Source Destination Protocol Length Info

9 5.746153 IntelCor_4e:39:92 Broadcast ARP 60 Who has 150.254.41.19? Tell 150.254.41.1

Frame 9: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: IntelCor_4e:39:92 (00:1b:21:4e:39:92), Dst: Broadcast (ff:ff:ff:ff:ff:ff)

Address Resolution Protocol (request)

No. Time Source Destination Protocol Length Info

10 8.180257 173.194.65.189 150.254.41.21 TLSv1 135 Application Data, Application Data

Frame 10: 135 bytes on wire (1080 bits), 135 bytes captured (1080 bits)

Ethernet II, Src: 3com_22:b0:83 (00:10:5a:22:b0:83), Dst: FujitsuT_50:b5:2a (00:19:99:50:b5:2a)

Internet Protocol Version 4, Src: 173.194.65.189 (173.194.65.189), Dst: 150.254.41.21 (150.254.41.21)

Transmission Control Protocol, Src Port: https (443), Dst Port: amt-esd-prot (1082), Seq: 81, Ack: 1, Len: 81

Secure Sockets Layer

No. Time Source Destination Protocol Length Info

11 8.333943 150.254.41.21 173.194.65.189 TCP 54 amt-esd-prot > https [ACK] Seq=1 Ack=162 Win=32391 Len=0

Frame 11: 54 bytes on wire (432 bits), 54 bytes captured (432 bits)

Ethernet II, Src: FujitsuT_50:b5:2a (00:19:99:50:b5:2a), Dst: IntelCor_4e:39:92 (00:1b:21:4e:39:92)

Internet Protocol Version 4, Src: 150.254.41.21 (150.254.41.21), Dst: 173.194.65.189 (173.194.65.189)

Transmission Control Protocol, Src Port: amt-esd-prot (1082), Dst Port: https (443), Seq: 1, Ack: 162, Len: 0

No. Time Source Destination Protocol Length Info

12 9.167383 150.254.41.21 173.194.65.189 TCP 1484 [TCP segment of a reassembled PDU]

Frame 12: 1484 bytes on wire (11872 bits), 1484 bytes captured (11872 bits)

Ethernet II, Src: FujitsuT_50:b5:2a (00:19:99:50:b5:2a), Dst: IntelCor_4e:39:92 (00:1b:21:4e:39:92)

Internet Protocol Version 4, Src: 150.254.41.21 (150.254.41.21), Dst: 173.194.65.189 (173.194.65.189)

Transmission Control Protocol, Src Port: amt-esd-prot (1082), Dst Port: https (443), Seq: 1, Ack: 162, Len: 1430

No. Time Source Destination Protocol Length Info

13 9.167403 150.254.41.21 173.194.65.189 TLSv1 687 Application Data

Frame 13: 687 bytes on wire (5496 bits), 687 bytes captured (5496 bits)

Ethernet II, Src: FujitsuT_50:b5:2a (00:19:99:50:b5:2a), Dst: IntelCor_4e:39:92 (00:1b:21:4e:39:92)

Internet Protocol Version 4, Src: 150.254.41.21 (150.254.41.21), Dst: 173.194.65.189 (173.194.65.189)

Transmission Control Protocol, Src Port: amt-esd-prot (1082), Dst Port: https (443), Seq: 1431, Ack: 162, Len: 633

[2 Reassembled TCP Segments (2063 bytes): #12(1430), #13(633)]

Secure Sockets Layer

No. Time Source Destination Protocol Length Info

14 9.201500 173.194.65.189 150.254.41.21 TCP 60 https > amt-esd-prot [ACK] Seq=162 Ack=2064 Win=1312 Len=0

Frame 14: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)

Ethernet II, Src: 3com_22:b0:83 (00:10:5a:22:b0:83), Dst: FujitsuT_50:b5:2a (00:19:99:50:b5:2a)

Internet Protocol Version 4, Src: 173.194.65.189 (173.194.65.189), Dst: 150.254.41.21 (150.254.41.21)

Transmission Control Protocol, Src Port: https (443), Dst Port: amt-esd-prot (1082), Seq: 162, Ack: 2064, Len: 0

Ćwiczenie 6

Sieci WiFi, Aplikacje sieciowe na urządzenia mobilne

Ćwiczenie 7

Symulator sieciowy ns-2

Dodatki: Polecenia

ipconfig

SPOSÓB UŻYCIA:

ipconfig [/? | /all | /renew [karta] | /release [karta] |

/flushdns | /displaydns | /registerdns |

/showclassid karta |

/setclassid karta [identyfikator_klasy] ]

gdzie

karta Nazwa połączenia

(dozwolone symbole zastępcze * i ?, zobacz przykłady)

Opcje:

/? Wyświetla ten komunikat pomocy.

/all Wyświetla pełne informacje o konfiguracji.

/release Zwalnia adres IP dla określonej karty.

/renew Odnawia adres IP dla określonej karty.

/flushdns Czyści bufor programu rozpoznającego nazwy DNS.

/registerdns Odświeża wszystkie dzierżawy DHCP i ponownie rejestruje nazwy DNS.

/displaydns Wyświetla zawartość buforu programu rozpoznającego nazwy DNS.

/showclassid Wyświetla wszystkie identyfikatory klas DHCP dozwolone dla karty.

/setclassid Modyfikuje identyfikator klasy DHCP.

Zachowanie domyślne to wyświetlanie tylko adresu IP, maski podsieci i bramy domyślnej dla każdej karty związanej z protokołem TCP/IP.

Jeśli dla przełączników Release i Renew nie zostanie określona nazwa karty,

zwolnieniu lub odnowieniu ulegają dzierżawy adresów IP dla wszystkich kart

związanych z protokołem TCP/IP.

Jeśli dla przełącznika Setclassid nie zostanie określony parametr identyfikator_klasy, to identyfikator_klasy jest usuwany.

Przykłady:

> ipconfig ... Pokazuje informacje.

> ipconfig /all ... Pokazuje informacje szczegółowe.

> ipconfig /renew ... Odnawia wszystkie karty.

> ipconfig /renew EL* ... Odnawia każde połączenie o nazwie

zaczynającej się od EL

> ipconfig /release *lok* ... Zwalnia wszystkie pasujące połączenia,

np. "Połączenie lokalne 1" lub

"Połączenie lokalne 2"

route

Obsługuje sieciowe tabele routingu.

ROUTE [-f] [-p] [polecenie [cel]

[MASK maska_sieci] [brama] [METRIC metryka] [IF interfejs]

-f Usuwa z tabel routingu wszystkie wpisy bram. Jeśli

użyte w połączeniu z jednym poleceń, czyści tabele

przed jego wykonaniem.

-p Jeśli użyte z poleceniem ADD, trasa pozostaje trwała

przy kolejnych uruchomieniach systemu. Domyślnie trasy

nie są zachowywane przy ponownym uruchomieniu systemu.

Ignorowane dla wszystkich pozostałych poleceń, które

zawsze mają wpływ na odpowiednie trasy trwałe. Opcja

ta nie jest obsługiwana w systemie Windows 95.

polecenie Jedno z następujących:

PRINT Drukuje trasę

ADD Dodaje trasę

DELETE Usuwa trasę

CHANGE Modyfikuje istniejącą trasę

cel Określa hosta docelowego.

MASK Wskazuje, że następny parametr to wartość maski sieci.

maska_sieci Określa wartość maski podsieci dla tego wpisu trasy.

Jeśli maska_sieci nie zostanie podana, to jest stosowana

domyślna 255.255.255.255.

brama Określa bramę.

interfejs Numer interfejsu dla określonej trasy.

METRIC Określa metrykę, tj. koszt dotarcia do celu.

Wszystkie symboliczne nazwy używane dla miejsca docelowego są wyszukiwane

w pliku bazy danych sieci, NETWORKS. Symboliczne nazwy bram są wyszukiwane

w pliku bazy danych hostów, HOSTS.

Jeśli poleceniem jest PRINT lub DELETE, to cel i bramę można określić za

pomocą symbolu wieloznacznego, (symbolem wieloznacznym jest tu gwiazdka '*'),

można też pominąć argument 'brama'.

Jeśli 'cel' zawiera * lub ?, jest traktowany jako wzorzec i są drukowane

zgodne trasy docelowe. Gwiazdka '*' odpowiada dowolnemu ciągowi znaków,

a '?' - jednemu znakowi. Przykłady: 157.*.1, 157.*, 127.*, *224*.

Uwagi diagnostyczne:

Nieprawidłowy parametr MASK generuje błąd. Gdy np. (DEST i MASK) != DEST.

Przykład> route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1

Nie można dodać trasy: Podany parametr maski jest nieprawidłowy.

(Cel i Maska) != Cel.

Przykłady:

> route PRINT

> route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2

cel^ ^maska ^brama metryka^ ^

Interfejs^

Jeśli interfejs (IF) nie zostanie określony, to jest podejmowana

próba znalezienia najlepszego interfejsu dla bramy.

> route PRINT

> route PRINT 157* .... Drukuje tylko zgodne z wzorcem 157*

> route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2

CHANGE służy do modyfikowania tylko bramy i/lub metryki.

> route PRINT

> route DELETE 157.0.0.0

> route PRINT

arp

Wyświetla i modyfikuje tabelę translacji adresów IP do adresów

fizycznych używanych przez protokół rozróżniania adresów (ARP).

ARP -s inet_addr eth_addr [if_addr]

ARP -d inet_addr [if_addr]

ARP -a [inet_addr] [-N if_addr]

-a Wyświetla bieżące wpisy protokołu ARP przez odpytywanie

bieżących danych protokołu. Jeżeli inet_addr jest

określony, to wyświetlany jest adres IP i fizyczny dla

określonego komputera. Jeżeli więcej niż jeden interfejs

sieciowy korzysta z protokołu ARP, to wyświetlane są wpisy dla

każdej tabeli protokołu ARP.

-g To samo co -a.

inet_addr Określa adres internetowy.

-N if_addr Wyświetla wpisy protokołu ARP dla interfejsu sieciowego

określonego przez if_addr.

-d Usuwa hosta określonego przez inet_addr. W inet_addr można

użyć symbolu wieloznacznego * do usunięcia wszystkich hostów.

-s Dodaje hosta i kojarzy adres internetowy inet_addr

z fizycznym adresem internetowym eth_addr. Adres

fizyczny jest reprezentowany przez 6 szesnastkowych

bajtów oddzielonych znakami łącznika. Wpis dokonywany

jest na stałe.

eth_addr Określa adres fizyczny.

if_addr Jeżeli jest określony, to wskazuje adres interfejsu, którego

tabela translacji powinna zostać zmieniona.

Jeżeli nie jest określony, zostanie użyty pierwszy

odpowiadający interfejs.

Przykłady:

> arp -s 157.55.85.212 00-aa-00-62-c6-09 .... Dodaje statyczny wpis.

> arp -a .... Wyświetla tabelę arp.

ping

Sposób użycia: ping [-t] [-a] [-n liczba] [-l rozmiar] [-f] [-i TTL] [-v TOS]

[-r liczba] [-s liczba] [[-j lista_hostów] | [-k lista_hostów]]

[-w limit_czasu] nazwa_celu

Opcje:

-t Odpytuje określonego hosta do czasu zatrzymania.

Aby przejrzeć statystyki i kontynuować,

naciśnij klawisze Ctrl+Break.

Aby zakończyć, naciśnij klawisze Ctrl+C.

-a Tłumacz adresy na nazwy hostów.

-n liczba Liczba wysyłanych powtórzeń żądania.

-l rozmiar Rozmiar buforu transmisji.

-f Ustaw w pakiecie flagę "Nie fragmentuj".

-i TTL Czas wygaśnięcia.

-v TOS Typ usługi.

-r liczba Rejestruj trasę dla przeskoków.

-s liczba Sygnatura czasowa dla przeskoków.

-j lista_hostów Swobodna trasa źródłowa wg listy lista_hostów.

-k lista_hostów Ściśle określona trasa źródłowa wg listy lista_hostów.

-w limit_czasu Limit czasu oczekiwania na odpowiedź (w milisekundach).

tracert

Sposób użycia: tracert [-d] [-h maks_przes] [-j lista_hostów] [-w limit_czasu] cel

Opcje:

-d Nie rozpoznawaj adresów jako nazw hostów.

-h maks_przes Maksymalna liczba przeskoków w poszukiwaniu celu.

-j lista_hostów Swobodna trasa źródłowa według listy lista_hostów.

-w limit_czasu Limit czasu oczekiwania na odpowiedź w milisekundach.

nslookup

nslookup

> help

Polecenia: (identyfikatory są podane wielkimi literami, [ ] oznacza

parametr opcjonalny)

NAZWA - drukuje informacje o hoście/domenie NAZWA używając

serwera domyślnego

NAZWA1 NAZWA2 - jak powyżej, lecz NAZWA2 oznacza serwer

help or ? - drukuje informacje o najczęściej używanych poleceniach

set OPCJA - ustawia opcję

all - drukuje opcje, informacje o bieżącym serwerze i hoście

[no]debug - drukuje informacje debugera

[no]d2 - drukuje szczegółowe informacje debugera

[no]defname - dołącza nazwę domeny do każdej kwerendy

[no]recurse - prosi o rekursyjną odpowiedź na kwerendę

[no]search - używa listy przeszukiwania domen

[no]vc - zawsze używa obwodu wirtualnego

domain=NAZWA - ustawia domyślną nazwę domeny na NAZWA

srchlist=N1[/N2/.../N6]

- ustawia domenę na N1, a listę przeszukiwania na N1,N2 itd.

root=NAZWA - ustawia serwer główny na NAZWA

retry=X - ustawia liczbę ponawianych prób na X

timeout=X - ustawia początkowy limit czasu na X sekund

type=X - ustawia typ kwerendy (np. A, ANY, CNAME, MX, NS, PTR, SOA, SRV)

querytype=X - identyczne znaczenie, jak type

class=X - ustawia klasę zapytania (np. IN (Internet), ANY)

[no]msxfr - używa szybkiego transferu strefy MS

ixfrver=X - bieżąca wersja do użycia w żądaniu transferu IXFR

server NAZWA - ustawia domyślny serwer na NAZWA, używając bieżącego

serwera domyślnego

lserver NAZWA - ustawia domyślny serwer na NAZWA, używając serwera

początkowego

finger [UŻYTKOWNIK]

- uzyskuje informacje o UŻYTKOWNIKU opcjonalnym z bieżącego

hosta domyślnego

root - ustawia bieżący serwer domy_lny jako główny

ls [opt] DOMENA [> PLIK]

- wyświetla adresy w DOMENIE (opcjonalne: kieruje wyniki do PLIKU)

-a - wyświetla kanoniczne nazwy i aliasy

-d - wyświetla wszystkie rekordy

-t TYP - wyświetla rekordy określonego typu (np. A, CNAME, MX, NS, PTR itd.)

view PLIK - sortuje plik wynikowy polecenia ls i wyświetla go używając pg

exit - kończy pracę programu

> exit

netstat

Wyświetla statystykę protokołu i bieżące połączenia sieciowe TCP/IP.

NETSTAT [-a] [-b] [-e] [-n] [-o] [-p protokół] [-r] [-s] [-v] [interwał]

-a Wyświetla wszystkie połączenia i porty nasłuchiwania.

-b Wyświetla plik wykonywalny zaangażowany w tworzenie każdego

połączenia lub portu nasłuchiwania. W niektórych wypadkach

dobrze znane pliki wykonywalne obsługują wiele niezależnych,

składników i wtedy wyświetlona zostanie sekwencja składników

zaangażowanych w tworzenie połączenia lub portu nasłuchiwania.

W tym przypadku nazwa pliku wykonywalnego jest umieszczona

w nawiasach [] u dołu, a u góry jest składnik wywoływany.

Sekwencja kończy się na protokole TCP/IP. Należy zauważyć, że

wykonanie tej opcji może zająć dużo czasu i nie powiedzie się,

jeśli nie masz wystarczających uprawnień.

-e Wyświetla statystykę sieci Ethernet. Ta opcja może być używana

razem z opcją -s.

-n Wyświetla adresy i numery portów w postaci liczbowej.

-o Wyświetla dla każdego połączenia skojarzony z nim

identyfikator procesu będącego jego właścicielem.

-p protokół Wyświetla połączenia dla określonego protokołu; może to być

protokół TCP, UDP, TCPv6 lub UDPv6. Jeżeli ta opcja zostanie

użyta razem z opcją -s do wyświetlenia statystyki wybranego

protokołu, protokół może mieć dowolną wartość z następujących:

IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP lub UDPv6.

-r Wyświetla tabelę routingu.

-s Wyświetla statystykę wybranego protokołu. Domyślnie jest to

statystyka protokołów IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP

i UDPv6; do określenia jej podzbioru można użyć opcji -p.

-v Jeżeli ta opcja zostanie użyta razem z opcją -b, zostanie

wyświetlona sekwencja składników zaangażowanych w tworzenie

połączenia lub portu nasłuchiwania dla wszystkich plików

wykonywalnych.

interwał Wyświetla wybraną statystykę, odczekując zadaną liczbę sekund

pomiędzy każdym wyświetleniem. Naciśnij klawisze CTRL+C, aby

przerwać wyświetlanie statystyki. Jeżeli ta zmienna nie

zostanie określona, program netstat wydrukuje informacje

o aktualnej konfiguracji jeden raz.

Literatura

http://wazniak.mimuw.edu.pl/index.php?title=Sieci_komputerowe

http://sourceforge.net/projects/xming/

http://zsk.wsti.pl/publikacje/iptables_przystepnie.htm



Wyszukiwarka

Podobne podstrony:
MSI-program-stacjonarne-15h-2011, logistyka, semestr IV, sieci neuronowe w log (metody sztucznej int
Sprawko Packet Tracer Damian Sulej, Sieci Komputerowe
Liczniki - sprawko, Elektrotechnika AGH, Semestr IV letni 2013-2014, Podstawy Elektroniki, Laborator
Sprawko 1, Biotechnologia POLSL, Semestr IV, MBwOŚ, Laboratorium, Sprawozdana
sprawkoz dzwięku, m.szpaner, Semestr IV, Fizyka, Sprawozdania Fizyka
sprawko kluczny (1), AGH, Semestr IV, PKM[Łukasik], Laboratoria, PKM Laboratorium
Sieci TEST z foto, Politechnika, Semestr IV, sieci bezprzewodowe, Sieci bezprzewodowe W, PYTANIA
Polecenie, logistyka, semestr IV, sieci neuronowe w log (metody sztucznej inteligencji)
plastiki sprawko 2, Materiały polibuda, Semestr IV, Przetwórstwo tworzyw sztucznych
Sprawko swb, WAT, semestr IV, Systemy wbudowane
SIZ Sprawko, PWR, Zarządzanie, SEMESTR IV, Metody badania środowiska SIZ
Sprawko Packet Tracer Marcin Szczepaniak, Sieci Komputerowe
MSI-program-stacjonarne-15h-2011, logistyka, semestr IV, sieci neuronowe w log (metody sztucznej int
sieci costam, Materiały, IV Semestr, Sieci komputerowe, EGZAMIN, Egz sieci 2, Egzamin, sieci rozne b
ciąga, Materiały, IV Semestr, Sieci komputerowe, EGZAMIN
Sieci zagadnienia, Materiały, IV Semestr, Sieci komputerowe, EGZAMIN, Egz sieci 2, Egzamin
SieciZagadnienia(1), Materiały, IV Semestr, Sieci komputerowe, EGZAMIN, Egz sieci 2, Egzamin, sieci
Sieci 1, Materiały, IV Semestr, Sieci komputerowe, EGZAMIN

więcej podobnych podstron