问题标签 [hole-punching]
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.
networking - TCP/UDP 打孔和混合 P2P + 客户端/服务器架构
我有一个混合架构,其中 A 是试图从 B 请求内容的客户端,B 是可能位于 NAT 后面的服务器(尽管不一定)。S 是一个服务器,充当 A 和 B 之间的中间人,以下列方式使用打孔:
A联系S并说我想从B那里得到一些东西。S给了A B最后知道的IP地址和端口,A开始尝试联系B。同时,S给了B A的IP地址和端口,B开始尝试联系 A。
S不会充当中继服务器;相互连接后,所有通信都将在 A 和 B 之间直接连接。如果无法直接连接,则连接将失败。UDP和TCP都有这个问题。
我的问题是,让 S 与 B 的 IP 地址和端口保持同步的最有效方法是什么,以便任何数量的 As 可以随时连接到 B。我还希望解决方案能够处理这样一种情况,如果 B 背后的 NAT 与端口混淆(例如将它们增加 1),我将能够“猜测”端口的实际情况是。
我想到的解决方案(但我并不完全满意):
通过每 X 秒从 B 向 S 发送一个请求,用 B 的 IP 地址和端口更新 S。我的问题是,如果 X 太高,S 将没有 B 的正确信息,如果太低,则会对 B 和 S 施加开销。我怀疑这最终会成为最终答案,并且诀窍是为 X 找到合适的值。
sip - 基于 3G 网络的 VOIP
我创建了一个类似 STUN 的 + 集合服务器。我已经通过 WIFI(在国内 NAT 之后)尝试了整个过程,一切正常。我有两个移动 ISP,一个允许一切(VOIP + P2P + MODEM)(ISP 1),另一个允许除 P2P 之外的一切(ISP 2)。
在尝试 ISP 1 时,它也可以正常工作。但是,当我尝试使用 ISP 2 时,udp 数据包无法通过。
我已将我的计算机与 ISP 2 上的电话连接,并运行 TUM NAT Analyzer。
它在告诉我
因此,显然它使用的是具有随机端口影响的对称 NAT(显然无法使用端口预测)。
所以我想知道,一个允许 VOIP 但不允许 P2P(并且没有 SIP ALG)的 ISP,它是否希望 VOIP 使用中继服务器才能工作?
还是我错过了什么……?据我了解,AT&T(可能还有其他人)使用与我的 ISP 2 相同类型的 NAT ......(对称 NAT)所以这成为一个大问题,我猜......
但是,任何人,想法,反应都会很棒。
networking - 如何控制对等端的套接字[TCP打孔]
我有一个使用 TCP 连接进行通信的服务器客户端程序。多个客户端可以同时连接到服务器。我想在这个系统上实现 tcp 打孔。
在客户端,它调用公共服务器来查找我服务器的公共 ip、端口。然后连接到它。
但是在服务器端,它必须打开一个端口来连接公共服务器,并且它还必须在同一端口上接受客户端的连接请求。
我要做的是打开一个套接字并绑定到端口X,然后连接到公共服务器,然后将此套接字更改为侦听状态以接受传入的连接一段时间,然后再次开始与公共服务器的连接,结束和结束。
这是正确的方法吗?
编辑:我有另一个想法。就是打开一个新的端口,连接到公共服务器。主服务器端口照常监听传入连接。当客户端想要连接时,公共服务器将通过新端口告诉我的服务器。它将停止主端口侦听传入连接,而是连接到客户端进行打孔。然后它连接到公共服务器,它将服务器公共IP地址转发给客户端,并像往常一样回去监听传入的连接。然后客户端将使用这个地址连接到已经打开 TCP 漏洞的服务器。
openerp - 将生物识别设备输出连接到 Open ERP 6.1
是否可以将生物识别设备输出直接连接到 openERP?
我们公司有一个生物识别指纹机,在一天结束时,我们有一个包含所有员工出勤记录的 Excel 表。我们将这个excel表导入openERP。
但是无论如何,每当员工使用他们的指纹读取器时,记录就会被添加到 openERP 或数据库中。这样我们就不用每天一张一张地导入excel表格了。
感谢您的时间
p2p - 通过蜂窝 ISP 进行对等连接的 IP 欺骗
出于 Voip 的目的,我正在寻找创建点对点连接的方法。
我已经使用类似 STUN 的服务器来将 2 个对等点连接在一起。它适用于大多数 NAT,但正如预期的那样,这种技术不适用于对称 NAT 和随机端口影响。
不幸的是,大多数蜂窝网络使用对称 NAT(即使它们允许 VOIP)。
所以我想知道,如果每个客户端都向我的集合点服务器发送一个 UDP 数据包,以便相互交换每个信息(ip - 端口),它会起作用吗?然后从每个客户端执行“ip-spoofing”技术,让其他 Peer 的 NAT 认为数据来自我自己的集合服务器的 ip。(因为在每个 Nat 上打开了带有传出数据的端口)
它可以让我避免创建一个仅使用带宽将数据从一个对等点传递到另一个对等点的代理服务器。
c++ - UDP 打孔 (c++/winsock)
堆栈溢出用户!
我有一个必须处理 p2p 的应用程序,这就是我进行 UDP 打孔的方式。但我在实施时遇到了麻烦。希望你能给我一些建议。
我有服务器,它运行完美,可以互相介绍客户端,但客户端无法连接可能是因为我的小 exp 使用套接字。所以,客户端算法是:
- 创建 udp 套接字 ( socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); )
- 通过sendto函数向服务器发送消息
- 使用recvfrom储物柜功能从服务器获取答案
在这 3 个步骤之后,我得到了对等端点。接下来,我尝试以两种方式连接客户端:
方式1:
- 使用同一个套接字通过sendto函数向对等方发送数据,但传递另一个sockaddr
- 使用recvfrom储物柜功能收听(此时我收到WSAECONNRESET错误)
方式2:
- 创建新套接字
- 绑定它
- 使用它向对等方发送数据
- 听
这样,一个客户端绑定失败,另一个客户端监听失败,并出现WSAEADDRINUSE和WSAECONNRESET错误。我显然做错了什么,您的帮助将不胜感激。提前致谢。
PS想分享一篇关于UDP打孔的好文章,以帮助那些不熟悉这种技术的人:http ://www.brynosaurus.com/pub/net/p2pnat/
php - 使用 Tinybrick 的 Lightspeed 进行高级打孔
我有一种被 Tinybrick 称为“高级打孔”的情况,但我似乎无法让它发挥作用。我们最近安装了 Aheadworks 的订阅和定期付款扩展。此扩展允许客户定期订阅他们购买的产品,并扩展了 PayPal 的定期配置文件的功能。为此,产品视图页面上的addtocart块需要是动态的。根据客户是否登录以及相关产品的具体细节决定addtocart块中显示的内容。
使用 Lightspeed 打孔,我已经能够填充页面上的各种动态块(顶部链接、标题购物车、相关产品等)。这个块的问题在于它取决于Mage::registry('current_product')
值。当 Lightspeed 返回一个缓存页面时,它不会运行完整的 Magento 代码,current_product
也没有设置注册表值。我找不到使这项工作的方法。
我向 Tinybrick 发送了一封电子邮件,并收到了以下回复:
对于像这样的高级打孔,您必须通过控制器中的 API / SOAP 进行调用。基本上,您会调用所需的任何信息,然后使用该信息来显示您的动态内容。我个人从来没有这样做过,但我们的首席开发人员告诉我这是可以做到的。
我回复要求提供示例或更多信息,但尚未收到回复。我想我会在这里抛出一些东西,看看是否有人有这方面的经验并可以提供一些帮助。
java - 在 Web 服务器上运行 Java EE 应用程序
以下是一个在端口 15445 上侦听 SOCKET 的线程。每当向其发送数据报数据包时,它都会在其中添加一个字符串(来自 SERVER 的回复)后转发回发送者的地址。我希望这段代码在 Internet 上的某个地方运行,但我不知道从哪里开始。
是否可以?我可以在 Tomcat 服务器上运行此代码还是需要做一些不同的事情?
python - TCP 打孔使用 Java 套接字而不是 Python
我在这里阅读了有关 TCP 打孔的论文。
为了做到这一点,必须绑定用于与远程主机建立 TCP 连接的套接字以及本地主机用来侦听与同一端口的连接的套接字。我已经能够在 Java 中执行此操作,但即使在给定套接字设置了 SO_REUSEADDR 标志时,也无法在 Python 中执行此操作。有人可以向我解释为什么吗?是因为 Python 本身就是单线程的吗?
networking - 每个 NAT 下的 P2P 网络
我正在做一些移动项目,需要与两个设备进行 P2P 通信。
我遇到了问题。(因为智能手机很少有公共IP)
我找到了一些答案。它是“UDP打孔”。
我想我在概念上 100% 了解“UDP 打孔”,并编写了一些代码。但它不起作用。
这是我的情况。
但它不起作用。(实际上是断断续续的工作。可能10次一次?我不知道为什么成功和失败。没有任何微小的共同关系。)
我认为这不是 NAT 类型的问题。我测试了韩国,韩国 90% 的 NAT 不是 Symmetric Cone。