Java 获取IP V6客户端时出现错误0:0:0:0:0:1%0
我有这个函数从Java上的请求(HttpServletRequest)中获取主机地址。但是使用Jetty 7.x,我的IP是ipV6,我总是在ipV6地址上出现这个错误 我的职能:Java 获取IP V6客户端时出现错误0:0:0:0:0:1%0,java,ipv6,Java,Ipv6,我有这个函数从Java上的请求(HttpServletRequest)中获取主机地址。但是使用Jetty 7.x,我的IP是ipV6,我总是在ipV6地址上出现这个错误 我的职能: xxxx.getIP(request, false); public static String getIP(HttpServletRequest request, boolean proxy) { String ip = ""; log.debug("X-getHeaderNames ["+ re
xxxx.getIP(request, false);
public static String getIP(HttpServletRequest request, boolean proxy) {
String ip = "";
log.debug("X-getHeaderNames ["+ request.getHeaderNames()+"]");
if (proxy) {
ip = XFordwardedInetAddressUtil.getAddressFromRequest(request);
} else {
String _ip = request.getRemoteAddr();
ip = InetAddresses.forString(_ip).getHostAddress();
}
return ip;
}
错误:
调试:org.encuestame.core.exception.EnMeMappingExceptionResolver-从处理程序[org.encuestame.mvc.controller]解析异常。TweetPollController@4fc23996]:java.lang.IllegalArgumentException:'0:0:0:0:0:1%0'不是IP字符串文字。
java.lang.IllegalArgumentException:'0:0:0:0:0:1%0'不是IP字符串文字。
位于org.encuestame.utils.net.InetAddresses.forString(InetAddresses.java:59)
位于org.encuestame.core.util.EnMeUtils.getIP(EnMeUtils.java:210)
位于org.encuestame.mvc.controller.AbstractBaseOperations.getIpClient(AbstractBaseOperations.java:262)
位于org.encuestame.mvc.controller.TweetPollController.detailTweetPollController(TweetPollController.java:332)
位于org.encuestame.mvc.controller.TweetPollController$$FastClassByCGLIB$$6990b004.invoke()
net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
位于org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedIntercepto
我知道iPv6本地主机格式应为“0:0:0:0:0:0:0:1”,但我的请求始终返回此字符串“0:0:0:0:0:0:1%0”
有人能帮我吗?当你使用电脑时
这是因为计算机需要知道请求来自哪个接口/区域,才能回答正确的接口
如果您使用的是正确配置的Internet可路由IPv6地址,则区域索引将不会是地址的一部分
在这种情况下,我找不到解决本地主机/链接本地测试问题的方法,除了过滤掉%
符号后的任何内容,或者使用链接本地地址解析地址
编辑:。当您使用
这是因为计算机需要知道请求来自哪个接口/区域,才能回答正确的接口
如果您使用的是正确配置的Internet可路由IPv6地址,则区域索引将不会是地址的一部分
在这种情况下,我找不到解决本地主机/链接本地测试问题的方法,除了过滤掉%
符号后的任何内容,或者使用链接本地地址解析地址
编辑:。问题是您使用的类(
org.encuestame.utils.net.InetAddresses
)显然不支持IPv6。尝试使用Joachim在回答中提到的java类。问题是您使用的类(org.encuestame.utils.net.InetAddresses
)显然不支持IPv6。尝试使用Joachim在回答中提到的java类。::1(与0:0:0:0:0:0:1相同)是本地主机地址。它不是链接本地地址(来自fe80::/10)@sandersteffan您当然是对的,尝试查找引用,但是区域索引是可选的/允许的,即使在本地主机地址上也是如此。Tomcat7似乎总是添加它。::1(与0:0:0:0:0:0:1相同)是本地主机地址。它不是链接本地地址(来自fe80::/10)@sandersteffan您当然是对的,尝试查找引用,但是区域索引是可选的/允许的,即使在本地主机地址上也是如此。Tomcat7似乎总是在添加它。