问题标签 [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.
qt - 在 Qt 上通过 Internet 进行点对点
我需要在应用程序之间进行点对点通信。
应用程序还应在互联网上自动找到彼此。为此,除其他外,我需要克服NAT Traversal
,等等。
例如,我需要使用如下通信:
那么最好有一些方法来访问这样的连接QTcpSocket
or QUdpSocket
。
如何在 Qt 和 c++ 上做到这一点?
ssh - 打开网络,无法连接到我的设备(两台linux笔记本电脑和Android智能手机,),最好是SHH
我将在有开放无线网络的酒店住一段时间。我的主要笔记本电脑(Linux Mint 19.3)出现键盘问题,需要更换,因为许多键都不起作用。同时,我想通过 SSH 与另一台笔记本电脑连接到我的主笔记本电脑。网络似乎有客户端隔离,我希望能得到一些解决方法的帮助。请问有什么建议吗?我研究过 ngrok、ssh 转发、遍历。感谢您的时间。
webrtc - addicecandidate 是否应该添加空字符串 icecandidate?
我的问题是关于 webrtc 协商。
许多在线教程和 MDN 中描述的内容存在矛盾。
在 MDN 中,它说链接
在每一代候选者结束时,以候选者属性为空字符串的 RTCIceCandidate 形式发送候选者结束通知。仍然应该像往常一样使用 addIceCandidate() 方法将此候选者添加到连接中,以便将该通知传递给远程对等方。
如果在当前协商交换期间根本没有更多候选者,则通过传递候选者属性为空的 RTCIceCandidate 来发送候选者结束通知。此消息不需要发送到远程对等方。这是一个状态的遗留通知,可以通过观察 iceGatheringState 更改为完成,通过观察 icegatheringstatechange 事件来检测。
但是,在这里的教程中,他们介绍了以下代码
如果 Candidate 是一个空字符串,它将被评估为 falsy 并且不会通过sendToServer
.
更有趣的是,即使在同一篇文章中
他们有以下示例代码
但是在这个片段的正下方,他们说
当 ICE 谈判会话中没有候选人为给定的 RTCIceTransport 提出建议时,它已经完成了一代候选人的收集。这由一个候选字符串为空 ("")的 icecandidate 事件指示。
您应该像任何标准候选人一样将其交付给远程对等方,如上面共享新候选人中所述。这可确保远程对等方也收到候选结束通知。
实际上,我阅读了许多在线教程,但我从未见过他们处理空字符串候选者的任何地方。
python - 在python中不同局域网之间发送数据
我已经尝试了两个星期来创建一个 Python 脚本,即使从不同的 LAN 运行,它也会与自身通信。
但我无法执行 NAT 穿越。我试图检查出了什么问题,至少套接字timeout
不再存在,但我无法接收数据。
我认为问题可能是 NAT 将发送和接收映射到不同的端口,但如果确实是问题,不知道如何检查或修复它。
代码:
你能给我一个执行 nat 遍历并可以发送和接收消息的 Python 脚本的例子吗?
提前致谢 (:
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 个对等点,但还没有成功。
ssh - Shellhub 使用 SSHID 连接到设备
我已经安装了 shellhub 并将 shellhub 的 ssh 端口配置为 2222,因为我在端口 22 上运行了 ssh-server 我尝试使用下面的命令使用它的 SSHID 连接到我的设备之一:
但得到: Permission denied, please try again.
感谢您的帮助。
nat - LibTorrent Nat 遍历
我正在尝试通过add_peer()
LibTorrent 中的功能连接到对等点。但是,如果我要从中下载文件的对等方位于 NAT 之后怎么办?Libtorrent 中是否有 NAT Traversal 功能?
go - 如何实现UDP打孔?
所以我正在尝试在 Golang 中创建一个 p2p 文件共享应用程序。我正在运行一个可全局访问的服务器,目的是共享 2 个客户端的 IP 地址。当两个客户端都有彼此的 IP 地址时,他们可以使用打孔来共享文件。
但是我在打孔部分面临一些问题。当我向服务器发送请求时,服务器将存储客户端的地址,稍后会将这个地址转发给其他客户端。问题是存储在服务器上的地址与用于打孔的地址不同。假设存储在服务器上的地址是第一个客户端的 NATrouterIP1:PORT-A 和第二个客户端的 NATrouterIP2:PORT-B。但是当我使用第一个客户端向第二个客户端发送消息时,它显示该消息是从 NATRouterIP1:PORT-C 发送的。PORT-A 通常保持在 65000 左右。但是这个 PORT-C 是 1024。对于我的应用程序来说,这些端口应该是相同的。有人可以解释问题是什么吗?
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 的任何响应。但是,当然,它似乎不起作用。那么,我哪里错了?
p2p - BitTorrent / P2P NAT 穿越?
我在禁用端口转发/UPnP 的 NAT 防火墙后面使用传输 BitTorrent 客户端和 Retroshare。但是,我似乎仍然能够接受这些程序的传入连接,我很好奇这是怎么可能的。在传输的情况下,我可以在某些对等点上看到“I”标志,这表明它们是传入连接。在 Retroshare 的情况下,我可以与同样位于 NAT 防火墙后面的朋友联系。有谁知道这是如何从防火墙后面实现的?传输(可能还有其他 P2P 客户端)是否在进行某种 NAT 遍历?他们可能使用什么样的 NAT 穿越?