如何从HttpServlet获取客户端的MAC地址?

时间:2009-05-08 14:14:51

标签: java tomcat servlets tcp

我被要求编写一个servlet来收集客户端的详细信息,如ip,mac address等。

获取他的IP非常简单(request.getRemoteAddr()),但我找不到一种优雅的方式来获取他的MAC地址。

似乎合理的是,Web服务器可以访问诸如Mac地址等数据,因为它获取TCP数据包等等。这个数据在哪里注册?它可以访问吗?

(我正在Tomcat6上工作)

5 个答案:

答案 0 :(得分:39)

你可能不会得到你想要的东西。 (客户端的MAC地址)

如果服务器足够接近(通过集线器或交换机直接连接),您可以ARP获取MAC地址。如果您通过Internet为IP执行此操作,您可能会获得最近的路由器或交换机的内部接口。

由于TCP / IP的工作方式,“帧”中使用的MAC地址将被扯掉并在每一跳重新组装,信息在服务器和主机之间进行。

alt text

Encapsulation

答案 1 :(得分:8)

TCP / IP ...你无法获得MAC地址,这是一个太低的AFAIK层

答案 2 :(得分:0)

我相信客户需要允许在JVM中实现这一点:

请参阅此thread

答案 3 :(得分:0)

这不可能通过HttpServlet类实现。

我认为可能获取用户MAC地址的唯一方法是在客户端使用Javascript来检索它,然后将其放在服务器可以读取的cookie中。但是,我不知道是否有可能使用Javascript获取MAC地址 - 这似乎是一个安全风险,浏览器允许你这样做,因为它超出了浏览器的沙箱,但也许有一些黑客可以做到这一点。 / p>

答案 4 :(得分:-3)

此脚本在本地主机上运行的最佳概率为100%,但您必须使用您的虚拟主机检查此内容

有一个更好的PHP代码

<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>