从 JAVA 套接字检索远程客户端的 MAC
Retrieving MAC of remote client from JAVA socket
下面是我的服务器接受 TCP 连接的 Java 片段。
InetAddress inetAddress = InetAddress.getByName("192.168.2.13");
ServerSocket serverSocket = new ServerSocket(5020, 100, inetAddress);
//accept connection
Socket mSocket = serverSocket.accept();
有什么办法可以到下层取回远程客户端的MAC地址(我不要本地服务器的MAC地址) 向我的服务器发起请求?我想编写一个代码,在服务器接受连接之前在 table 中查找远程客户端的 MAC 和 IP 地址,但我在这样做时遇到了困难。谢谢!
不行,你无法使用link层获取远程用户的MAC地址。假设远程用户是A
,你的服务器是B
。在这些点(A
和 B
)之间有 C
、D
和 E
路由器。
远程用户MAC地址只会在封装IP数据报的帧中发送,目标MAC地址是C接口之一,然后路由器C将使用其接口之一interfaces MAC 地址将其发送到 D,目标 MAC 地址作为 D 的接口之一,等等(直到最终目标是服务器的 MAC 地址).
所以当远程用户的IP地址不会改变时(假设他没有使用VPN
),源MAC地址会改变。
如果您想获得远程用户的 MAC 地址,您必须将其包含在客户端发送到您的服务器的消息中。除非您是客户端的开发人员,否则我认为没有其他解决方法。
下面是我的服务器接受 TCP 连接的 Java 片段。
InetAddress inetAddress = InetAddress.getByName("192.168.2.13");
ServerSocket serverSocket = new ServerSocket(5020, 100, inetAddress);
//accept connection
Socket mSocket = serverSocket.accept();
有什么办法可以到下层取回远程客户端的MAC地址(我不要本地服务器的MAC地址) 向我的服务器发起请求?我想编写一个代码,在服务器接受连接之前在 table 中查找远程客户端的 MAC 和 IP 地址,但我在这样做时遇到了困难。谢谢!
不行,你无法使用link层获取远程用户的MAC地址。假设远程用户是A
,你的服务器是B
。在这些点(A
和 B
)之间有 C
、D
和 E
路由器。
远程用户MAC地址只会在封装IP数据报的帧中发送,目标MAC地址是C接口之一,然后路由器C将使用其接口之一interfaces MAC 地址将其发送到 D,目标 MAC 地址作为 D 的接口之一,等等(直到最终目标是服务器的 MAC 地址).
所以当远程用户的IP地址不会改变时(假设他没有使用VPN
),源MAC地址会改变。
如果您想获得远程用户的 MAC 地址,您必须将其包含在客户端发送到您的服务器的消息中。除非您是客户端的开发人员,否则我认为没有其他解决方法。