This shows you the differences between two versions of the page.
rl:labs:09:contents:04 [2013/11/26 15:27] razvan.deaconescu created |
rl:labs:09:contents:04 [2024/12/04 17:52] (current) laura.ruse [04. [15p] Descărcare recursivă de resurse web] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 04. [10p] Configurare incorectă a translatării ==== | + | ==== 04. [15p] Descărcare recursivă de resurse web ==== |
- | Comanda folosită mai sus pentru translatare, la [[:rl:labs:09:contents:01]], are neajunsuri pe care le vom identifica mai jos. | + | La adresa ''%%http://red/folder%%'' se află o structură de directoare și fișiere. Pe stația ''host'', descărcați întreaga structură folosind o singură comandă ''wget'' cu parametrul corespunzător. |
- | Pe stația ''red'' executăm comanda ''ping'' către stația ''green'':<code bash> | + | <note tip> |
- | root@red:~# ping -c 2 green | + | Pentru a identifica opțiunea corespunzătoare, căutați în pagina de manual a ''wget'' după șirul ''recursive''. |
- | PING green (192.168.2.2) 56(84) bytes of data. | + | </note> |
- | 64 bytes from green (192.168.2.2): icmp_req=1 ttl=63 time=0.155 ms | + | |
- | 64 bytes from green (192.168.2.2): icmp_req=2 ttl=63 time=0.086 ms | + | |
- | [...] | + | |
- | </code> | + | |
- | Pe stația ''green'' capturăm traficul pe interfața ''eth0'' folosind comanda ''tcpdump'':<code bash> | + | Folosiți utilitarul ''tree'' pentru a lista conținutul directorului descărcat. Este posibil ca pachetul ''tree'' să fie deja instalat pe ''host''. Dacă nu este instalat, atunci puteți folosi următoarea comandă pentru a-l instala: |
- | root@green:~# tcpdump -i eth0 | + | <code bash> |
- | tcpdump: verbose output suppressed, use -v or -vv for full protocol decode | + | root@host:~# apt-get install tree |
- | listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes | + | |
- | 11:18:54.535064 IP host > green: ICMP echo request, id 633, seq 17, length 64 | + | |
- | 11:18:54.535092 IP green > host: ICMP echo reply, id 633, seq 17, length 64 | + | |
- | [...] | + | |
</code> | </code> | ||
- | Observăm că adresa sursă a pachetelor de tip ''ICMP echo request'' este stația ''host'', nu stația ''red''. Acest lucru se întâmplă din cauză că atunci când am activat NAT nu am specificat pentru ce tip de trafic să aplice politica de translatare. Astfel stația ''host'' aplică politica de NAT pentru tot traficul care o tranzitează. Dorim să aplicăm politica doar pentru pachetele ce **ies** în Internet, adică cele ale căror **interfață de ieșire** este interfața ''eth0''. Vom șterge vechea regulă de NAT și vom adăuga o regulă corectă. | + | Când rulați ''tree'' pe directorul descărcat observați prezența mai multor fișiere cu nume de forma ''index.html?C=S;O=D''. Aceste fișiere sunt fișiere de tip directory listing generate de serverul web și nu avem nevoie de ele. Ștergeți structura de directoare pe care tocmai ați descărcat-o pe stația ''host'' și descărcați-o din nou ignorând aceste fișiere. |
- | Pentru ștergerea vechii reguli de NAT rulăm pe stația ''host'' comanda<code bash> | + | <note tip> |
- | root@host:~# iptables -t nat -D POSTROUTING -j MASQUERADE | + | Urmăriți discuția de [[http://stackoverflow.com/questions/273743/using-wget-to-recursively-fetch-a-directory-with-arbitrary-files-in-it|aici]]. Să aveți în vedere și partea din discuția care conține șirul //%%"without the hostname"%%//. |
- | </code> | + | </note> |
- | Verificăm faptul că nu mai există comanda<code bash> | + | |
- | root@host:~# iptables -t nat -L POSTROUTING -n -v | + | Structura de directoare trebuie să fie similară cu:<code> |
- | Chain POSTROUTING (policy ACCEPT 1 packets, 328 bytes) | + | root@host:~# tree folder/ |
- | pkts bytes target prot opt in out source destination | + | folder/ |
+ | ├── embedded | ||
+ | │ ├── Qualcomm | ||
+ | │ │ ├── Krait | ||
+ | │ │ │ └── info.txt | ||
+ | │ │ └── Scorpion | ||
+ | │ │ └── info.txt | ||
+ | │ └── TI | ||
+ | │ ├── OMAP3 | ||
+ | │ │ └── info.txt | ||
+ | │ └── OMAP4 | ||
+ | │ └── info.txt | ||
+ | └── mobile | ||
+ | ├── Apple | ||
+ | │ ├── iPadAir | ||
+ | │ │ └── info.txt | ||
+ | │ └── iPhone5S | ||
+ | │ └── info.txt | ||
+ | |||
+ | ├── Nexus4 | ||
+ | │ └── info.txt | ||
+ | └── Nexus7 | ||
+ | └── info.txt | ||
+ | |||
+ | 14 directories, 8 files | ||
</code> | </code> | ||
- | Adăugăm din nou regula de NAT, dar de data aceasta vom specifica să aplice politica de NAT pachetelor ce ies prin interfața ''eth0'' a stației ''host'':<code bash> | + | <hidden> |
- | root@host:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | + | <solution> |
+ | Pentru descărcarea inițială folosim comanda ''wget'' cu opțiunea ''-r'' apoi rulăm ''tree'':<code bash> | ||
+ | root@host:~# wget -r http://red/folder/ | ||
+ | [...] | ||
+ | root@host:~# tree red/ | ||
+ | [...] | ||
</code> | </code> | ||
- | Verificați că regula a fost inserată:<code bash> | + | Ștergem vechea structură:<code bash> |
- | root@host:~# iptables -t nat -L POSTROUTING -n -v | + | root@host:~# rm -fr folder/ |
- | Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) | + | |
- | pkts bytes target prot opt in out source destination | + | |
- | 0 0 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0 | + | |
</code> | </code> | ||
- | Observăm prezența interfaței ''eth0'' în coloana ''out''. Înainte apărea caracterul ''*'', adică orice interfață. | + | Ca să avem un output mai aranjat, rulăm următoarea comandă ''wget'':<code bash> |
- | + | root@host:~# wget -r -nH -np --reject "index.html*" http://red/folder/ | |
- | Repetați testul de la începutul exercițiului și arătați că pachetele trimise de la ''red'' către ''green'' au adresele IP sursă/destinație nemodificate (nu mai fac trecerea prin NAT), în vreme ce pachetele ce ies în Internet sunt translatate. | + | </code> |
+ | Se vor descărca astfel doar fișierele utile, cele existente în structura de directoare de pe server. | ||
+ | </solution> | ||
+ | </hidden> |