This shows you the differences between two versions of the page.
rl:labs:09:contents:03 [2014/12/18 13:11] razvan.deaconescu [03. [10p] Format de pachete TCP la translatare] |
rl:labs:09:contents:03 [2023/11/05 13:06] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 03. [10p] Format de pachete TCP la translatare ==== | + | ==== 03. [10p] Accesare serviciu web folosind wget ==== |
- | Dorim să urmărim conținutul pachetelor TCP înainte și după translatarea de adrese. În plus față de exercițiul de mai sus, vrem să urmărim și porturile. Pentru aceasta vom genera pachete TCP (HTTP) folosind ''wget'' de pe stația ''red'' și vom captura pachetele folosind ''tcpdump'' pe stația ''host''. | + | Sunt situații în care: |
+ | * vrem doar să descărcăm o resursă, nu să accesăm o pagină web și să o parcurgem; | ||
+ | * vrem să testăm serviciul web; | ||
+ | * nu avem acces la o interfață grafică (pe un server sau pe o mașină virtuală) pentru accesarea web; | ||
+ | * vrem să automatizăm, într-un script, procesul de acces al unor resurse în web. | ||
- | Pe stația ''host'' capturați pe toate interfețele pachetele HTTP care au ca adresă destinație numele ''www.upb.ro''. | + | În aceste situații, este util să folosim un client web în linie de comandă. Astfel de clienți web în linie de comandă sunt ''wget'' sau ''curl''. În general aceste utilitare sunt folosite pentru descărcarea de fișiere sau alte resurse disponibile în web. |
- | <note tip> | + | Pentru a descărca fișierul HTML accesat anterior (la [[:rl:labs:09:contents:02]]) executați, pe stația ''fep.grid.pub.ro'', respectiv pe stația ''host'' (urmăriți **promptul** pentru a determina stația), comenzile de mai jos (''<adresa-ip-mv>'' o puteți obține din dashboard-ul OpenStack):<code bash> |
- | Va trebui să folosiți argumentele ''ip dst host www.upb.ro'' și ''tcp dst port 80'' la ''tcpdump''. Legați argumentele prin șirul ''and''. Urmăriți și [[http://linux-circles.blogspot.ro/2012/11/how-to-capture-packets-with-tcpdump.html|exemplele de aici]]. | + | [mihai.carabas@fep-62-2 ~]$ wget http://<adresa-ip-mv>:8080 |
+ | --2013-11-26 18:20:10-- http://<adresa-ip-mv>:8080/ | ||
+ | Connecting to <adresa-ip-mv>:8080... connected. | ||
+ | HTTP request sent, awaiting response... 200 OK | ||
+ | Length: 31 [text/html] | ||
+ | Saving to: ‘index.html’ | ||
- | Folosiți opțiunea ''-n'' a ''tcpdump'' ca să afișați în format rezultatele în format numeric (adresă IP și port). Vă va fi mai ușor să urmăriți pachetele și translatarea de adrese. | + | 100%[======================================>] 31 --.-K/s in 0s |
- | </note> | + | |
- | Pe stația ''red'' folosiți ''wget'' pentru a obține pagina de la ''www.upb.ro''. | + | 2013-11-26 18:20:10 (4.92 MB/s) - ‘index.html’ saved [31/31] |
- | Urmăriți translatarea adresei IP sursă și a portului sursă în cadrul capturii de pachete realizată cu ''tcpdump'' pe ''host''. | + | [mihai.carabas@fep-62-2 ~]$ cat index.html |
+ | <h1>Laborator 10 - pe red</h1> | ||
- | <note important> | + | root@host:~# wget -q http://red/ |
- | O să existe o latență (2-3 secunde) la afișarea pachetelor capturate cu ''tcpdump'' datorată rezolvării DNS. Puteți folosi opțiunea ''-n'' a ''tcpdump'' pentru a dezactivarea rezolvarea DNS și pentru a elimina latența. | + | root@host:~# ls |
+ | PacketTracer5 index.html | ||
+ | root@host:~# cat index.html | ||
+ | <h1>Laborator 10 - pe red</h1> | ||
+ | </code> | ||
+ | Avem același conținut afișat în browser-ul web grafic: șirul //Laboratorul 10 - pe red// formatat //heading 1//. | ||
+ | |||
+ | <note> | ||
+ | În a doua comandă am folosit opțiunea ''-q'' a ''wget'' pentru a dezactiva afișarea informații legate de transfer a ''wget''. Opțiunea trebuie folosită cu grijă. Informațiile de eroare furnizate de ''wget'' sunt utile pentru depanare și sunt dezactivate la folosirea opțiunii ''-q''. | ||
</note> | </note> | ||
- | Observați în cadrul capturii că portul sursă, ales de stația ''red'' este același cu cel folosit în urma translatării de stația ''host''. În general implementările de NAT vor păstra portul în urma translatării. În cazul rar în care acel port este ocupat pe stația ''host'' (posibil datorită unei alte translatării) se va aloca un alt port. | + | La adresa ''http://red/file.dat'' se află un fișier cu dimensiunea de ''1 KB''. Descărcați fișierul pe stația ''host'' folosind ''wget''. Folosiți comanda ''ls -l'' pentru a verifica descărcarea corectă și dimensiunea sa. |
- | Pe stația ''host'' capturați pe toate interfețele pachetele HTTP care au ca adresă numele ''www.upb.ro''; nu contează dacă este sursă sau destinație, capturăm și pachetele de interogare și cele de rășpuns; la fel, portul poate fi sursă sau destinație; folosiți ''ip host'' în loc de ''ip dst host'' și ''tcp port'' în loc de ''tcp dst port''. Pe stația ''red'' folosiți, din nou, ''wget'' pentru a obține pagina de la ''www.upb.ro''. Urmăriți translatarea adresei IP sursă și a portului sursă pentru pachetele de interogare și translatarea adresei IP destinație și a portului destinație pentru pachetele de răspuns. | + | <hidden> |
+ | <solution> | ||
+ | <code bash> | ||
+ | root@host:~# wget -q http://red/file.dat | ||
+ | root@host:~# ls -l file.dat | ||
+ | -rw-r--r-- 1 root root 1024 Nov 26 18:10 file.dat | ||
+ | </code> | ||
+ | </solution> | ||
+ | </hidden> | ||
- | <solution -hidden> | + | Serverul web este configurat să folosească și conexiuni sigure (protocolul HTTPS). Descărcăm fișierul de mai sus (''file.dat'') pe stația ''host'' folosind protocolul HTTPS:<code bash> |
- | Rulăm comanda ''tcpdump'' pe stația ''host'' și comanda ''wget'' pe stația ''red'':<code bash> | + | root@host:~# wget https://red/file.dat |
- | root@host:~# tcpdump -i any ip dst host www.upb.ro and tcp dst port 80 | + | --2013-11-23 17:50:52-- https://red/file.dat |
- | tcpdump: verbose output suppressed, use -v or -vv for full protocol decode | + | Resolving red (red)... 192.168.1.2 |
- | listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes | + | Connecting to red (red)|192.168.1.2|:443... connected. |
- | 16:01:43.895939 IP host.local.55630 > 141.85.166.61.http: Flags [S], seq 2218116970, win 14600, options [mss 1460,sackOK,TS val 25026596 ecr 0,nop,wscale 3], length 0 | + | ERROR: cannot verify red's certificate, issued by `/CN=red': |
- | 16:01:43.899247 IP red.55630 > 141.85.166.61.http: Flags [.], ack 3520002, win 14600, length 0 | + | Self-signed certificate encountered. |
- | 16:01:43.899254 IP host.local.55630 > 141.85.166.61.http: Flags [.], ack 3520002, win 14600, length 0 | + | To connect to red insecurely, use `--no-check-certificate'. |
- | 16:01:43.899809 IP red.55630 > 141.85.166.61.http: Flags [P.], seq 0:110, ack 1, win 14600, length 110 | + | |
- | 16:01:43.899817 IP host.local.55630 > 141.85.166.61.http: Flags [P.], seq 0:110, ack 1, win 14600, length 110 | + | |
- | [...] | + | |
- | + | ||
- | root@red:~# wget www.upb.ro | + | |
- | --2013-11-23 14:03:22-- http://www.upb.ro/ | + | |
- | Resolving www.upb.ro (www.upb.ro)... 141.85.166.61 | + | |
- | Connecting to www.upb.ro (www.upb.ro)|141.85.166.61|:80... connected. | + | |
- | HTTP request sent, awaiting response... 200 OK | + | |
- | [...] | + | |
- | 2013-11-23 14:03:22 (17.3 MB/s) - `index.html' saved [36519] | + | |
</code> | </code> | ||
+ | Observăm că ni s-a afișat o eroare că nu poate fi verificat certificatul. Această verificare poate fi eliminată folosind opțiunea ''%%--%%no-check-certificate'':<code bash> | ||
+ | root@host:~# wget --no-check-certificate https://red/file.dat | ||
+ | --2013-11-23 17:52:02-- https://red/file.dat | ||
+ | Resolving red (red)... 192.168.1.2 | ||
+ | Connecting to red (red)|192.168.1.2|:443... connected. | ||
+ | WARNING: cannot verify red's certificate, issued by `/CN=red': | ||
+ | Self-signed certificate encountered. | ||
+ | HTTP request sent, awaiting response... 200 OK | ||
+ | Length: 1024 (1.0K) | ||
+ | Saving to: `file.dat' | ||
- | Pentru afișarea atât a pachetelor de interogare cât și a celor de răspuns, rulăm comenzile de mai jos:<code bash> | + | 100%[===================================================================================================================>] 1,024 --.-K/s in 0s |
- | root@host:~# tcpdump -i any ip host www.upb.ro and tcp port 80 | + | |
- | [...] | + | |
- | 16:06:25.896565 IP red.55634 > 141.85.166.61.http: Flags [P.], seq 1:111, ack 1, win 14600, length 110 | + | |
- | 16:06:25.896576 IP host.local.55634 > 141.85.166.61.http: Flags [P.], seq 1:111, ack 1, win 14600, length 110 | + | |
- | 16:06:25.896796 IP 141.85.166.61.http > host.local.55634: Flags [.], ack 111, win 65535, length 0 | + | |
- | 16:06:25.896805 IP 141.85.166.61.http > red.55634: Flags [.], ack 111, win 65535, length 0 | + | |
- | [...] | + | |
- | root@red:~# wget www.upb.ro | + | 2013-11-23 17:52:02 (18.2 MB/s) - `file.dat' saved [1024/1024] |
- | --2013-11-23 14:05:36-- http://www.upb.ro/ | + | |
- | Resolving www.upb.ro (www.upb.ro)... 141.85.166.61 | + | |
- | Connecting to www.upb.ro (www.upb.ro)|141.85.166.61|:80... connected. | + | |
- | HTTP request sent, awaiting response... 200 OK | + | |
- | [...] | + | |
- | 2013-11-23 14:05:36 (77.9 MB/s) - `index.html.1' saved [36519] | + | |
</code> | </code> | ||
- | </solution> |