come ottenere l’indirizzo MAC di un client da HttpServlet?

Mi è stato chiesto di scrivere un servlet che raccolga i dettagli del cliente come ip, mac address ecc.

ottenere il suo IP è piuttosto semplice ( request.getRemoteAddr() ) ma non trovo un modo elegante per ottenere il suo indirizzo MAC.

Sembra ragionevole che il web server abbia accesso a dati come l’indirizzo MAC ecc., poiché riceve i pacchetti TCP e tutto il resto. questo dato si registra da qualche parte? è accessibile?

(Sto lavorando a Tomcat6)

Probabilmente non otterrai quello che vuoi. (l’indirizzo MAC del client)

Se il server è abbastanza vicino (direttamente collegato tramite hub o forse un interruttore) è ansible ARP per l’indirizzo MAC. Se lo fai per un IP attraverso Internet, probabilmente otterrai l’interfaccia interna del router o switch più vicino.

A causa del modo in cui TCP / IP funziona, l’indirizzo MAC utilizzato nel “frame” viene rimosso e riassemblato a ogni hop che le informazioni richiedono tra il server e l’host.

alt text

incapsulamento

TCP / IP … Non è ansible ottenere l’indirizzo MAC, che è un AFAIK di livello troppo basso

Credo che i clienti debbano consentire che ciò accada nella loro JVM:

Vedi questo thread

Questo non è ansible attraverso la class HttpServlet.

L’unico modo in cui posso pensare di ottenere un indirizzo MAC per gli utenti è quello di utilizzare Javascript sul lato client per recuperarlo e quindi inserirlo in un cookie che il server può quindi leggere. Ma, non so se è ansible ottenere l’addr MAC usando Javascript – potrebbe sembrare un rischio per la sicurezza di un browser che ti consenta di farlo mentre esce dalla sandbox del browser ma forse c’è qualche trucco per farlo.

questo script funziona con la migliore probabilità del 100% che funzioni sul tuo localhost ma devi controllarlo con il tuo webhost

c’è un codice php che è molto meglio

  mac/linux/android(arp -an)
< ?php $mac = system('arp -an'); echo $mac; echo "
"; ?> mac/linux/android(ifconfig)
< ?php $macall = system('ifconfig'); echo $macall; echo "
"; ?> pc/win(ipconfig /all)
< ?php $pc = system('ipconfig /all'); echo $pc; echo "
"; ?>