java - 同一台机器的不同IP地址

标签 java networking dns

我有一个客户端-服务器设置。客户端连接到服务器并询问接下来要执行哪个程序。服务器收到请求后使用下面的代码块检查套接字另一端的主机名,该代码块返回“127.0.0.1”

socket.getInetAddress().getCanonicalHostName();

获取程序名称后,客户端创建一个进程,该进程也尝试连接到服务器,但这次上述调用返回不同的地址。 “mypc.foo.com”在此处屏蔽域名

这种行为困扰着我,因为我无法查找存储按计算机 IP 分组的所有进程详细信息的 hashmap

这是java查找实现中的一个错误还是我遗漏了一些东西。请建议其他方法来进行此查找

最佳答案

我相信socket.getInetAddress()返回你自己的地址,所以基本上总是127.0.0.1。尝试使用socket.getRemoteSocketAddress() - 获取对方的IP地址。

不过,使用 IP 地址来匹配不同的用户通常是一个坏主意。首先,它们可以位于某个网络中或位于防火墙后面,您可以从多个客户端获取来自同一 IP 地址的请求。另外,您也不能保证它是静态或动态IP。而且,如果您的应用程序运行在一些具有奇怪路由的奇怪网络设置中,您最终可能会收到来自路由器 IP 地址的所有请求。

更好的设计是在服务器和客户端之间共享一些 token 并使用它来进行识别。听起来是不是很熟悉?例如,http session 就是这样完成的;)

关于java - 同一台机器的不同IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49556924/

相关文章:

java - jOOQ - 选择查询数组

java - JNA:如何定义具有自定义位大小字段的结构?

java - Socket在while循环中不发送数据

java - java中直接传输ipv4数据包

ssl - 设置允许在 CloudFlare 上设置 DNS 的 VPS 上加密

java - 在 Java 中生成线程

Java 通用单例工厂模式

php - MySQL 或 PHP 错误? IPV6

python - 使用 dnspython 查询反向 dns 查找

ubuntu - 如何在 ubuntu 16.04 中使用 dnsmasq 通配符