使用 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的主要内容,如果未能解决你的问题,请参考以下文章