Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:unix:lab_prog_siec [2016/12/15 17:55]
kkutt poprawki w teorii, dodana sekcja z socketami w bashu
pl:dydaktyka:unix:lab_prog_siec [2019/06/27 15:50] (aktualna)
Linia 2: Linia 2:
 ===== DO PRZYGOTOWANIA ===== ===== DO PRZYGOTOWANIA =====
   * Proszę przypomnieć sobie użycie ''​[[http://​home.agh.edu.pl/​~gjn/​dydaktyka/​UGLX/​node11.html#​SECTION000117000000000000000|fork()]]''​   * Proszę przypomnieć sobie użycie ''​[[http://​home.agh.edu.pl/​~gjn/​dydaktyka/​UGLX/​node11.html#​SECTION000117000000000000000|fork()]]''​
-  * Proszę poczytać [[http://​www.linuxpl.org/​LPG/​node81.html|opis podstaw gniazd sieciowych (socketów)]] +  * Proszę poczytać ​opis podstaw gniazd sieciowych (socketów) z [[https://​web.archive.org/​web/​20170405054449/​http://​www.linuxpl.org/​LPG/​node1.html|The Linux Programmer'​s Guide]]. Konkretnie sekcję [[https://​web.archive.org/​web/​20170305021856/​http://​www.linuxpl.org:​80/​LPG/​node81.html|Gniazda sieciowe ​podstawy]] oraz jej podsekcje: "​Podstawowe funkcje",​ "TCP: SOCK_STREAM",​ "​SOCK_DGRAM (UDP)", "​PF_UNIX",​ "​SOCK_RAW i PF_PACKET"​
- +
-<WRAP center round info 60%> +
-Instrukcja poniżej jest w trakcie restrukturyzacjiNatomiast materiały do przygotowania,​ zamieszczone powyżej, nie zmienią się. Można więc już powoli się przygotowywać ​:-)  +
-</​WRAP>​+
  
 ===== WPROWADZENIE ===== ===== WPROWADZENIE =====
Linia 120: Linia 116:
 </​file>​ </​file>​
  
-<file bash netscanner.sh>+<file bash port-scanner.sh>
 #!/bin/bash #!/bin/bash
  
 ### ###
-# Skaner portów (sprawdza które porty są otwarte). Jako argument wywołania podaj adres serwera, który chcesz przeskanować+# Skaner portów (sprawdza które porty są otwarte). 
 +Jako argument wywołania podaj adres serwera, który chcesz przeskanować
 +# np. ./​port-scanner.sh localhost
 ###  ### 
  
Linia 132: Linia 130:
 for ((port=$port_first;​ port<​=$port_last;​ port++)) for ((port=$port_first;​ port<​=$port_last;​ port++))
 do do
-  echo "​Skanowanie portu $port..."​+  ​echo "​Skanowanie portu $port..."​
   timeout 1 bash -c "(echo >/​dev/​tcp/​$host/​$port) >/​dev/​null 2>&​1"​ && echo "$port otwarty!"​   timeout 1 bash -c "(echo >/​dev/​tcp/​$host/​$port) >/​dev/​null 2>&​1"​ && echo "$port otwarty!"​
 done done
Linia 139: Linia 137:
 ==== Programowanie gniazd ==== ==== Programowanie gniazd ====
 Przeglądnąć artykuł: Przeglądnąć artykuł:
-[[http://​beej.us/​guide/​bgnet/output/html/singlepage/​bgnet.html|Beej'​s Guide to Network Programming]]+[[http://​beej.us/​guide/​bgnet/​html/​single/​bgnet.html|Beej'​s Guide to Network Programming]]
  
 Skompilować i przetestować omówione w nim programy, w tym: Skompilować i przetestować omówione w nim programy, w tym:
Linia 151: Linia 149:
  
 ==== gethostbyname ==== ==== gethostbyname ====
-Przeanalizować, skompilować i uruchomić program: +  - Proszę przeanalizować, skompilować i uruchomić program:<​file c gethostbyname-demo.c>
- +
-<code c>+
 #include <​stdio.h>​ #include <​stdio.h>​
 #include <​errno.h>​ #include <​errno.h>​
Linia 198: Linia 194:
      ​return 0;      ​return 0;
 } }
-</code+</file
-  ​Sprawdzić działanie programu dla ''​www.google.pl''​ oraz innych wybranych adresów symbolicznych. +  ​Sprawdzić działanie programu dla ''​<​nowiki>​www.yahoo.com</​nowiki>​''​ oraz innych wybranych adresów symbolicznych. 
-  ​* Do powyższego kodu dopisać instrukcje które szczegółowo sprawdzają typ błędu funkcji ​//gethostbyname// i w zależności od tego wyświetlają odpowiedni komunikat. +  ​- Dopisać instrukcjektóre szczegółowo sprawdzają typ błędu funkcji ​''​gethostbyname'' ​i w zależności od tego wyświetlają odpowiedni komunikat. 
-  ​Zmodyfikować tak program aby wyświetlał wszystkie adresy IP odnoszące się do podanego adresu.+  ​Zmodyfikować tak program aby wyświetlał wszystkie adresy IP odnoszące się do podanego adresu.
  
-==== Komunikator ​====+==== Serwer ​====
 Poniżej przedstawiony jest kod programu //​server.c//​ Poniżej przedstawiony jest kod programu //​server.c//​
-<code c>+<file c server.c>
 /* /*
 ** server.c -- a stream socket server demo ** server.c -- a stream socket server demo
Linia 273: Linia 269:
  }  }
  
- while(1) {  // main accept() loop + sin_size = sizeof their_addr;​ 
- sin_size = sizeof their_addr;​ + if ((new_fd = accept(sockfd,​ (struct sockaddr *)&​their_addr,​ &​sin_size)) == -1) { 
- if ((new_fd = accept(sockfd,​ (struct sockaddr *)&​their_addr,​ &​sin_size)) == -1) { + perror("​accept"​);​
- perror("​accept"​);​ +
- continue;​ +
-+
- printf("​server:​ got connection from %s\n",​inet_ntoa(their_addr.sin_addr));​ +
- if (!fork()) { // this is the child process +
- close(sockfd);​ // child doesn'​t need the listener +
- if (send(new_fd,​ "​Hello,​ world!\n",​ 14, 0) == -1) +
- perror("​send"​);​ +
- close(new_fd);​ +
- exit(0);​ +
-+
- close(new_fd); ​ // parent doesn'​t need this+
  }  }
 + printf("​server:​ got connection from %s\n",​inet_ntoa(their_addr.sin_addr));​
 + if (send(new_fd,​ "​Hello,​ world!\n",​ 14, 0) == -1)
 + perror("​send"​);​
 + sleep(5); // just for observing easily that the server cannot serve a few clients concurrently
 + close(new_fd);​
 +
  return 0;  return 0;
 } }
-</code>+</file> 
 + 
 +=== - Komunikator ===
   * Należy przerobić powyższy program tak aby działał jako server. Łącząc się za pomocą np. programu //telnet// program powinien umożliwiać prowadzenie dialogu jak popularne komunikatory internetowe (np. gg, tlen, itp).   * Należy przerobić powyższy program tak aby działał jako server. Łącząc się za pomocą np. programu //telnet// program powinien umożliwiać prowadzenie dialogu jak popularne komunikatory internetowe (np. gg, tlen, itp).
-  ​* //Podpowiedź// po akceptacji połączenia program powinien utworzyć dwa procesy potomne, jeden do czytania portu, drugi do pisania.+    ​Korzystając z programu telnet można połączyć się z serwerem wpisując: <code sh>$ telnet remotehostname XXX</code> gdzie ''​remotehostname''​ jest nazwą komputera, na którym uruchomiono serwer (''​localhost'',​ jeżeli to ta sama maszyna), a ''​XXX''​ numerem przypisanego do niego portu. 
 +    * Podpowiedźpo akceptacji połączenia program powinien utworzyć dwa procesy potomne, jeden do czytania portu, drugi do pisania.
  
-==== Transfer plików ==== +=== - Eternal vigilance ​== 
-  * Powyższy komunikator może być z łatwością zmodyfikowany aby zamiast tekstu wysyłał plik. +  * Proszę zmodyfikować serwer ​takaby po obsłużeniu ​klienta ​nie kończył działania, ale powracał do oczekiwania na kolejne połączenie.
-  * Zmodyfikować komunikator ​tak aby po nawiązaniu połączenia przez klienta ​rozpoczął wysyłanie pliku. +
-  * Zmodyfikować program //​client.c//​ tak aby był zdolny odebrać i zapisać przesyłany plik. +
- +
-==== Użycie Select ==== +
- +
-Patrz: +
-[[http://​www.lowtek.com/​sockets/​select.html|The World of select()]]+
  
 +=== - Obsługa wielu klientów ===
 +  * Proszę zmodyfikować serwer tak, aby mógł obsługiwać jednocześnie więcej niż jednego klienta.
 +    * Podpowiedź:​ Można użyć funkcji ''​fork()''​ do tworzenia procesów potomnych - każdy proces potomny będzie obsługiwał jednego klienta.
  
  
Linia 311: Linia 300:
   * [[http://​www.kohala.com/​start/​|W. Richard Stevens'​ Home Page]]   * [[http://​www.kohala.com/​start/​|W. Richard Stevens'​ Home Page]]
   * BSD sockets   * BSD sockets
-http://​www.frostbytes.com/​~jimf/​papers/​sockets/​sockets.html +    * http://​www.frostbytes.com/​~jimf/​papers/​sockets/​sockets.html 
-http://​www.lowtek.com/​sockets/​ +    ​* ​http://​www.lowtek.com/​sockets/​ 
-http://​beej.us/​guide/​bgnet/​ +    ​* ​http://​beej.us/​guide/​bgnet/​ 
-http://​www.uwo.ca/​its/​doc/​courses/​notes/​socket/​ +    ​* ​http://​www.uwo.ca/​its/​doc/​courses/​notes/​socket/​ 
-http://​gaia.cs.umass.edu/​ntu_socket/​ +    ​* ​http://​gaia.cs.umass.edu/​ntu_socket/​ 
-http://​www.devdaily.com/​Dir/​Unix/​Socket_Programming/​ +    ​* ​http://​www.devdaily.com/​Dir/​Unix/​Socket_Programming/​ 
-http://​www.unl.csi.cuny.edu/​faqs/​sock-faq/​html/​unix-socket-faq.html +    ​* ​http://​www.unl.csi.cuny.edu/​faqs/​sock-faq/​html/​unix-socket-faq.html 
-http://​www.ibm.com/​developerworks/​linux/​library/​l-sockpit/​+    ​* ​http://​www.ibm.com/​developerworks/​linux/​library/​l-sockpit/​
  
   * OpenSSL   * OpenSSL
-http://​www.ibm.com/​developerworks/​linux/​library/​l-openssl.html +    * http://​www.ibm.com/​developerworks/​linux/​library/​l-openssl.html 
-http://​www.ibm.com/​developerworks/​linux/​library/​l-openssl2.html +    ​* ​http://​www.ibm.com/​developerworks/​linux/​library/​l-openssl2.html 
-http://​www.ibm.com/​developerworks/​linux/​library/​l-openssl3.html +    ​* ​http://​www.ibm.com/​developerworks/​linux/​library/​l-openssl3.html 
-http://​www.ibm.com/​developerworks/​linux/​library/​l-hisock.html+    ​* ​http://​www.ibm.com/​developerworks/​linux/​library/​l-hisock.html
  
   * TCP/IP   * TCP/IP
-http://​userpages.umbc.edu/​~jeehye/​cmsc491b/​lectures/​tcpstate/​sld001.htm +    * http://​userpages.umbc.edu/​~jeehye/​cmsc491b/​lectures/​tcpstate/​sld001.htm 
-http://​www.tcpipguide.com/​free/​ +    ​* ​http://​www.tcpipguide.com/​free/​ 
-http://​www.ipprimer.com/​overview.cfm +    ​* ​http://​www.ipprimer.com/​overview.cfm 
-http://​www.linux-tutorial.info/​modules.php?​name=MContent&​obj=page&​pageid=142+    ​* ​http://​www.linux-tutorial.info/​modules.php?​name=MContent&​obj=page&​pageid=142 
 + 
 +  * Użycie Select 
 +    * [[http://​www.lowtek.com/​sockets/​select.html|The World of select()]]
  
pl/dydaktyka/unix/lab_prog_siec.1481820925.txt.gz · ostatnio zmienione: 2019/06/27 15:55 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0