我被要求编写一个servlet来收集客户端的详细信息,如ip,mac address等。
获取他的IP非常简单(request.getRemoteAddr()
),但我找不到一种优雅的方式来获取他的MAC地址。
似乎合理的是,Web服务器可以访问诸如Mac地址等数据,因为它获取TCP数据包等等。这个数据在哪里注册?它可以访问吗?
(我正在Tomcat6上工作)
答案 0 :(得分:39)
你可能不会得到你想要的东西。 (客户端的MAC地址)
如果服务器足够接近(通过集线器或交换机直接连接),您可以ARP获取MAC地址。如果您通过Internet为IP执行此操作,您可能会获得最近的路由器或交换机的内部接口。
由于TCP / IP的工作方式,“帧”中使用的MAC地址将被扯掉并在每一跳重新组装,信息在服务器和主机之间进行。
答案 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>