【问题标题】:How to access website via IPv6 with Groovy or Java如何使用 Groovy 或 Java 通过 IPv6 访问网站
【发布时间】: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


【解决方案1】:

您收到的错误“No route to host”是正确的。

您尝试访问的 IP 地址均不可路由,也无法从全球互联网访问。

要解决此问题,请连接到有效的实时 IPv6 地址。

【讨论】:

  • 我不明白你的意思。我使用套接字连接到 IPv6 地址并可以从中读取(即,获取“主页”/根页面)。我使用了“ipv6.whatismyv6.com”和“linkedin.com”的 IPv6 地址。两者都有效,因此我认为服务器是活动的并且可以从我的计算机连接。还是您的意思是必须以另一种(“有效”)格式说明 IPv6 地址 - 如果是这样,哪种格式才是有效格式?
  • 也许他们只能从您的位置到达?我无法从美国联系到他们
猜你喜欢
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 2023-03-17
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多