2009-05-08 10 views
24

mi è stato chiesto di scrivere un servlet che raccoglie i dettagli del cliente come ad esempio IP, indirizzo MAC ecccome ottenere l'indirizzo MAC di un client da HttpServlet?

ottenere il suo IP è abbastanza straight-forward (request.getRemoteAddr()), ma io non trovare un modo elegante per ottenere il suo indirizzo MAC.

sembra ragionevole che il server Web 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 sulla parte superiore del Tomcat6)

risposta

39

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

Se il server è abbastanza vicino (direttamente collegato tramite hub o forse un interruttore) è possibile 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 strappato e riassemblato a ogni hop che le informazioni richiedono tra il server e l'host.

alt text

Encapsulation

+1

Nella rilettura di altre risposte sono d'accordo sul fatto che se si ottiene che i computer delle persone abbandonino la propria configurazione interna, è possibile fare di meglio, ma dubito che qualsiasi modello di sicurezza lo consentirebbe. Come per cercare di ottenere l'indirizzo IP interno di qualcuno, il meglio che si può fare è ottenere il router che esegue la conversione degli indirizzi. – atom255

+0

@ atom225 Non sono un esperto, ma vedendo l'immagine che hai postato, posso immaginare uno scenario in cui chiediamo e inviamo l'indirizzo MAC nel livello applicazione, cosa ne pensi della mia idea? – ziMtyth

8

TCP/IP ... non è possibile ottenere l'indirizzo MAC, che è uno strato troppo bassa per quanto ne so

+5

il MAC è disponibile, tuttavia, irrilevante poiché molto probabilmente non è il NIC del client ma alcuni il MAC del dispositivo più vicino al server. –

0

Credo che i clienti hanno bisogno per consentire perché questo avvenga nella loro JVM:

Vai a questa thread

+2

stavo dando per scontato che il client sarebbe un browser? –

0

questo non è possibile attraverso la classe 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 è possibile 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.

-3

Questo script funziona il migliore probabilità al 100% che funziona su di voi localhost, ma si deve controllare questo con il vostro hosting

c'è un codice PHP che è molto di più Meglio

<font color="black" face="courier new"> 
<b>mac/linux/android</b>(arp -an)<br> 

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

Questo non otterrà il MAC dal client; otterrà l'indirizzo MAC del server. –

Problemi correlati