Ne propunem să analizăm antetul IP al pachetelor ce sunt generate de stațiile red
, green
și blue
și au ca destinație o rețea din Internet. Pentru acest lucru vom folosi utilitarul de captură tcpdump
.
Pe stația red
pornim comanda ping
către 8.8.8.8.
:
root@red:~# ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_req=1 ttl=127 time=42.0 ms [...]
tcpdump
secvența de urmat este:
tcpdump
cu opțiunile aferente într-un terminal, activând astfel captura de pachete. Utilitarul tcpdump
așteaptă acum transmiterea de pachete pe interfețele pe care ascultă.tcpdump
și se urmăresc pachetele capturate.tcpdump
se întrerupe captura de pachete folosind combinația de taste Ctrl+c
.
Pentru a urmări traficul, pe stația host
rulăm comanda
root@host:~# tcpdump -n -i eth0 ip dst host 8.8.8.8 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 12:59:20.976707 IP host > 8.8.8.8: ICMP echo request, id 625, seq 6, length 64 12:59:21.977708 IP host > 8.8.8.8: ICMP echo request, id 625, seq 7, length 64
Observăm că adresa IP sursă este host.local
chiar dacă stația red
este cea care execută comanda ping
și generează pachetele de tip ICMP echo request
.
Pentru a vedea pachetele așa cum sunt generate inițial, rulăm comandă tcpdump
pe interfața veth-red
în loc de eth0
:
root@host:~# tcpdump -n -i veth-red ip dst host 8.8.8.8 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on veth-red, link-type EN10MB (Ethernet), capture size 65535 bytes 13:01:12.557692 IP red > 8.8.8.8: ICMP echo request, id 626, seq 6, length 64 13:01:13.559726 IP red > 8.8.8.8: ICMP echo request, id 626, seq 7, length 64
Observăm că pe interfața veth-red
adresa IP sursă este adresa stației red
, adică așa cum este generat de la început pachetul. Motivul este reprezentat de faptul că pachetele ce intră pe intefața veth-red
sunt capturate înainte de rutare, iar procesul NAT este aplicat după rutare (vezi 01. [15p] Observare porturi deschise pe o stație.
Pentru a vedea modul în care se translatează traficul capturăm traficul pe toate interfețele (cele de interes sunt veth-red
și eth0
)
root@host:~# tcpdump -n -i any ip dst host 8.8.8.8 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes 10:23:07.632412 IP red > 8.8.8.8: ICMP echo request, id 707, seq 237, length 64 10:23:07.632430 IP host > 8.8.8.8: ICMP echo request, id 707, seq 237, length 64 10:23:08.633936 IP red > 8.8.8.8: ICMP echo request, id 707, seq 238, length 64 10:23:08.633954 IP host > 8.8.8.8: ICMP echo request, id 707, seq 238, length 64
În lista de mai sus observăm atât pachetele care sunt captuarate pe interfața veth-red
(generate de stația red
) cât și cele capturate pe interfața eth0
(translatate de stația host
).
Capturați și pachetele de reply, care au ca sursă adresa 8.8.8.8
. Folosiți șirul de argumente ip src host 8.8.8.8
pentru tcpdump
.
Repetați testele de mai sus pentru stația green
.
-n
a utilitarului tcpdump
, opțiune care dezactivează rezolvarea DNS. În exemplele de mai sus, nu am folosit opțiunea -n
a utilitarului tcpdump
pentru a identifica mai ușor numele stațiilor implicate în conversație.