使用 WebSocket 接口调用 IPV6 IP

Posted

技术标签:

【中文标题】使用 WebSocket 接口调用 IPV6 IP【英文标题】:Calling IPV6 IP using WebSocket interface 【发布时间】:2015-11-06 05:26:11 【问题描述】:

[我已将此问题标记为由版主删除,直到我得到this问题的答案]

我的 javascript 客户端在通过带有 IPV4 IP 地址的 WebSocket 接口与 node.js(在 Ubuntu 上,更多 here)服务器通信时工作正常。

即使我的托管服务提供商已准备好为我分配 IPV4,让我改用 IPV6,因为现在 IPV4 的供应有限。

使用 IPV6 IP 时出现此错误:

WebSocket 连接到 'ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333/' 失败:连接建立错误: 网络::ERR_ADDRESS_UNREACHABLE

我已经使用工具检查了端口 31333 确实打开了:http://www.subnetonline.com/pages/ipv6-network-tools/online-ipv6-port-scanner.php

我什至尝试过IPv6 address giveing syntax error in internet explorer-10 websocket 中的解决方案——即:2600-3c00-0-0-f03c-91ff-fe73-2b08.ipv6-literal.net

我已经运行了这个客户端,并且当两者都在基于 Ubuntu 的远程服务器上运行时能够连接到服务器:

var WebSocket = require('ws')
  , ws = new WebSocket('ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333');
ws.on('open', function() 
    ws.send('something');
);
ws.on('message', function(message) 
    console.log('received: %s', message);
);

但是,当我从家里的 Windows 7 运行相同的客户端,而服务器是远程 Ubuntu 时,它无法连接:

> $ node c2.js events.js:85
>       throw er; // Unhandled 'error' event
>             ^ Error: connect ENETUNREACH
>     at exports._errnoException (util.js:746:11)
>     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1010:19)

我什至在 Google Chrome 中运行过这段代码:

var ws = new WebSocket("ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333");

ws.onerror = function(err)
 
    console.log(err);
    alert("Connection is error..."); 
;

但我得到了同样的错误:

WebSocket 连接到 'ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333/' 失败:连接建立错误: net::ERR_ADDRESS_UNREACHABLE websocket.html:37 事件

可能是什么问题?

PS:目前我已经在 31333 端口停止了服务器。

【问题讨论】:

您是否检查过您的防火墙是否阻止访问?例如。如果您将 IP 用于 localhost 侦听本地 IPv6 地址,则连接到 ws://[::1]:31333 似乎可以按预期工作(Chrome 44.0.2403.125,Linux)。 目前客户端服务器可以在同一台服务器上进行通信。 您的(本地)网络连接是否支持 IPv6? 在我的 Win7 PC 的本地连接属性中检查了 TCP/IPv6。而且我无法从我尝试过的 3 台 Windows-7 计算机上 ping 到 ipv6.google.com。 所以当您使用ping -6 ipv6.google.com(或在Linux 上:ping6 ipv6.google.com)时没有收到回复?那么你就发现了你的问题,你应该尝试获得 IPv6 连接(这不是 Chrome 或你的应用程序的问题,而是你的网络的问题)。 【参考方案1】:

您的 Realtek PCIe GBE 系列控制器上未启用 IPv6。如果是的话,ipconfig 结果中会出现一行“Link-local IPv6 Address”。

转到控制面板>网络>更改适配器设置>右键单击适配器>属性。检查 IPv6。

【讨论】:

试图以超级用户的身份发布此答案,但由于该问题在此处被标记为重复,因此无法发布。 没错,ipconfig 发布的结果表明系统上没有配置 IPv6。【参考方案2】:

需要在系统上启用 IPv6,并且它与 ISP 之间的每个路由器都需要启用,并且 ISP 必须准备好 IPv6 并将其提供给最终用户。 nslookup 起作用的原因是它只是返回 AAAA 记录,而不是实际通过 IPv6 连接。 IPv4 不能直接与 IPv6 通信,反之亦然。您无法使用 IPv4 主机 ping IPv6 主机。

【讨论】:

以上是关于使用 WebSocket 接口调用 IPV6 IP的主要内容,如果未能解决你的问题,请参考以下文章

如何从C程序为接口设置ipv6地址

IPV6 基础配置

IPV6 基础配置

使用netlink的ipv6本地地址

IPv6和第二层寻址,以及接口要求

ip用法