MokaByte Numero  35  - Novembre 99
Il networking in Java
La pratica


di 
Andrea
Trentini
Una carrellata sui comandi e sulle funzionalità disponibili per usare/monitorare/sfruttare tutto ciò che riguarda la rete

I puntata


Con l'articolo di teoria  sono stati affrontati i vari argoemtni base da un punto di vista più formale: vediamo la parte pratica con una checklist di cose da provare, in modo da stuzzicarvi l'appetito... Ammettendo che abbiate UNIX o Windows (sia NT che
        95/98), qui avete una panoramica (dal punto di vista pragmatico dei vari comandi disponibili) sui vari aspetti che noi utenti possiamo vedere di una rete. 

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. 

 

  
 

MokaByte rivista web su Java

MokaByte ricerca nuovi collaboratori
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it