没有 ice/stun/turn 服务器的隔离 LAN 上的 WebRTC
WebRTC on isolated LAN without ice/stun/turn server
在孤立的 LAN 上,有什么方法可以简单地使用 DHCP 服务器分配的 IP 地址建立 WebRTC 连接?
我知道我可以用 Node.js 和 Socket.io 来完成这个 - 但我真的希望避免用我有限的技能设置那种服务器。我是一名涉猎编程的科学老师,所以请随意保持简单。谢谢!
更新
Alex,你是对的,如果所有计算机都在同一个本地网络上,我可以避免使用 STUN 服务器。虽然我不得不硬着头皮在我的笔记本电脑上安装 Node.js,但其实并不复杂。然后我尝试了一大堆 'working examples' 对我不起作用,直到我找到 this one and his GitHub files.
在 运行 Node 中的服务器脚本之后,我在同一台机器上的两个浏览器 windows 之间建立了 DataChannel
连接,但不同计算机之间没有。我编辑了 .html 文件以指向我的本地服务器 IP 地址而不是 localhost,然后我可以连接多台计算机。然后是真正的测试——我可以在没有互联网连接的情况下使用它吗?我找到了使用 Google 的 STUN 服务器指定的行并将其从
更改为
var config = {"iceServers":[{"url":"stun:stun.l.google.com:19302"}]};
刚好
var config = {"iceServers":[]};
成功了。 :-)
省略 iceServers
列表:
const pc = new RTCPeerConnection();
从 RTCPeerConnection
构造函数中省略 iceServers
列表,或者将其设为空列表 []
.
来自 RTCPeerConnection 文档:
iceServers | optional
An array of RTCIceServer
objects, each describing one server which may be used by the ICE agent; these are typically STUN and/or TURN servers. If this isn't specified, the connection attempt will be made with no STUN or TURN server available, which limits the connection to local peers.
webrtc/samples 演示
WebRTC project has a Trickle ICE 示例,您可以使用它来查看 iceServers
中的变化如何影响收集到的候选地址。你想看的具体样本是。
运行 通过按页面底部的 收集候选人 按钮设置默认值。这将 return 一个地址列表,其中包括 NAT public 端的地址。
现在从列表中删除所有 ICE 服务器并再次按 收集候选人,这次你应该只能看到本地网络地址。
请注意,在我的网络上,2 public IPv4 地址(以 98 开头)仅在我使用默认 ICE 服务器时出现。当我使用一个空的 ICE 服务器列表时,我的 public IPv4 地址不再被发现。另一方面,我的 IPv6 地址在两次测试中都是相同的,因为它们不受 NAT 约束。
这里是link to the source code that sets up iceServers and PeerConnection.
Alex,你是对的,如果所有计算机都在同一个本地网络上,我可以避免使用 STUN 服务器。虽然我不得不硬着头皮在我的笔记本电脑上安装 Node.js,但其实并不复杂。然后我尝试了一大堆 'working examples' 对我不起作用,直到我找到这个和他的 GitHub 文件。
在 运行 Node 中的服务器脚本之后,我在同一台机器上的两个浏览器 windows 之间建立了 DataChannel 连接,但在不同计算机之间没有。我编辑了 .html 文件以指向我的本地服务器 IP 地址而不是 localhost,然后我可以连接多台计算机。然后是真正的测试——我可以在没有互联网连接的情况下使用它吗?我找到了使用 Google 的 STUN 服务器指定的行并将其从
更改为
var config = {"iceServers":[{"url":"stun:stun.l.google.com:19302"}]};
只是
var config = {"iceServers":[]};
在孤立的 LAN 上,有什么方法可以简单地使用 DHCP 服务器分配的 IP 地址建立 WebRTC 连接?
我知道我可以用 Node.js 和 Socket.io 来完成这个 - 但我真的希望避免用我有限的技能设置那种服务器。我是一名涉猎编程的科学老师,所以请随意保持简单。谢谢!
更新
Alex,你是对的,如果所有计算机都在同一个本地网络上,我可以避免使用 STUN 服务器。虽然我不得不硬着头皮在我的笔记本电脑上安装 Node.js,但其实并不复杂。然后我尝试了一大堆 'working examples' 对我不起作用,直到我找到 this one and his GitHub files.
在 运行 Node 中的服务器脚本之后,我在同一台机器上的两个浏览器 windows 之间建立了 DataChannel
连接,但不同计算机之间没有。我编辑了 .html 文件以指向我的本地服务器 IP 地址而不是 localhost,然后我可以连接多台计算机。然后是真正的测试——我可以在没有互联网连接的情况下使用它吗?我找到了使用 Google 的 STUN 服务器指定的行并将其从
var config = {"iceServers":[{"url":"stun:stun.l.google.com:19302"}]};
刚好
var config = {"iceServers":[]};
成功了。 :-)
省略 iceServers
列表:
const pc = new RTCPeerConnection();
从 RTCPeerConnection
构造函数中省略 iceServers
列表,或者将其设为空列表 []
.
来自 RTCPeerConnection 文档:
iceServers | optional
An array of
RTCIceServer
objects, each describing one server which may be used by the ICE agent; these are typically STUN and/or TURN servers. If this isn't specified, the connection attempt will be made with no STUN or TURN server available, which limits the connection to local peers.
webrtc/samples 演示
WebRTC project has a Trickle ICE 示例,您可以使用它来查看 iceServers
中的变化如何影响收集到的候选地址。你想看的具体样本是。
运行 通过按页面底部的 收集候选人 按钮设置默认值。这将 return 一个地址列表,其中包括 NAT public 端的地址。
现在从列表中删除所有 ICE 服务器并再次按 收集候选人,这次你应该只能看到本地网络地址。
请注意,在我的网络上,2 public IPv4 地址(以 98 开头)仅在我使用默认 ICE 服务器时出现。当我使用一个空的 ICE 服务器列表时,我的 public IPv4 地址不再被发现。另一方面,我的 IPv6 地址在两次测试中都是相同的,因为它们不受 NAT 约束。
这里是link to the source code that sets up iceServers and PeerConnection.
Alex,你是对的,如果所有计算机都在同一个本地网络上,我可以避免使用 STUN 服务器。虽然我不得不硬着头皮在我的笔记本电脑上安装 Node.js,但其实并不复杂。然后我尝试了一大堆 'working examples' 对我不起作用,直到我找到这个和他的 GitHub 文件。
在 运行 Node 中的服务器脚本之后,我在同一台机器上的两个浏览器 windows 之间建立了 DataChannel 连接,但在不同计算机之间没有。我编辑了 .html 文件以指向我的本地服务器 IP 地址而不是 localhost,然后我可以连接多台计算机。然后是真正的测试——我可以在没有互联网连接的情况下使用它吗?我找到了使用 Google 的 STUN 服务器指定的行并将其从
更改为var config = {"iceServers":[{"url":"stun:stun.l.google.com:19302"}]};
只是
var config = {"iceServers":[]};