如何从HttpServlet获取客户端的MAC地址?
我被要求写一个servlet,收集客户的详细信息,如IP,MAC地址等
得到他的IP是非常直接的( request.getRemoteAddr()
),但我没有find一个优雅的方式来获得他的MAC地址。
似乎是合理的,networking服务器可以访问数据,如Mac地址等,因为它获取TCP数据包和所有。 这个数据是否在某个地方注册? 可以访问吗?
(我正在Tomcat6之上工作)
你可能不会得到你想要的。 (客户端的MAC地址)
如果服务器足够近(通过集线器或交换机直接连接),则可以使用MAC地址的ARP 。 如果你通过互联网为IP做这个,你可能会得到最接近的路由器或交换机的内部接口。
由于TCP / IP的工作方式,在'帧'中使用的MAC地址将被撕掉,并在服务器和主机之间的每一跳信息中进行重新组装。
封装
TCP / IP …你无法获得MAC地址,这是一个太低层AFAIK
我相信客户需要允许这种情况发生在他们的JVM中:
看到这个线程
这是不可能通过HttpServlet类。
我能想到的唯一方法可能gettnig用户的MAC地址是在客户端使用Javascript来检索它,然后将其放在一个cookie,您的服务器可以读取。 但是,我不知道是否有可能使用Javascript获取MAC地址 – 对于浏览器来说,这似乎是一个安全风险,因为它可能会在浏览器的沙箱外进行,但也许会有一些破解。
这个脚本在你的本地主机上工作的概率最好是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>