2012-10-06 111 views
0

我有此功能可以從我的請求(HttpServletRequest)獲取HostAddress。但使用Jetty 7.x和我的IP是IPV6我總是有iPv6地址這個錯誤。錯誤0:0:0:0:0:0:0:1%0獲得IP V6客戶端

我的功能:

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; 
} 

錯誤:

DEBUG: org.encuestame.core.exception.EnMeMappingExceptionResolver - Resolving exception from handler [[email protected]]: java.lang.IllegalArgumentException: '0:0:0:0:0:0:0:1%0' is not an IP string literal. java.lang.IllegalArgumentException: '0:0:0:0:0:0:0:1%0' is not an IP string literal. at org.encuestame.utils.net.InetAddresses.forString(InetAddresses.java:59) at org.encuestame.core.util.EnMeUtils.getIP(EnMeUtils.java:210) at org.encuestame.mvc.controller.AbstractBaseOperations.getIpClient(AbstractBaseOperations.java:262) at org.encuestame.mvc.controller.TweetPollController.detailTweetPollController(TweetPollController.java:332) at org.encuestame.mvc.controller.TweetPollController$$FastClassByCGLIB$$6990b004.invoke() at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191) at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedIntercepto

我知道IPv6的本地主機格式應爲 '0:0:0:0:0:0:0:1',但我的請求總是返回此字符串'0:0:0:0:0:0:0:1%0'

任何人都可以幫助我?

回答

3

問題是您正在使用的類(org.encuestame.utils.net.InetAddresses)顯然不支持IPv6。嘗試使用Joachim在他的答案中提到的java InetAddress類。

+0

謝謝,完美無缺! –

2

當您使用link local address, the % should be included in the address時。

這是由於計算機需要知道請求來自哪個接口/區域才能夠回覆正確的接口。

如果您使用正確配置的Internet路由IPv6地址,則區域索引將不會成爲地址的一部分。

在這種情況下,我看不到的方式來解決您的本地主機的問題/鏈路本地測試除了%符號後過濾掉任何東西,或使用another class與鏈路本地地址的作品來解析地址。

編輯:Here's another - similar - question I didn't see earlier

+0

:: 1(與0:0:0:0:0:0:0:1相同)是localhost地址。它不是一個鏈接本地地址(來自fe80 ::/10) –

+0

@SanderSteffann你當然想要找到一個引用,但是區域索引是可選/允許的,即使在本地主機地址上也是如此。 Tomcat7似乎總是添加它。 –

相關問題