2009-05-08 14 views
24

ich gebeten wurde, ein Servlet zu schreiben, die Details des Clients wie IP sammelt, MAC-Adresse usw.Wie bekomme ich die MAC-Adresse eines Clients von HttpServlet?

immer seine IP ist ziemlich geradlinig (request.getRemoteAddr()), aber ich nicht einen eleganten Weg finden, seine MAC-Adresse zu bekommen.

scheint vernünftig, dass der Webserver Zugriff auf Daten wie Mac-Adresse usw. hat, da es die TCP-Pakete und alle erhält. Werden diese Daten irgendwo registriert? Ist es zugänglich?

(Ich arbeite auf der Tomcat6)

Antwort

39

Sie werden wahrscheinlich nicht bekommen, was Sie wollen. (die MAC-Adresse des Clients)

Wenn der Server nahe genug ist (direkt über einen Hub oder einen Switch verbunden), können Sie ARP für die MAC-Adresse eingeben. Wenn Sie dies für eine IP über das Internet tun, werden Sie wahrscheinlich die interne Schnittstelle des nächsten Routers oder Switches erhalten.

Aufgrund der Funktionsweise von TCP/IP wird die MAC-Adresse, die im 'frame' verwendet wird, an jedem Hop, den die Informationen zwischen dem Server und dem Host aufnehmen, abgezapft und neu zusammengesetzt.

alt text

Encapsulation

+1

Wenn ich andere Antworten erneut lese, stimme ich zu, dass, wenn Sie die Computer von Leuten dazu bringen, ihre interne Konfiguration aufzugeben, Sie es besser machen können, aber ich bezweifle, dass irgendein Sicherheitsmodell dies zulassen würde. Das Gleiche wie der Versuch, jemandes interne IP-Adresse zu bekommen, ist das Beste, was Sie normalerweise tun können, ist den Router zu bekommen, der Adressübersetzung durchführt. – atom255

+0

@ atom225 Ich bin kein Experte, aber wenn ich das Bild sehe, das du gepostet hast, kann ich mir ein Szenario vorstellen, in dem wir die MAC-Adresse in der Anwendungsebene fragen und senden. Was denkst du über meine Idee? – ziMtyth

8

TCP/IP ... Sie können die MAC-Adresse bekommen, ist, dass eine zu niedrige Schicht AFAIK

+5

der MAC verfügbar ist, jedoch nicht relevant, da es höchstwahrscheinlich ist nicht das NIC des Clients aber einige der MAC von der nächstgelegenes Gerät zum Server. –

0

Ich glaube, dass Kunden ermöglichen müssen für diese in ihrer JVM geschehen: Dies ist nicht möglich, durch die HttpServlet Klasse

dieses thread

+2

Ich nahm an, der Client wäre ein Browser? –

0

See.

Der einzige Weg, wie ich möglicherweise eine Benutzer-MAC-Adresse gettnig denken kann, ist die Verwendung von Javascript auf der Client-Seite, um es abzurufen und dann in einem Cookie, den Ihr Server dann lesen kann. Aber, ich weiß nicht, ob es möglich ist, MAC-Addr mit Javascript zu bekommen - es scheint ein Sicherheitsrisiko für einen Browser zu sein, dies zu tun, da es außerhalb der Sandbox des Browsers geht, aber vielleicht gibt es ein paar Hacks, um es zu tun.

-3

dieses Skript arbeitet, um die besten 100% ige Wahrscheinlichkeit, dass es auf Sie localhost funktioniert, aber Sie haben diese

gibt es ein PHP-Code mit Ihrem Webhost zu überprüfen, die viel mehr ist besser

<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

Das wird den MAC vom Client nicht bekommen; Es wird die MAC-Adresse des Servers erhalten. –

Verwandte Themen