In passato device Ethernet si chiamavano eth0, eth1, ecc, in ordine progressivo di installazione.
Recentemente il nome viene legato alla posizione fisica del device.
Ad esempio:
Il comando “ifconfig ” (ipconfig in Windows) consente di visualizzare o modificare le impostazioni delle interfacce di rete.
Per visualizzare lo stato della prima interfaccia ethernet (eth0)
> ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:D6:82:00 inet addr:172.28.34.101 Bcast:172.28.34.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:30243833 errors:329 dropped:184 overruns:0 frame:0 TX packets:481711 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3331223848 (3.1 GiB) TX bytes:130699625 (124.6 MiB) Interrupt:177 Base address:0x1400
Per configurare l'indirizzo IP della seconda interfaccia ethernet (eth1) :
/sbin/ifconfig eth1 160.78.251.7 netmask 255.255.255.0 up
La configurazione allo startup e’ letta da:
/etc/sysconfig/network-script/ifcfg-eth0 (CentOS) /etc/netplan/01-netcfg.yaml (Ubuntu)
Volendo configurare una seconda interfaccia virtuale sulla stessa interfaccia fisica:
/sbin/ifconfig eth0:0 172.28.34.3 netmask 255.255.255.0 up
Per eliminarla:
ifconfig eth0:0 down
Per modificare un parametro:
/sbin/ifconfig eth1 mtu 1412 /sbin/ifconfig eth1 hw ether 00:0C:29:0E:46:07 #cambia il MAC di eth1 e di tutte le sue interfacce virtuali (eth1:0, ..)
/sbin/ifconfig eth0 |grep "inet6" inet6 addr: 2001:760:2e04:1033::a0/64 Scope:Global inet6 addr: fe80::20c:29ff:fe44:f114/64 Scope:Link
/sbin/ifconfig eth0 inet6 del 2001:760:2e04:1033::a0/64 /sbin/ifconfig eth0 inet6 add 2001:760:2e04:1033::a0/64
Il comando “route” consente di visualizzare o modificare le entry della tabella di routing di un host terminale (Linux o Windows).
netlabX> route Destination Gateway Genmask Flags Metric Ref Use Iface 172.28.34.0 * 255.255.255.0 U 0 0 0 eth0 169.254.0.0 * 255.255.0.0 U 0 0 0 eth0 default 172.28.34.254 0.0.0.0 UG 0 0 0 eth0
Le Entry vengono inserite nelle seguenti modalità:
Gli indirizzi IP appartenenti ad una sottorete aggiungono automaticamente le sottoreti con accesso diretto.
DEFAULT: L’impostazione di “Default” verrà utilizzata quando non viene trovata una entry esplicita per una determinata sottorete. Per impostare il “default”
route add default gw 160.78.124.254
/sbin/route -A inet6 /sbin/route -A inet6 add 2000::/3 gw 2001:0db8:0:f101::1 # add default gateway
I neighbour host, nel mondo IPv4, si cercano con il protocollo ARP (Address Resolution Protocol): si tratta di inviare un pacchetto IP, opportunamente codificato, con l'indirizzo IP destinatario quello dell'host che vorremmo contattare, mentre come MAC address destinazione il valore di broadcast (FF:FF:FF:FF:FF:FF).
Il comando arp consente di visualizzare e configurare le entry della tabella degli host vicini (neighbour).
man arp arp -a ping <host> arp -a
I comandi ifconfig, arp e route e netstat sono ora deprecati e sostituiti dal comando ip: deprecated linux networking commands and their replacement
ip link # visualizza la configurazione del device (limitandosi a MACaddress e flag) 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eno16777984: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000 link/ether 00:0c:29:df:d4:21 brd ff:ff:ff:ff:ff:ff 3: eno33557248: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000 link/ether 00:0c:29:df:d4:2b brd ff:ff:ff:ff:ff:ff sudo ip link set ens192 mtu 1412 # modifica il MTU sudo ip link set ens192 address XX:XX:XX:XX:XX:XX # modifica il MAC address
ip addr # visualizza anche gli indirizzi ip associati ai device sudo ip addr add 192.168.52.1/24 dev ens192:52 # aggiunge un secondo indirizzo IP all'interfaccia ens192 sudo ip addr del 192.168.52.1/24 # elimina il secondo indirizzo IP all'interfaccia ens192 sudo ip -6 addr add FEC0:19::1/64 dev ens224 # aggiunge un indirizzo IPv6 all'interfaccia ens224
ip route # visualizza tabelle di routing ip -6 route # visualizza tabelle di routing IPv6 sudo ip route add 192.168.2.0/24 via 192.168.0.105 dev ens192 # Aggiunge una route statica sudo ip route del 192.168.2.0/24 # Aggiunge una route statica sudo ip -6 route add FEC0:15::/64 via FEC0::101 dev ens192
ip neigh # visualizza l'elenco dei vicini noti (protocollo ARP)
ip -6 neigh flush all # cancella la cache dei neighbours ping -6 FEC0::105 # contatta un host ip -6 neigh # consulta la cache
ARP non esiste in IPv6; e' sostituito da Neighbor Discovery Protocol basato su ICMPv6.
Per rendere permanente un indirizzo IP secondario occorre creare il file di startup:
Esempio CentOS (/etc/sysconfig/network-scripts/ifcfg-ens224:52 )
# Nome Cognome DEVICE=ens224:52 BOOTPROTO=static ONBOOT=yes BROADCAST=192.168.52.255 IPADDR=192.168.52.1 NETMASK=255.255.255.0 NETWORK=192.168.52.0 # #IPV6INIT=yes #IPV6ADDR=FEC0:101::1 #IPV6ADDR_SECONDARIES="FEC0:2::1/64 FEC0:3::1/64" #IPV6_DEFAULTGW=FEC0::1
Le route statiche possono essere impostate attraverso un file di startup.
Esempi CentOS (/etc/sysconfig/network-scripts/route-ens192)
192.168.1.0/24 via 192.168.0.101 # Nome Cognome FEC0:102::/64 via FEC0::102 # Nome Cognome
Per attivare le configurazioni occorre riavviare il servizio di rete:
sudo systemctl restart network
Consente di visualizzare le porte del livello di trasporto in ascolto e lo stato delle connessioni aperte.
man netstat
netstat # visualizza Connessioni attive e Socket attivi
netstat -r # visualizza le Route impostate netstat -i # visualizza le Interfacce netstat -s # visualizza le Statistiche netstat -l # visualizza le connessioni in Listening (ascolto) netstat -p # visualizza per ogni socket il PID del processo che lo sta utilizzando
netstat -tulpn # tcp, udp, listen, program, numeric
In ambiente Windows: TCPview
ss è un'altra utility per ottenete informazione sui socket:
ss ss -lt #listening TCP socket
Se il nostro host accede ad internet in modo indiretto (via NAT o VPN) possiamo visualizzare l'indirizzo IP acquisto con il comando:
curl ifconfig.me
Siti Web con interfaccia grafica d alcuni tools di rete:
http://ping.eu/ - http://en.dnstools.ch/ - https://iplocation.com/
Traccia tutti i router attraversati per raggiungere una determinata destinazione e ne misura il round-trip time. Invia una sequenza di messaggi (normalmente udp, o icmp con l'opzione -I) al destinatario con un TTL crescente a partire da 1. Quando un router riscontra che il TTL e' scaduto scarta il pacchetto e invia un messaggio di servizio ( ICMP) al mittente. Su alcuni router la risposta ICMP potrebbe essere disabilitata.
Nota: Su Windows il comando e' tracert.
> traceroute www.llnl.gov traceroute to www.llnl.gov (198.128.246.160), 30 hops max, 40 byte packets 1 prcis1.pr.infn.it (192.135.11.254) 22.400 ms 22.380 ms 22.357 ms 2 160.78.254.254 (160.78.254.254) 1.025 ms 1.733 ms 0.763 ms 3 160.78.253.254 (160.78.253.254) 22.230 ms 22.218 ms 22.205 ms 4 ru-unipr-rx2-bo1.bo1.garr.net (193.204.219.93) 22.191 ms 22.169 ms 22.162 ms 5 rx1-bo1-rx1-mi1-l3.mi1.garr.net (90.147.94.129) 22.186 ms rx1-bo1-r-bo1.bo1.garr.net (90.147.80.33) 22.129 ms rx1-bo1-rx1-mi1.mi1.garr.net (90.147.80.109) 22.156 ms 6 r-mi1-r-bo1-l4.bo1.garr.net (90.147.80.5) 28.196 ms rx1-mi1-r-mi1.mi1.garr.net (90.147.80.93) 21.448 ms 21.294 ms 7 garr.rt1.mil.it.geant.net (62.40.124.129) 26.184 ms 22.710 ms garr-lb3.rt1.mil.it.geant.net (62.40.124.181) 69.854 ms 8 as0.rt1.gen.ch.geant2.net (62.40.112.33) 19.082 ms 19.048 ms 19.050 ms 9 so-4-0-0.rt1.fra.de.geant2.net (62.40.112.161) 27.113 ms 27.112 ms 27.099 ms 10 esnet-wash-gw.rt1.fra.de.geant.net (62.40.125.78) 128.971 ms 128.968 ms 127.316 ms 11 atlasdn1-ip-washsdn2.es.net (134.55.221.5) 134.021 ms * atlasdn1-ip-washsdn2.es.net (134.55.221.5) 133.994 ms
ping -c 1 -R www.mit.edu (-R = Record Route, ogni router aggiunge il proprio indirizzo nell'header) 64 bytes from WWW.MIT.EDU (18.7.22.83): icmp_seq=0 ttl=240 time=184 ms RR: didattica.sci.unipr.it (160.78.124.2) 160.78.254.251 rt1-bo1-ru-unipr.bo1.garr.net (193.206.128.94) rt1.bo1.garr.net (193.206.128.252) rt1.mi1.garr.net (193.206.129.3) lo0.rt1.mil.it.geant2.net (62.40.114.25) so-6-2-0.rt1.gen.ch.geant2.net (62.40.112.21) abilene-wash.rt1.fra.de.geant2.net (62.40.125.17) so-0-0-0.0.rtr.wash.net.internet2.edu (64.57.28.11)
Il comando funziona anche il IPv6, aggiungendo l'opzione 6. Esempio:
bastion ~]# traceroute -6 -i eth1 lpr1-ip6 traceroute to lpr1-ip6 (fe80::20c:29ff:fed3:8863), 30 hops max, 40 byte packets 1 lpr1-ip6 (fe80::20c:29ff:fed3:8863%eth1) 1.126 ms 1.121 ms 1.109 ms
dig e nslookup sono due tools per interrogare i server DNS.
man dig dig www.unipr.it dig +short www.unipr.it man nslookup
Con l'opzione +trace di dig la query viene fatta completamente in modo iterativo dal client, che contatta direttamente tutti i server DNS coinvolti nella query. Ovviamente questa opzione funziona solo se in client ha un indirizzo pubblico.
dig +trace www.google.com
Normalmente viene contattato il server DNS specificato nel file /etc/resolv.conf; per contattare un server diverso si usa l'opzione @SERVERNAME
dig @ns1.google.com. www.google.com
La risoluzione inversa partendo dall'indirizzo IP si realizza con l'opzione -x:
dig -x 160.78.167.140 #(equivale al comando dig PTR 140.167.78.160.in-addr.arpa.)
Per trovare il nome del mail server di un determinato dominio http://openskill.info/infobox.php?ID=1196
dig -t MX NOMEDOMINIO esempio: dig -t MX studenti.unipr.it
lpr-bastion ~]# dig +short netlab.fis.unipr.it AAAA 2001:760:2e04:1033::a0
Consente di interrogare i database whois, noti soprattutto per i nomi a dominio e per gli spazi di indirizzamento.
man whois whois 160.78.48.10 whois unipr.it
Servizio on-line: http://whois.net/ip-address-lookup/
cerca di connettersi ad un intervallo di numeri di porta o indirizzi IP per vedere quali servizi o sistemi sono presenti ed attivi.
http://openskill.info/infobox.php?ID=577
nmap 192.135.11.0/26
Opzioni significative:
Il servizio on-line Open Ports consente di verificare l'apertura di una porta specifica da Internet.
Originariamente scritto per implementare a livello client il protocollo TELNET, puo essere utilizzato per connettersi tramite TCP/IP alla porta di un host.
telnet HOSTNAME port
Esempio:
telnet netlab.fis.unipr.it 81 Trying 160.78.167.140... Connected to netlab.fis.unipr.it. Escape character is '^]'. GET / HTTP/1.1 Host: netlab.fis.unipr.it # Richiesto da HTTP 1.1 User-Agent: Nome.Cognome Connection: close HTTP/1.1 200 OK Date: Wed, 12 Oct 2011 20:25:47 GMT Server: Apache/2.2.14 (Ubuntu) Last-Modified: Sun, 11 Apr 2010 14:34:39 GMT ETag: ``6026f8-e03-483f6eda43dc0'' Accept-Ranges: bytes Content-Length: 3587 Vary: Accept-Encoding Connection: close Content-Type: text/html ....
Siti web per determinare le prestazioni nell'accesso alla rete del proprio PC:
Utilizza il protocollo ICMP per verificare la raggiungibilità di un host remoto. Consente di misurare la latenza (round-trip time).
ping -c 3 www.mit.edu 64 bytes from WWW.MIT.EDU (18.7.22.83): icmp_seq=0 ttl=240 time=122 ms 64 bytes from WWW.MIT.EDU (18.7.22.83): icmp_seq=1 ttl=240 time=122 ms 64 bytes from WWW.MIT.EDU (18.7.22.83): icmp_seq=2 ttl=240 time=121 ms --- www.mit.edu ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2018ms rtt min/avg/max/mdev = 121.834/122.344/122.691/0.466 ms, pipe 2
Per isolare RTT:
ping -c 10 www.unipr.it | awk '{FS="=| "} {print $11}'
Il server ping e' per default attivo negli host, ma puo' essere disabilitato per motivi di sicurezza: http://www.linuxhowtos.org/Security/disable_ping.htm
Il comando e' ping6 -I <int> <IP6>. Esempio:
ping6 -I eth1 lpr2-ip6 PING lpr2-ip6(lpr2-ip6) from fe80::20c:29ff:fe44:f11e eth1: 56 data bytes 64 bytes from lpr2-ip6: icmp_seq=0 ttl=64 time=1.46 ms 64 bytes from lpr2-ip6: icmp_seq=1 ttl=64 time=0.415 ms 64 bytes from lpr2-ip6: icmp_seq=2 ttl=64 time=0.391 ms 64 bytes from lpr2-ip6: icmp_seq=3 ttl=64 time=0.384 ms
wget consente di fare download di file con il protocollo http o ftp. Il programma misura il throughput del trasferimento (KB/s)
Nel seguente esempio il file linux-3.17.1.tar.gz viene scaricato primo dal server originale (www.kernel.org) in 12 secondi, poi dalla copia mirror del GARR in 7.2 secondi:
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.17.1.tar.gz --2014-10-23 10:01:36-- https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.17.1.tar.gz Resolving www.kernel.org... 199.204.44.194, 198.145.20.140, 149.20.4.69, ... Connecting to www.kernel.org|199.204.44.194|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 121383850 (116M) [application/x-gzip] Saving to: âlinux-3.17.1.tar.gzâ 100%[====================================================>] 121,383,850 12.1M/s in 12s 2014-10-23 10:01:50 (9.78 MB/s) - âlinux-3.17.1.tar.gzâsaved [121383850/121383850] wget http://mirror1.mirror.garr.it/mirrors/kernel.org/linux/kernel/v3.x/linux-3.17.1.tar.xz --2014-10-23 10:00:14-- http://mirror1.mirror.garr.it/mirrors/kernel.org/linux/kernel/v3.x/linux-3.17.1.tar.xz Resolving mirror1.mirror.garr.it... 193.206.140.34, 2001:760:ffff:b0::34 Connecting to mirror1.mirror.garr.it|193.206.140.34|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 80315188 (77M) [text/plain] Saving to: âlinux-3.17.1.tar.xzâ 100%[========================================================>] 80,315,188 10.4M/s in 7.2s 2014-10-23 10:00:22 (10.6 MB/s) - âlinux-3.17.1.tar.xzâsaved [80315188/80315188]
Esercizio: localizzare i 2 server (199.204.44.194 e 193.206.140.34)
ab -c 1 -n 10 -i http://www.google.com/
http://fly.isti.cnr.it/didattica/tesi/Barsocchi/APPENDICE_B.pdf
Iperf è uno strumento per misurare il throughput TCP tra un cliente e un server. E' flessibile, open source e disponibile per diversi sistemi operativi.
Nell'uso piu' semplice occorre lanciare :
server> iperf -s [-p <port>] (porta di ascolto 5001/TCP) client> iperf -c server_name [-p <port>]
Tcpdump e tshark sono strumenti linux a linea di comando per l'analisi del traffico che avviene sulla rete fisica a cui si e' collegati. Si metteno in ascolto sull'interfaccia di rete dell'host e catturano tutti i pacchetti in transito (occorrono i privilegi di amministratore).
Sintassi: tcpdump [opzioni] [espressioni]
Le opzioni stabiliscono il modo di funzionamento del programma e il tipo di informazioni da visualizzare. Ad esempio:
tcpdump # visualizza le informazioni essenziali di tutti i pacchetti da eth0 (default) tcpdump -w file.pcap # salva i pacchetti catturati nel file tcpdump -w file.pcap -Z <user> # salva i pacchetti cun uid <user> tcpdump -i eth1 # utilizza una interfaccia diversa tcpdump -e # visualizza gli indirizzi link tcpdump -r file.pcap # legge i pacchetti dal file anziche' dall'interfaccia di rete tcpdump -X # visualizza il contenuto dei primi 68 byte di ogni pacchetto tcpdump -X -s 1500 # come sopra ma visualizza 1500 byte tcpdump -n # non risolve gli indirizzi IP tcpdump -nn # non risolve gli indirizzi IP e le porte tcpdump -F filter.txt # legge le espressioni da file tcpdump -c 100 # cattura 100 frame , quindi termina
Se non viene impostato il numero di frame da catturare ( opzione -c ) il programma deve essere terminato premendo ctrl/C.
Le espressioni ci consentono di applicare un filtro sui pacchetti da catturare. Nell'espressione possiamo combinare indirizzi IP (host), reti (net), porte (port) e protocolli mediante operatori logici. Alcuni esempi:
tcpdump ether host 00:0c:29:df:d4:21 -i eno16777984 tcpdump -X ether dst 01:80:C2:00:00:00 -i eth0 tcpdump dst host 192.135.11.1 filtra i pacchetti destinati (dst) all'indirizzo IP tcpdump net 160.78.124.0/24 Indirizzo (src o dest) appartente alla rete indicata tcpdump host 172.28.34.100 and port 25 Cattura tutto il traffico (src o dst) SMTP di 1.2.3.4 tcpdump "host 172.28.34.100 and (not src net 172.28.34.0/24 or not dst net 172.28.34.0/24)" Tutto il traffico tra la il sistema locale e l’esterno della LAN. tcpdump udp tutto il traffico UDP tcpdump "ip[0] & 0x0f > 5" tcpdump "(tcp[13] & 0x03 !=0 and not src and dst host localhost)" tcpdump -nn "tcp[tcpflags] & (tcp-syn|tcp-fin) != 0" filtra i pacchetti con SYN o FIN attivi tcpdump -nn "tcp[12] >> 4 > 5" filtra pacchetti tcp con opzioni nell'intestazione (HLEN > 5)
nota: tcp[13] e' il 14mo byte dell'header TCP. Contiene i 6 bit di codice: URG,ACK,PSH,RST,SYN,FIN
tcpdump ip6 #cattura tutto il traffico IPv6
wireshark e' un packet sniffer come tcpdump ma e' dotato di una interfaccia grafica che consente una migliore visualizzazione e analisi dei pacchetti catturati. La sintassi per la specifica delle opzioni di cattura e' compatibile con tcpdump.
Link: www.wireshark.org/docs
Il filtro di cattura ha una sintassi simile a quella di tcpdump:
Principali attributi per il filtro: tipo: host, net, port direzione: src, dst, src or dst, src and dst protocollo: ether, ip, tcp, udp, arp, rarp operatori logici: and, or, not (oppure !) dst host <dest> il campo dst (destinazione) del pacchetto equivale a <dest> src host <sorg> il campo src (sorgente) del pacchetto equivale a <sorg> host <sistema> la src o la dst del pacchetto corrispondono a <sistema> ether dst <indirizzo> l'indirizzo ethernet di dst è uguale a <indirizzo> ether host <indirizzo> l'indirizzo ethernet src o quello di dst corrisponde a <indirizzo> dst net <rete> l'indirizzo dst del pacchetto ha una indirizzo di rete equivalente a <rete> src net <rete> l'indirizzo src del pacchetto ha un indirizzo di rete equivalente a <rete> net <rete> l'indirizzo src o l'indirizzo dst ha un indirizzo di rete uguale a <rete> dst port <porta> il pacchetto è di tipo ip/tcp oppure ip/udp ed è destinato alla porta con valore uguale a <porta> src port <porta> il pacchetto ha come porta origine il valore <porta> port <porta> la porta src o quella di dst equivalgono al valore <porta> Esempi: Catturare tutto il traffico SMTP da e verso il sistema 1.2.3.4: host 1.2.3.4 and port 25 Catturare tutto il traffico tra il sistema locale e l’esterno della LAN: host 1.2.3.4 and (not src net 1.2.3.0/24 or not dst net 1.2.3.0/24) Traffico multicast STP: ether dst 01:80:C2:00:00:00
I pacchetti catturati possono essere filtrati con il “Display Filter”.
Op. di comparazione (English/C-Like): eq/== ne/!= gt/> lt/< ge/>= le/<= contains Op. logici (English/C-like): and/&& or/|| xor/^^ not/! Variabili booleane: tcp.flags.ack tcp.flags.syn http.request ecc.
Esempi:
frame.pkt_len > 10 frame.pkt_len ge 0x100 eth.addr == ff:ff:ff:ff:ff:ff eth.type == 0x0806 (0x0800=IP, 0x0806=ARP, 0000-0x05DC=IEEE802.3 Length Field) eth.addr == 00:00:01:02:03:04 eth.addr[2] == 83 eth.src[0:3] == 00:00:83 (begin:offset) eth.dst[1-2] == 20:20 (begin – end) ip.addr eq 192.168.0.1 ip.len le 1500 tcp.flags.ack and ip.addr==192.168.0.1 http.user_agent contains Mozilla