问题标签 [nat-traversal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
558 浏览

qt - 在 Qt 上通过 Internet 进行点对点

我需要在应用程序之间进行点对点通信。

应用程序还应在互联网上自动找到彼此。为此,除其他外,我需要克服NAT Traversal,等等。

例如,我需要使用如下通信:

那么最好有一些方法来访问这样的连接QTcpSocketor QUdpSocket

如何在 Qt 和 c++ 上做到这一点?

0 投票
1 回答
23 浏览

ssh - 打开网络,无法连接到我的设备(两台linux笔记本电脑和Android智能手机,),最好是SHH

我将在有开放无线网络的酒店住一段时间。我的主要笔记本电脑(Linux Mint 19.3)出现键盘问题,需要更换,因为许多键都不起作用。同时,我想通过 SSH 与另一台笔记本电脑连接到我的主笔记本电脑。网络似乎有客户端隔离,我希望能得到一些解决方法的帮助。请问有什么建议吗?我研究过 ngrok、ssh 转发、遍历。感谢您的时间。

0 投票
1 回答
251 浏览

webrtc - addicecandidate 是否应该添加空字符串 icecandidate?

我的问题是关于 webrtc 协商。

许多在线教程和 MDN 中描述的内容存在矛盾。

在 MDN 中,它说链接

在每一代候选者结束时,以候选者属性为空字符串的 RTCIceCandidate 形式发送候选者结束通知。仍然应该像往常一样使用 addIceCandidate() 方法将此候选者添加到连接中,以便将该通知传递给远程对等方。

如果在当前协商交换期间根本没有更多候选者,则通过传递候选者属性为空的 RTCIceCandidate 来发送候选者结束通知。此消息不需要发送到远程对等方。这是一个状态的遗留通知,可以通过观察 iceGatheringState 更改为完成,通过观察 icegatheringstatechange 事件来检测。

但是,在这里的教程中,他们介绍了以下代码

如果 Candidate 是一个空字符串,它将被评估为 falsy 并且不会通过sendToServer.

更有趣的是,即使在同一篇文章

他们有以下示例代码

但是在这个片段的正下方,他们说

当 ICE 谈判会话中没有候选人为给定的 RTCIceTransport 提出建议时,它已经完成了一代候选人的收集。这由一个候选字符串为空 ("")的 icecandidate 事件指示。

您应该像任何标准候选人一样将其交付给远程对等方,如上面共享新候选人中所述。这可确保远程对等方也收到候选结束通知。

实际上,我阅读了许多在线教程,但我从未见过他们处理空字符串候选者的任何地方。

0 投票
1 回答
66 浏览

python - 在python中不同局域网之间发送数据

我已经尝试了两个星期来创建一个 Python 脚本,即使从不同的 LAN 运行,它也会与自身通信。

但我无法执行 NAT 穿越。我试图检查出了什么问题,至少套接字timeout不再存在,但我无法接收数据。

我认为问题可能是 NAT 将发送和接收映射到不同的端口,但如果确实是问题,不知道如何检查或修复它。

代码:

你能给我一个执行 nat 遍历并可以发送和接收消息的 Python 脚本的例子吗?

提前致谢 (:

0 投票
0 回答
91 浏览

networking - 对称 NAT 穿越

假设有 2 个对等点,A 和 B,每个都在一个对称 NAT 下,并具有随机端口分配。

如果 A 在特定端口上向 B 的地址发送数据包,则 NAT 会将请求映射到它的公共 IP 地址和随机端口。

如果 A 一直在同一端口上向 B 的地址发送数据包,则 NAT 将继续使用相同的 IP 地址和端口组合。

如果 A 决定在不同的端口向 B 的地址发送数据包,则 NAT 将随机分配另一个端口来发送数据包。

当 A 向 B 发送一个数据包时,如果它是从 A 发送消息的端口发送的,并且如果它具有 A 的 NAT 映射的地址/端口作为目标,则 NAT 将允许来自 B 的回复通过。

理论上,如果 A 在其每个端口 (0-65535) 上向 B 发送数据包,A 允许来自 B 的任何端口的回复通过,但只有当 B 向其中一个地址发送数据包时,回复才会通过/port 由 A 的 NAT 映射,同时发送 65535 个数据包。

如果 B 向 A 的每个端口 (0-65535) 发送数据包,B 很可能会设法找到 A 的 NAT 映射的端口之一,因此将通过 A 的防火墙。

这对你们有意义还是我错过了一点?我一直在尝试使用这种技术在对称 NAT 下连接 2 个对等点,但还没有成功。

0 投票
1 回答
89 浏览

ssh - Shellhub 使用 SSHID 连接到设备

我已经安装了 shellhub 并将 shellhub 的 ssh 端口配置为 2222,因为我在端口 22 上运行了 ssh-server 我尝试使用下面的命令使用它的 SSHID 连接到我的设备之一:

但得到: Permission denied, please try again.

感谢您的帮助。

0 投票
1 回答
123 浏览

nat - LibTorrent Nat 遍历

我正在尝试通过add_peer()LibTorrent 中的功能连接到对等点。但是,如果我要从中下载文件的对等方位于 NAT 之后怎么办?Libtorrent 中是否有 NAT Traversal 功能?

0 投票
0 回答
168 浏览

go - 如何实现UDP打孔?

所以我正在尝试在 Golang 中创建一个 p2p 文件共享应用程序。我正在运行一个可全局访问的服务器,目的是共享 2 个客户端的 IP 地址。当两个客户端都有彼此的 IP 地址时,他们可以使用打孔来共享文件。

但是我在打孔部分面临一些问题。当我向服务器发送请求时,服务器将存储客户端的地址,稍后会将这个地址转发给其他客户端。问题是存储在服务器上的地址与用于打孔的地址不同。假设存储在服务器上的地址是第一个客户端的 NATrouterIP1:PORT-A 和第二个客户端的 NATrouterIP2:PORT-B。但是当我使用第一个客户端向第二个客户端发送消息时,它显示该消息是从 NATRouterIP1:PORT-C 发送的。PORT-A 通常保持在 65000 左右。但是这个 PORT-C 是 1024。对于我的应用程序来说,这些端口应该是相同的。有人可以解释问题是什么吗?

Github:https ://github.com/killtheverse/go-send

0 投票
2 回答
718 浏览

webrtc - 为什么 WebRTC 不能与对称 NAT 一起使用?

假设我们有两个对等点 - A 和 B - 试图通过对称 NAT 建立 WebRTC 对等点连接。他们通过信号交换了 ICE 候选人。

A 的公共地址:IP_A:Port_A
B 的公共地址:IP_B:Port_B

首先,A 尝试连接到 B
IP_A : Port_A ---> IP_B : Port_B

然而,该请求被 B 的 NAT 拒绝。只有 B 的 STUN 服务器可以在该地址连接 B。

接下来轮到B了。
IP_B : 端口_B ---> IP_A : 端口_A

但是在这里,不应该建立连接吗?因为,当 A 第一次向 B 发送请求时,Peer A 的 NAT 表应该已经注册了 Peer B 的地址。因此,必须接受 B 的任何响应。但是,当然,它似乎不起作用。那么,我哪里错了?

0 投票
0 回答
105 浏览

p2p - BitTorrent / P2P NAT 穿越?

我在禁用端口转发/UPnP 的 NAT 防火墙后面使用传输 BitTorrent 客户端和 Retroshare。但是,我似乎仍然能够接受这些程序的传入连接,我很好奇这是怎么可能的。在传输的情况下,我可以在某些对等点上看到“I”标志,这表明它们是传入连接。在 Retroshare 的情况下,我可以与同样位于 NAT 防火墙后面的朋友联系。有谁知道这是如何从防火墙后面实现的?传输(可能还有其他 P2P 客户端)是否在进行某种 NAT 遍历?他们可能使用什么样的 NAT 穿越?