ServletRequest.getRemoteAddr()返回的IP格式是什么

时间:2011-09-28 20:59:47

标签: java servlets format ip-address

ServletRequest.getRemoteAddr()的Javadoc没有提及任何有关返回IP地址格式的内容。实现过滤器时这很烦人。我们可以依靠什么?有没有可以依赖的官方规范?感谢。

3 个答案:

答案 0 :(得分:9)

让我们从ServletRequest#getRemoteAddr() javadoc开始:

  

的getRemoteAddr

    java.lang.String getRemoteAddr()
     

返回发送请求的客户端或最后一个代理的Internet协议(IP)地址。对于HTTP servlet,与CGI变量REMOTE_ADDR 的值相同。

(强调我的)

好的,让我们阅读CGI REMOTE_ADDR spec

  

4.1.8。 REMOTE_ADDR

     

REMOTE_ADDR变量必须设置为向服务器发送请求的客户端的网络地址。

     
   REMOTE_ADDR  = hostnumber
   hostnumber   = ipv4-address | ipv6-address
   ipv4-address = 1*3digit "." 1*3digit "." 1*3digit "." 1*3digit
   ipv6-address = hexpart [ ":" ipv4-address ]
   hexpart      = hexseq | ( [ hexseq ] "::" [ hexseq ] )
   hexseq       = 1*4hex *( ":" 1*4hex )
     

IPv6地址的格式在RFC 3513 [15]中描述。

在那里,你有各种可能的格式。

答案 1 :(得分:1)

它是标准文本表示法中的IPv4或IPv6地址。

  • 对于IPv4,它是熟悉的“点十进制表示法”,例如192.168.254.1。我找不到定义它的RFC。维基百科提到,对任何四边形(甚至是混合和匹配)使用八进制,二进制或十六进制表示法是可以接受的,但我从未见过除十进制之外的其他内容。
  • 对于IPv6,它在RFC-2373中指定。

答案 2 :(得分:0)

我总是以正常的点十进制表示法获取IPv4地址。但最近我注意到,对于某些客户端,HttpServletRequest.getRemoteAddr()返回如下所示的字符串:static。(点分十进制表示法中的IPv4).mydomain.net