Newsgroup: it.comp.java
Titolo: Leggere il MAC address

Ciao a tutti,
per ragioni di sicurezza avrei necessità di controllare il MAC address
dei client che effettuano il login ad una pagina JSP. Sapreste dirmi
come potrei fare per ottenere il MAC address del client mediante JSP o
un Javascript ?
Grazie mille in anticipo per il vostro aiuto
Carmelo



carmelo ha scritto:

Smentitemi se sbaglio, ma mi sembra improbabile che si possa da 
javascript o da jsp. Dovresti forse interrogare in qualche modo la 
tabella-arp del server per vedere l'ip a cosa corrisponde (da java ma 
temo con qualche metodo nativo)
Ti proporrei altre soluzioni alternative, tipo un bel certificato lato 
client, considerando anche che alcune schede adesso permettono di 
variare il mac address.
-- 
bye
DKano

carmelo (18/03/2009):

Risposta semplice:
Non puoi, perchè il MAC address è un'informazione che serve di più ai
router e agli switch, rispetto al codice di un'applicazione.
Risposta complicata:
Hai voglia di smanettare? Allora fai così:
1) Scarica e installa Wireshark, studiatelo per bene.
2) Scarica JPCap da qui:
http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html
Se hai installato prima Wireshark, hai già le librerie libpcap
installate.
3) Studiati bene la documentazione e gli esempi
Ora hai due strade.
La più pulita (rispetto alla rete dove lavori) ma anche la più
complessa: crei un'applicazione Java che giri in background, e che
rimanga in ascolto sulla scheda di rete tramite JPcap processando
rapidamente tutti i pacchetti (JpcapCaptor.loopPacket). Per ogni
pacchetto di tipo TCP, la cui porta di destinazione sia 80 (o 8080,
dipende dal webserver) e il cui IP di destinazione sia quello del
server, ottieni il MAC del sorgente in questo modo:
TCPPacket packet=<pacchetto catturato>;
String src_ip=packet.src_ip.toString();
String src_mac=((EthernetPacket)packet.datalink).getSourceAddress();
Avendo l'accoppiata ip/mac, puoi fare un po' quello che preferisci:
salvarlo su un database (usa come chiave primaria l'indirizzo IP),
salvarlo su file (avendo l'accortezza di non memorizzare duplicati),
tenerlo in memoria ecc..., assicurati solo di poter accedere a tale
lista dall'application server, per poter fare un lookup ad ogni
chiamata della tua JSP (sai già come recuperare l'IP sorgente da una
request JSP, vero???).
La seconda strada è un poco più lineare, forse un po' meno complessa,
ma rischi di aumentare il carico sulla rete: ogni volta che la tua
pagina viene richiamata, assembli al volo una richiesta ARP
(documentati bene prima), la mandi in broadcast tramite Jpcap e rimani
in attesa della risposta, che conterrà anche il mac del client.
Facendo così, molto probabilmente la tua applicazione web diventerà più
lenta (prova a immaginare cosa succede se nessuno risponde alla
richiesta ARP).
Tieni conto che personalmente non ho ancora sperimentato nessuna delle
due strade, è tutta teoria.
In bocca al lupo.
-- 
Scientology: se la conosci la eviti, se la conosci non ti uccide...
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx
 - 
http://www.xenu.net
(per rispondere personalmente leva IlDitoDalCulo)
---> 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 <---

 un Javascript ?
non si pu� fare, e comunque � un controllo che di sicuro avrebbe solo la 
facilit� con cui pu� essere aggirato.
per queste eventualit�, senza inventarsi l'acqua calda, esistono i 
certificati client.


non puoi farlo perché il mac address esiste e ha senso in un livello
della stack TCP/IP che non è accessibile dall'application layer
attraverso cui intendi agire.
http://en.wikipedia.org/wiki/TCP/IP
http://en.wikipedia.org/wiki/TCP/IP_model
Ciao Gianmarco

Cosa mi dite dei certificati client? Potrebbero essere utili allo
scopo? Si possono implementare via JSP?

 scopo? Si possono implementare via JSP?
I certificati si installano nei client e nel server, a coppie. Non
devi implementare niente.
http://it.wikipedia.org/wiki/Transport_Layer_Security

 scopo? Si possono implementare via JSP?
Alcuni mi hanno detto che l'unico modo potrebbe essere tramite una
applet che verifichi il sistema dell'utente... Che ne pensate?


Grazie per la risposta, ma credi che possano essere utili per il mio
scopo?

carmelo ha scritto:

Mi sembra opinabile. Verifichi cosa esattamente?
La strada maestra, se abbiamo capito che ti serve, sono i certificati. 
Come ti hanno già detto non è una cosa da implementare nel codice; 
aggiungo: è da configurare nel web server. La teoria è semplice: 
consegni un certificato al client e lui lo carica nel suo browser 
(firefox, internet explore o quel che è) dopo, quando si connette il 
browser e il web-server comunicano e l'accesso avviene se il certificato 
è valido. I certificati li puoi assegnare a tempo, revocare in caso di 
necessità e così via.
-- 
bye
DKano