Premessa
L'articolo è
organizzato in forma di "suggerimenti" e "segnalazioni", vi mostreremo
alcuni comandi e prodotti (raggruppati per categoria) con cui iniziare
a sperimentare alcune funzioni che le reti (ormai si dovrebbe dire "La
rete") vi offrono.
Non è
detto che qui troviate tutto il possibile, ripeto, è un assaggio
per mostrarvi aspetti della rete che normalmente non si vedono (specie
se si fa solo sviluppo software e mai amministrazione di sistema), soprattutto
con i nuovi sistemi operativi (leggi Windows) che mascherano molte parti
(nel bene e nel male). Per i dettagli di ogni comando (opzioni, etc.) vi
rimanderò ai rispettivi manuali (quasi sempre on line :-). Ad esempio,
di tutti i comandi Unix che elencherò potrete spulciare le "man
pages" relative alla ricerca della sezione SEE ALSO, che vi redirigerà
ad una quantità (non sempre facilmente maneggiabile ;-) di altri
comandi.
Per questa volta
NON vedremo codice Java (strano su una rivista dedicata ;-) infatti il
nostro scopo iniziale è quello di introdurvi al mondo delle reti
classico, per poi vedere cosa si può fare con Java sulla rete.
Le categorie
sono organizzate in livelli (circa ISO-OSI) crescenti, cioè partiremo
dai livelli bassi della rete (IP ad esempio) fino ad arrivare a livelli
alti (NFS, Web, etc.). Non tutti gli argomenti possono essere catalogati
con precisione perciò il posizionamento sarà arbitrario ;-).
I puristi di rete non prendano le mie categorie con pignoleria, sono categorie
pragmatiche, non formali... ad esempio nel primo paragrafo ho raggruppato
almento i primi tre livelli OSI.
Telnet, the
Swiss Army Knife
Una parentesi
su telnet è d'obbligo, infatti è uno dei programmi più
usati anche per effettuare test sui vari protocolli di rete, vi permette
di aprire un canale verso una macchina (detta comunemente "host") e vedere
cosa vi risponde l'eventuale processino server che avete incontrato dall'altra
parte. Vedremo degli esempi...
Ricordatevi
solo la sua sintassi: TELNET <HOST o IP> <PORTA a cui connettersi>
Una volta lanciato,
tutto ciò che battete sulla tastiera (se la connessione viene accettata)
finisce nel canale e tutto ciò che arriva dal canale lo vedete a
video così com'è.
Provate le porte
7, 9, 13 e 19 di una macchina UNIX... (se non ne avete una a portata di
mano usate weaver.lacd.dsi.unimi.it)
IP/ICMP
Questo è
il livello basso della rete, si occupa di collegare le macchine, non si
parla ancora di canali (Socket), ma solo di indirizzi (e nomi simbolici).
A questo livello si parla di routing (instradamento dei pacchetti), cioè
di come rendere più breve (o meno costosa ;-) la strada che i vostri
dati fanno nella rete.
ping
(UNIX, Win)
Comando molto
di basso livello (ICMP, il protocollo usato per il controllo della rete
stessa), serve a testare se una macchina é viva o morta... ;-)
se la macchina
target non risponde (perché spenta, irraggiungibile o crashata ;-)
vi viene ritornato un timeout, altrimenti il tempo di ritorno dei pacchetti.
Questo é
un esempio:
<c:\>
ping 10.0.0.1
Pinging
10.0.0.1 with 32 bytes of data:
Request
timed out.
Request
timed out.
Request
timed out.
Request
timed out.
<c:\>
ping 10.0.0.7
Pinging
10.0.0.7 with 32 bytes of data:
Reply
from 10.0.0.7: bytes=32 time<10ms TTL=32
Reply
from 10.0.0.7: bytes=32 time<10ms TTL=32
Reply
from 10.0.0.7: bytes=32 time<10ms TTL=32
Reply
from 10.0.0.7: bytes=32 time<10ms TTL=32
<c:\>
ifconfig(UNIX)
Vi fornisce
le informazioni (e vi permette di modificarle) sulle schede di rete installate.
Dovete essere "root" per scrivere una nuova configurazione.
[root@nemo
/root]# ifconfig
eth0
Link encap:Ethernet HWaddr 00:C0:DF:E2:EA:33
inet addr:10.0.0.1 Bcast:10.255.255.255 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:111 errors:0 dropped:0 overruns:0 frame:0
TX packets:106 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:10 Base address:0x6000
lo
Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:56 errors:0 dropped:0 overruns:0 frame:0
TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
[root@nemo
/root]#
ipconfig(NT)
Analogo di ifconfig
sotto NT, non so se sia possibile anche modificare la configurazione
(di solito infatti si fa tramite pannello di controllo o editing del registry).
Eccone un output:
Windows
NT IP Configuration
Ethernet
adapter AMDPCN1:
IP Address. . . . . . . . . : 149.132.196.150
Subnet Mask . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . : 149.132.196.150
winipcfg
(Win95/98)
Analogo di ifconfig
sotto Windows, non so se sia possibile anche modificare la configurazione
(di solito infatti si fa tramite pannello di controllo o editing del registry).
[Non vi sembra
uguale alla voce di prima? Lo é. Chissá perché non
hanno chiamato i comandi alla stessa maniera...]
Esempio:
tracert
o traceroute (UNIX e Win (tutti)
Permette di
vedere quanti e quali salti un vostro pacchetto deve fare per arrivare
ad una certa macchina. Vi fornisce anche i tempi su ogni salto.
In questo esempio
non vedete molto poiché si tratta di due macchine in rete locale
(stesso cavo, nessun salto):
[root@nemo
/root]# traceroute 10.0.0.7
traceroute
to 10.0.0.7 (10.0.0.7), 30 hops max, 40 byte packets
1
10.0.0.7 (10.0.0.7) 0.884 ms 0.734 ms 0.665 ms
[root@nemo
/root]#
route
(UNIX e Win )
Permette di
vedere le tabelle di routing della vostra macchina, tali tabelle indicano
i percorsi da prendere in funzione delle destinazioni dei pacchetti. Sono
tabelle grosse solo se avete piú schede di rete, modem, etc.
Anche in questo
esempio non vedete molto poiché si tratta di due macchine in rete
locale (sempre le stesse di prima ;-):
[root@nemo
/root]# route
Kernel
IP routing table
Destination
Gateway Genmask
Flags Metric Ref Use Iface
10.0.0.1
*
255.255.255.255 UH 0 0
0 eth0
10.0.0.0
*
255.0.0.0 U
0 0
0 eth0
127.0.0.0
*
255.0.0.0 U
0 0
0 lo
[root@nemo
/root]#
DNS
Il DNS é
un sistema usato per trasformare i nomi simbolici (es. www.mokabyte.it)
in indirizzi IP. Infatti il software di rete capisce solo gli indirizzi
IP ed é necessaria una traduzione (spesso in ambo i sensi).
E' composto
da un database gerarchico distribuito su macchine (che prendono il nome
di DNS server) in rete, ne esiste di solito una per ogni dominio, in tale
macchina (e solo lí) trovate le informazioni sulla mappatura nomi
<-> IP.
nslookup
(UNIX e forse, non sono sicuro NT)
Una shell di
interrogazione del DNS server. Nella sua forma base basta battere:
$
nslookup www.mokabyte.it
per ottenere
la traduzione in indirizzo IP.
dig
(UNIX)
Analogo del
precedente
Se volete vedere
cosa si puó fare con questi due comandi piú qualche script
di shell andate a: DNS
digger
Inoltre vi consiglio,
se avete Win95/98, di scaricarvene una qualche versione (ne esistono anche
in veste grafica), su Tucows o Winfiles ne trovate a bizzeffe.
Siti interessanti
sull'argomento Ma magari aspettate gli articoli teorici... ;-)
TCP/UDP
A questo livello
finalmente si parla di connessioni (Socket) e porte, si parla di servizi
(programmi speciali, chiamati "demoni", che attendono all'infinito in attesa
di servire i cosiddetti "clienti") e protocolli (in questo caso di livello
applicativo).
/etc/services(UNIX)
\windows\services (Win xx)
Questi non sono
comandi, ma file di configurazione. Vi forniscono la lista dei servizi
attivi e le porte (Socket) su cui si trovano. Eccone un estratto (da Linux)
da cui si evince ad esempio che il servizio daytime (che proveremo tra
un attimo) si trova sulla porta 13.
# /etc/services:
# $Id:
services,v 1.4 1997/05/20 19:41:21 tobias Exp $
#
# Network
services, Internet style
#
# Note
that it is presently the policy of IANA to assign a single well-known
# port
number for both TCP and UDP; hence, most entries here have two entries
# even
if the protocol doesn't support UDP operations.
# Updated
from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports
# are
included, only the more common ones.
tcpmux
1/tcp
# TCP port service multiplexer
echo
7/tcp
echo
7/udp
discard
9/tcp sink
null
discard
9/udp sink
null
systat
11/tcp users
daytime
13/tcp
daytime
13/udp
netstat
15/tcp
qotd
17/tcp quote
msp
18/tcp
# message send protocol
Se ora proviamo
a "telnettarci" sulla porta 13 di una macchina che abbia quel servizio
(se non ne avete una provate weaver.lacd.dsi.unimi.it) e vedrete cosa vi
salta fuori... ;-)
NT di solito
NON ha questi servizi a meno di non installare i "Simple TCP/IP services".
Windows95/98
NON li ha.
netstat
(UNIX, Win xx)
Con questo comando
riuscite a sapere quali sono le connessioni aperte in un dato momento.
Usando l'opzione "-a" conoscerete anche quali servizi sono attivi sulla
vostra macchina (quali "daemon" avete attivato).
<c:\>
netstat
Active
Connections
Proto Local Address
Foreign Address State
TCP scialuppa:1053
10.0.0.1:telnet ESTABLISHED
<c:\>
netstat -a
Active
Connections
Proto Local Address
Foreign Address State
TCP scialuppa:1053
10.0.0.1:telnet ESTABLISHED
UDP scialuppa:nbname
*:*
UDP scialuppa:nbdatagram *:*
telnet
(UNIX, Win solo client)
Con telnet (usato
sulla sua porta standard, la 23) potete collegarvi ad una macchina UNIX
e utilizzarla come se foste lí seduti alla console... Vi viene richiesta
la password di ingresso (login e password) dopodiché potete usare
qualunque comando unix testuale (per la grafica vi serve un Xterminal,
ne parleremo forse in seguito ;-)
Sotto Windows
avete solo la parte client, il servizio telnet (il cui demone si chiama
"telnetd") NON viene supportato su NT standard, esistono meccanismi analoghi
a Xprotocol (NT TSE o Citrix Winframe), ma sono da acquistare a parte...
:-(
rlogin
e rsh (UNIX)
Analoghi per
funzionalitá a telnet, cambia il meccanismo di collegamento e la
sintassi.
Mail
I protocolli
usati nel campo della mail sono fondamentalmente tre: SMTP, POP e IMAP.
SMTP serve a
trasferire la posta da un host all'altro, mentre POP e IMAP sono protocolli
per la lettura (da parte del destinatario finale) della posta stessa. IMAP
é migliore di POP nel senso che permette almeno di conoscere alcuni
attributi dei vari messaggi PRIMA di scaricarli (ad es. headers, attachments,
etc.). Ora vedremo come si possa usare telnet sia per leggere la posta
che per mandarla... (non che dobbiate farlo sempre, serve solo in caso
di emergenza o per fare dei test), va conosciuto il protocollo, non abbiamo
nessun client che ci faccia il lavoro...
Usero' un po'
di comandi specifici dei vari protocolli, per i dettagli guardate gli RFC,
vi spieghera' Lorenzo cosa sono... ;-)
leggere
messaggi presenti sul server
Usiamo POP,
la porta é la 110... vi risponderá il POP server con un messaggio
di benvenuto... (ho attivato l'echo locale cosi' si vede anche quello che
batto io, ho cancellato a posteriori la password ;-)
$ telnet
localhost 110
+OK QPOP
(version 2.3) at weaver.lacd.dsi.unimi.it starting.
user atrent
+OK Password
required for atrent.
pass *************
+OK atrent
has 1 message (351 octets).
list
+OK 1
messages (351 octets)
1 351
.
retr 1
+OK 351
octets
Received:
by weaver.lacd.dsi.unimi.it
(1.39.111.2/16.2) id AA003737323; Tue, 5 Oct 1999 11:55:23 +0200
Date:
Tue, 5 Oct 1999 11:55:23 +0200
From:
Andrea Trentini <atrent@weaver.lacd.dsi.unimi.it>
Return-Path:
<atrent@weaver.lacd.dsi.unimi.it>
Apparently-To:
atrent@weaver.lacd.dsi.unimi.it
X-UIDL:
799d2fe3967ac6b8e3de8077d6ef77c3
ciao
.
quit
$
I comandi
usati sono:
user, per identificarsi
pass, per identificarsi
(password)
list, per sapere
se ho messaggi
retr, per leggerne
uno
quit, per uscire
dalla sessione
Inviare
messaggi
In questo caso
invece usiamo direttamente SMTP, porta 25...
$
telnet localhost 25
220-weaver.lacd.dsi.unimi.it
HP Sendmail (1.39.111.2/16.2) ready at Tue, 5 Oct 1
999 12:01:13
+0200
220 ESMTP
spoken here
helo
250 weaver.lacd.dsi.unimi.it
Hello (scialuppa.sal.disco.unimib.it), pleased to
meet you
mail from:
atrent
250 atrent...
Sender ok
rcpt to:
atrent
250 atrent...
Recipient ok
data
354 Enter
mail, end with "." on a line by itself
ciao
ciao
.
250 AA003827695
Message accepted for delivery
quit
$
Cosi' mi
sono autospedito un messaggio...
I comandi usati
sono:
helo, per identificarsi
(host)
mail from:,
per identificarsi (mittente)
rcpt to:, per
specificare il destinatario
data, per scrivere
il testo della mail
quit, per uscire
dalla sessione
Web
Della "ragnatela"
non vi dico niente, o quasi, saprete gia' navigare (se siete arrivati fin
qui). Vi faccio solo vedere un esempio di come si possa "navigare" con
telnet.
NON e' una proposta
di utilizzo continuo!!! E' solo un modo per farvi "vedere con mano" il
protocollo HTTP. Anche in questo caso per i dettagli andate a consultare
gli RFC (o il sito qui sotto).
$
telnet localhost 80
Trying...
Connected
to localhost.
Escape
character is '^]'.
GET /
<html>
<head>
<title>Laboratorio
Architetture Calcolo Distribuito</title>
</head>
<h1
align="left">Laboratorio Architetture Calcolo Distribuito</h1>
<h2
align="left">JavaLab - JavaCampus</h2>
... (tagliato)
o, in caso di errori:
$
telnet localhost 80
Trying...
Connected
to localhost.
Escape
character is '^]'.
get
<HEAD><TITLE>Bad
Request</TITLE></HEAD>
<BODY><H1>Bad
Request</H1>
Your browser
sent a query that
this server
could not understand.<P>
</BODY>
Connection
closed by foreign host.
$
I comandi usati
sono:
get, per
recuperare il contenuto di un URL
(con "GET
/" prendo la home)
Siti interessanti
sull'argomento
Uno solo, il
fondamentale ;-)
NFS/SMB/FTP
Gli acronimi
del titolo riguardano in generale l'argomento "condivisione file".
nbtstat
(Win xx)
Serve ad avere
informazioni sullo stato della rete Microsoft (cioé SMB) usata attraverso
IP (NetBIOS over IP, mi pare che si chiami). E' interessante usarlo (fa
circa le funzioni del network browser di Windows, con qualcosa in piú)
quando non funziona il WINS server e si vogliono info (SMB) su una macchina
di cui l'IP sia conosciuto.
Battendo nbtstat
da solo (senza parametri) vi viene stampato un help condensato.
Questo é
un esempio di uso con target IP.
<c:\__work>
nbtstat -A 10.0.0.7
NetBIOS Remote Machine Name Table
Name
Type Status
---------------------------------------------
SCIALUPPA
<00> UNIQUE Registered
MLAB
<00> GROUP Registered
SCIALUPPA
<03> UNIQUE Registered
SCIALUPPA
<20> UNIQUE Registered
MLAB
<1E> GROUP Registered
ATRENT
<03> UNIQUE Registered
MLAB
<1D> UNIQUE Registered
MAC Address
= 00-40-C8-63-0D-71
<c:\__work>
samba
(UNIX)
Una suite di
comandi per fare apparire un server Unix come un server SMB (Microsoft).
Con Samba potete
condividere directory Unix verso utenti windows, con maggiore robustezza...
Noi usiamo una macchina Linux come server per le home dei tesisti, loro
usano client Windows (NT e 95/98). Sulle distribuzioni recenti di Linux
é giá preinstallato, é solo un po' tedioso da configurare,
ma ci sono tantissimi esempi giá pronti.
net(Windows)
E' la versione
linea di comando del browser di rete di Windows, vi permette di vedere
cosa pubblica un'altra macchina in termini di directory e stampanti.
<c:\__work>
net view \\scialuppa
Risorse
condivise su \\SCIALUPPA
Condivisione
Tipo Commento
---------------------------------------
MP3
Disco
Esecuzione
comando riuscita.
Si puó
anche usare per "mappare" una directory...
<c:\__work> net use t: \\scialuppa\mp3
In questo
caso mappando sul disco "T:" la directory "mp3" condivisa dal computer
"scialuppa".
mount
(UNIX)
La versione
Unix del comando NET, vi serve per "montare" directory (sia da dischi locali
che da rete) sull'albero principale del vostro filesystem (root). Bisogna
essere sysadmin per usarlo, se siete solo utenti potete leggere la "mount
table", ma non potete modificarla.
ftp
(UNIX e NT Server completi, NT wks
e Win95/98 solo client)
E' sia il nome
di un protocollo (che usa le porte 20 e 21) che il nome di un comando per
pilotare tale protocollo e trasferire file da una macchina all'altra. Non
mi soffermo molto, ricordatevi solo che ha DUE modi di funzionamento (ASCII
e BIN) e se dovete trasferire programmi o, piú in generale file
compressi, dovete settare il BIN altrimenti arrivano i file corrotti (l'ottavo
bit di ogni byte NON viene garantito corretto).
Un'ultima
parola...
Questi sono
davvero solo assaggi, il mondo delle reti é vastissimo, basta metterci
un piede per ritrovarsi sommersi di argomenti, tecnologie, software, hardware
e quant'altro. Spero di essere stato uno stimolo ad addentrarvi maggiormente.
Siti fuori
categoria
Non sapevo dove
metterli, ma sono comunque interessanti.
|