2009-05-08 27 views
24

me pidieron escribir un servlet que recoge datos de los clientes, tales como IP, dirección MAC, etc.cómo obtener la dirección MAC de un cliente de HttpServlet?

conseguir su IP es bastante recta hacia adelante (request.getRemoteAddr()) pero no encuentro una manera elegante de obtener su dirección MAC.

parece razonable que el servidor web tenga acceso a datos tales como direcciones Mac, etc., ya que recibe los paquetes TCP y todo. ¿esta información se registra en alguna parte? es accesible?

(Estoy trabajando en la parte superior de Tomcat6)

Respuesta

39

Probablemente no obtenga lo que desea. (la dirección MAC del cliente)

Si el servidor está lo suficientemente cerca (directamente conectado a través del concentrador o tal vez un conmutador) puede ARP para la dirección MAC. Si hace esto para una IP a través de Internet, es probable que obtenga la interfaz interna del enrutador o conmutador más cercano.

Debido a la forma en que funciona TCP/IP, la dirección MAC utilizada en el 'marco' se arranca y se vuelve a ensamblar en cada salto que la información toma entre el servidor y el host.

alt text

Encapsulation

+1

Al volver a leer otras respuestas, estoy de acuerdo en que si consigues que las computadoras de las personas renuncien a sus configuraciones internas, puedes hacerlo mejor, pero dudo que cualquier modelo de seguridad lo permita. Lo mismo que tratar de obtener la dirección IP interna de alguien, lo mejor que puede hacer es obtener el enrutador que está haciendo la traducción de direcciones. – atom255

+0

@ atom225 No soy un experto, pero al ver la imagen que publicó, puedo imaginar un escenario en el que le preguntamos y le enviamos la dirección MAC en la capa de aplicación, ¿qué piensa de mi idea? – ziMtyth

8

TCP/IP ... No se puede obtener la dirección MAC, que es una capa demasiado bajo que yo sepa

+5

el MAC está disponible, sin embargo, es irrelevante ya que es muy probable que no sea el NIC del cliente, pero algunos de los MAC del dispositivo más cercano al servidor. –

0

creo que los clientes necesitan para permitir para que esto suceda en su JVM:

ver este thread

+2

suponía que el cliente sería un navegador? –

0

esto no es posible a través de la clase HttpServlet.

La única forma en que puedo pensar en obtener una dirección MAC de un usuario es usar Javascript en el lado del cliente para recuperarla y luego colocarla en una cookie que su servidor pueda leer. Pero, no sé si es posible obtener MAC addr usando Javascript, parecería un riesgo de seguridad para un navegador que te permita hacer esto, ya que está fuera del entorno limitado del navegador, pero tal vez haya algún truco para hacerlo.

-3

este script funciona mejor probabilidad del 100% que trabaja en usted localhost pero hay que verificar con su servicio de hosting

hay un código php que es mucho más mejor

<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

Eso no obtendrá el MAC del cliente; obtendrá la dirección MAC del servidor. –

Cuestiones relacionadas