Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取IP V6客户端时出现错误0:0:0:0:0:1%0_Java_Ipv6 - Fatal编程技术网

Java 获取IP V6客户端时出现错误0:0:0:0:0:1%0

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

我有这个函数从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 ["+ 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似乎总是在添加它。