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

时间:2014-06-06 09:46:12

标签: java scala playframework request ip

有四个人共享同一个wifi连接, 根据以下定义,IP必须是唯一的 An IP address is a numerical label assigned to each device participating in a computer network that uses the Internet Protocol for communication.

  

Q1。是这样吗?

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

request.remoteAddress

但我为这四个人获得了相同的IP。

  问:如何确定他们?(我应该说他们通过一些令牌来识别它们是唯一的吗?但我会更喜欢独特的IP)

6 个答案:

答案 0 :(得分:2)

正确的措辞是,他们所有4个都是NAT防火墙的后面 - 即;

这是大多数家庭/办公室网络连接到互联网的常用方式,原因有二:它需要的公共互联网地址要少得多,而且它还使网络更安全,因为避免内部资源的公共地址意味着您未能正确配置防火墙的可能性较小。

缺点是IP地址绝不是用户的唯一ID - 这就是Cookie的用途。

答案 1 :(得分:0)

这4个人可能是从同一个网络连接的。在这种情况下,IP地址将被视为外部网络的相同IP地址。

答案 2 :(得分:0)

从路由器发送到该本地网络外部的服务器的请求都将具有相同的IP地址。这是会话ID有用的一个原因。如果您需要一个每个用户必须唯一的标识符,即使它们位于同一本地网络下,您也需要使用会话变量。

考虑一下这篇文章 Where is session.id in Play 2.0?

基本上创建您的唯一ID。 (代码摘自参考SO帖子)

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

答案 3 :(得分:0)

所有4位用户都使用相同的互联网线路进行访问。因此,所有这些的公共IP地址将是相同的。如果您有本机应用程序,那么在第一次请求您对服务器发出请求时,请发送带有请求的设备ID。除非所有设备上的设备ID相同(非常罕见),否则设备ID与IP地址相结合应该是相当独特的。另一个解决方案是,您可以在第一次向服务器发出请求时生成唯一的Id(在服务器上创建会话时可以使用JSessionID)并将其作为响应发送。然后在随后的所有请求中传递唯一ID。

如果您正在使用移动设备的Web浏览器,那么您可以创建会话(JsessionId cookie将由服务器生成)。移动浏览器将负责发送每个请求的jsessionid cookie。

答案 4 :(得分:0)

我担心没有简单的方法来识别用户,因为他们总是可以修改他们发送给您的数据。这就是几乎所有Web服务都需要登录(他们自己的系统或Facebook,Google等)的原因。然而,问题是,如果有人注册了足够的帐户,他们可以一直向您请求。为避免此问题,您可能希望即使在注册后也经常引入验证码验证。

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

答案 5 :(得分:-2)

它们在内部网络上都有唯一的IP地址(如192.168.x.x或其他内部IP地址),详情请参阅http://en.wikipedia.org/wiki/Private_network和RFC1918。 他们通过防火墙/网关连接到公共互联网,进行网络地址转换(详见http://en.wikipedia.org/wiki/Network_address_translation)。

相关问题