ServletRequest.getRemoteAddr()的Javadoc没有提及任何有关返回IP地址格式的内容。实现过滤器时这很烦人。我们可以依靠什么?有没有可以依赖的官方规范?感谢。
答案 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地址。
192.168.254.1
。我找不到定义它的RFC。维基百科提到,对任何四边形(甚至是混合和匹配)使用八进制,二进制或十六进制表示法是可以接受的,但我从未见过除十进制之外的其他内容。答案 2 :(得分:0)
我总是以正常的点十进制表示法获取IPv4地址。但最近我注意到,对于某些客户端,HttpServletRequest.getRemoteAddr()返回如下所示的字符串:static。(点分十进制表示法中的IPv4).mydomain.net