我需要根据mac地址限制用户的登录,并且我已经将项目部署在k8s内部,但是存在一个问题,我无法获取客户端的mac地址。
我已经尝试过这些:
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
但是该方法只能获取服务器的mac地址,无法获取客户端的mac地址。那么,如何获取客户端的mac地址呢? 非常感谢。
当您想在登录时读取“用户”的 MAC 地址时,我想您指的是客户端计算机中用于建立与服务器的网络连接的网络接口的 MAC 地址。
不幸的是,这是不可能的,因为互联网协议(IP)使用的网络堆栈仅为本地网络保留此信息。这甚至不是指整个 LAN,而是指机器直接连接的网段,因此您只能找到无需使用配置的“网关”即可到达的 IP 地址的 MAC 地址。
仅对于那些 IP 地址,您可以使用提到的
arp
工具(ARP = 地址解析协议)。
对于所有其他地址,此信息不会保存在网络包中。
但另一方面,这对您有好处:MAC 地址很容易被伪造(这意味着您可以为任何网络接口设置任何 MAC 地址,如果您知道该怎么做,有时甚至 Windows 中的设备驱动程序也提供了不错的 UI...),因此依赖此类信息进行登录是一个非常糟糕的主意。
也许更好的解决方案是依赖正确设置的网络基础设施并限制允许传入的 IP 地址的范围。虽然在网络包中伪造发件人 IP 地址也不难,但对于登录过程来说没有用,因为这通常需要答案,而使用伪造的发件人地址,答案将永远不会到达原始发件人。