如何获取唯一的传入请求IP地址

6

有四个人共享同一个WiFi连接,根据以下定义,他们的IP地址必须是唯一的。
IP地址是分配给参与使用互联网协议进行通信的每个设备的数字标签。

问题1:是这样吗?

为了唯一地识别他们,我尝试了:

request.remoteAddress

但是我为这四个人获取的IP地址都相同。

问题2.如何唯一地识别它们?(我应该让他们传递某些令牌之类的东西来唯一标识他们吗?但我更喜欢使用唯一的IP地址)


你可以通过获取其IPv6地址来实现这个功能。搜索一下谷歌,会告诉你如何获取IPv6。 - Nirav Prajapati
最好在应用程序中引入登录功能以唯一识别用户。 - Masudul
(IPv4)地址不会是唯一的,您不能使用它来识别用户。如果他们还没有唯一ID,您可以生成并传回一个唯一的ID。这基本上与会话管理相同。但是,如果他们建立新连接,则可能不会具有该ID,并且您将无法识别他们。 - The Archetypal Paul
@Paul,我无法从我的端生成唯一的ID,因为用户可以通过在手机上“清除数据”并再次请求短信来删除设备中的数据。 - Govind Singh
是的,正是如我所说,你无法识别它们。除非你有某种登录方式,否则你无法做到你所要求的。 - The Archetypal Paul
6个回答

2
正确的表述是他们四个都在NAT防火墙后面,也就是说: 这是大多数家庭/办公室网络连接到互联网的常见方式,原因有两个——它需要较少的公共互联网地址,并且使网络更安全,因为避免将内部资源用于公共地址意味着您更不可能配置错误的防火墙。
缺点是IP地址绝不是用户的唯一ID,这就是Cookie的作用。

0
所有四个用户正在使用同一条互联网线路进行访问。因此,他们所有人的公共IP地址将是相同的。如果您有原生应用程序,则在向服务器发出第一个请求时,应将设备ID与该请求一起发送。除非所有设备上的设备ID相同(非常罕见),否则与IP地址组合的设备ID应该是相当独特的。另一种解决方案是在第一次向服务器发出请求时生成唯一ID(可以使用创建服务器上的会话时生成的JSessionID),并在响应中发送它。然后在所有后续请求中传递唯一ID。
如果您正在使用移动设备的Web浏览器,则可以创建会话(服务器将生成JsessionId cookie)。移动浏览器将负责使用每个请求发送jsessionid cookie。

0

这4个人可能来自同一网络。在这种情况下,对外部网络来说,IP地址将被视为相同的IP地址。


我认为那就是问题所在。 - ug_
@ZanoOnStack 是的,我知道,在问题中我提到他们正在共享同一个WiFi。 - Govind Singh
如果服务器是内部的,那么4个人将拥有不同的IP地址;如果服务器是外部的,那么在同一网络中的4个人将拥有相同的IP地址。 - ZanoOnStack

0

很抱歉,没有简单的方法来识别用户,因为他们总是可以修改发送给您的数据。这就是为什么几乎所有的网络服务都需要登录(他们自己的系统或Facebook、Google等)。然而,问题在于,如果有人注册了足够多的账户,他们可以一直向您发出请求。为了避免这个问题,您可能希望在注册后定期引入Captcha验证。

此外,并不是每个用户都有静态IP,这意味着他们每次被阻止时都可以更改IP(如果我正确理解了问题,如果您通过IP进行阻止)。


0

从一个路由器发送到局域网之外的服务器的请求将全部具有相同的IP地址。这就是为什么会话ID很有用的原因之一。如果您需要一个标识符,即使在同一局域网下的用户也必须唯一,那么您将需要使用会话变量。

考虑查看这篇文章:Play 2.0中的session.id在哪里?

基本上创建您的唯一ID。(代码取自引用的SO post)

// Generate a unique id
String uuid=session("uuid");
if(uuid==null) {
    uuid=java.util.UUID.randomUUID().toString();
    session("uuid", uuid);
}

@GovindSinghNagarkoti 你不能在登录之前创建会话吗?抱歉,我对Play框架不是很熟悉,但考虑到我在其他Web框架上的经验,我认为这是可能的。 - ug_

-2

他们使用IPv6的可能性非常低,只有(非常)少数。这不是OP问题的解决方案。 - The Archetypal Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接