【发布时间】:2015-04-04 19:27:17
【问题描述】:
我正在尝试通过 IPv6 访问网页,但总是收到“NoRouteToHostException: No route to host”。我尝试了以下方法:
println 'http://[2001:4810:0:0:0:0:0:110]:80/'.toURL().text
结果:
Caught: java.net.NoRouteToHostException: No route to host
java.net.NoRouteToHostException: No route to host
at IPv6Tester.run(IPv6Tester.groovy:116)
然后我尝试了:
def authSite = new groovyx.net.http.HTTPBuilder( 'http://[2620:109:c00d:100:0:0:c765:a381]:80/' )
println authSite.get( path: '/search/users' ) { resp, headers ->
println "response status: ${resp.statusLine}"
}
导致:
Apr 04, 2015 9:07:14 PM org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO: I/O exception (java.net.NoRouteToHostException) caught when connecting to {}->http://[2620:109:c00d:100:0:0:c765:a381]:80: No route to host
Apr 04, 2015 9:07:14 PM org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO: Retrying connect to {}->http://[2620:109:c00d:100:0:0:c765:a381]:80
Apr 04, 2015 9:07:14 PM org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO: I/O exception (java.net.NoRouteToHostException) caught when connecting to {}->http://[2620:109:c00d:100:0:0:c765:a381]:80: No route to host
Apr 04, 2015 9:07:14 PM org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO: Retrying connect to {}->http://[2620:109:c00d:100:0:0:c765:a381]:80
Apr 04, 2015 9:07:14 PM org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO: I/O exception (java.net.NoRouteToHostException) caught when connecting to {}->http://[2620:109:c00d:100:0:0:c765:a381]:80: No route to host
Apr 04, 2015 9:07:14 PM org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO: Retrying connect to {}->http://[2620:109:c00d:100:0:0:c765:a381]:80
Caught: java.net.NoRouteToHostException: No route to host
java.net.NoRouteToHostException: No route to host
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:71)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:220)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:164)
at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:515)
at groovyx.net.http.HTTPBuilder.get(HTTPBuilder.java:285)
at groovyx.net.http.HTTPBuilder$get.call(Unknown Source)
at IPv6Tester.run(IPv6Tester.groovy:120)
Jsoup 也是如此:
def profilePage = Jsoup.connect('http://[2001:4810:0:0:0:0:0:110]:80/').userAgent(USER_AGENT).timeout(TIMEOUT).get()
Caught: java.net.ConnectException: No route to host
java.net.ConnectException: No route to host
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:439)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:167)
at org.jsoup.Connection$get$1.call(Unknown Source)
at IPv6Tester.run(IPv6Tester.groovy:126)
顺便说一句。如果我打开一个从我的 IPv6 到远程 IPv6 的套接字,我可以读取根页面(但不是服务器上的特定路径)。
我假设我必须使用绑定了本地 IPv6 地址的 Socket 来访问远程 IPv6 地址,但我找不到这样做的方法。任何帮助将不胜感激!
【问题讨论】:
-
您是如何设置“您的”IPv6 地址的? IPv6 路由是什么?
-
使用我使用的套接字 socket.bind(new InetSocketAddress(localIPAddress, 0));其中 localIPAddress 是在“en0”的 NetworkInterface Addresses 中找到的第一个 Inet6Adress。我没有设置这个 Inet6Adress / Socket,因为我不知道如何/在哪里设置它。
-
单靠代码无法解决这个问题;这是操作系统级别的问题,更准确地说是网络路由问题。为此,您需要深入研究您的操作系统配置,从网络路由开始。
-
我希望有一种方法可以以某种方式将 IPv6 套接字“注入”到其中一个 HTTP 库中。有Linux上配置网络路由的链接吗?
-
不是一个特定的链接,不;但是你想调试
ip route show的输出例如。但是这个问题确实在服务器故障上占有一席之地,而不是在这里。
标签: java sockets http groovy ipv6