标签: hole-punching

UDP NAT打孔示例

我尝试在谷歌和这里搜索,但我仍然无法找到简单的C\C++示例udp打孔算法.如果你知道我在哪里找到它,请帮忙.谢谢!

c++ udp nat hole-punching

5
推荐指数
1
解决办法
3491
查看次数

udp打孔器和端口限制锥NAT

我想了解当端口限制锥NAT后面的两台主机分别建立连接时,udp打孔的工作原理。

据我了解,它分为几个阶段,涉及三个主机。

主机A和主机B在端口受限锥形NAT的后面。

主机C是可以从主机A和B接收数据包的服务器。

  1. A向C发送数据包。
  2. C从A接收数据包并确定A的外部地址:端口对
  3. B向C发送数据包。
  4. C从B接收数据包并确定B的外部地址:端口对
  5. C将外部地址:B的端口发送到A
  6. C将外部地址:A的端口发送到B
  7. A将数据包_1发送到B的外部地址
  8. B将数据包_2发送到A的外部地址

问题是:

受限锥NAT后面的A如何从也位于受限锥NAT后面的B接收数据包?

端口受限锥形NAT不允许接收源地址:端口对与它发送的目标地址:端口对不匹配的数据包。为什么在A和B之间发送的其他数据包到达A和B?

是否因为端口受限锥NAT将packet_2视为来自B的响应?

因此,数据包_1将丢失,但数据包_2到达B。我是对的吗?

先感谢您。

udp nat hole-punching

5
推荐指数
1
解决办法
3084
查看次数

UDP 打洞:一种对称 NAT 和另一种非对称 NAT

我正在尝试用打孔来实现P2P。这是流程:

  1. 两个节点(P1,P2)都会向服务器(S)发送 1 个数据包。
  2. 服务器回复并告诉其他人IP:PORT
  3. P1 和 P2 接收此 UDP 数据包,知道对方的外部/公共 ip:端口。
  4. P1、P2 开始向其他对等点公共 IP:PORT 发送数据包。
  5. 一旦对等点收到其他对等点的数据包,我假设该洞已被打孔并将此套接字提供给我的应用程序。

我在不同的路由器上进行了测试,结果如下:

  • 当 P1 和 P2 都位于非对称 NAT(完全/受限锥体)时,我不会遇到任何问题。
  • 当 P1=非对称且 P2=对称时:
  • -----router-1(对称 NAT)+ router-2(非对称)= 成功
  • ---- router-3(对称 NAT)+ router-2(非对称)= *失败*

直到第四步就可以了。但在第五步中,没有对等点收到其他对等点的数据包。我预计至少* “非对称 NAT 后面的对等点”会收到其他的数据包。*

有人知道发生了什么事吗?

networking udp tcp udpclient hole-punching

5
推荐指数
1
解决办法
2169
查看次数

UDP/TCP打孔与UPnP vs STUN vs?

我尝试制作P2P程序,并需要帮助来完成客户端的NAT.我在stackoverflow上已经阅读了很多问题,但我从来没有得到通过NAT的所有方法的缺点和好处.有多少路由器支持哪些方法?大公司常用哪种方法?(BitTorrent,TeamViewer,......)我列出的三种方法有哪些缺点/好处,哪些还存在?

upnp nat stun hole-punching

5
推荐指数
1
解决办法
4099
查看次数

Node.js中的TCP打孔

我正在尝试通过node.js中的两个NAT打通TCP漏洞。问题是我不知道如何选择连接应使用的本地端口?

ip tcp node.js hole-punching

5
推荐指数
2
解决办法
2522
查看次数

UDP打孔(Java)

我一直在尝试创建套接字聊天/文件传输应用程序几周.我花了几个小时在互联网上搜索关于UDP打孔的代码片段,但是我没有发现任何有效或足够简单的东西供我使用.

我正试图让两个客户端在路由器(NAT)之后相互连接.我已经设法建立一个共享两个客户端IP和端口的服务器,但我还没有设法实际启动连接.我可以在任何地方使用任何源代码吗?

我找到了几个像JStun一样的STUN/ICE/TURN库,但没有关于如何使用它们的文档.我是否需要STUN服务器才能启动连接?我可以使用像numb.viagenie.ca或http://www.stunserver.org/这样的公共网站吗?

任何答案将不胜感激.谢谢!

编辑:我有更多的讨论,我发现即使通过PHP,STUN也很容易.我已经设置了自己的PHP stun,只是共享两个客户端数据.困难的部分是连接两个客户端,但这使用了一个名为ICE的东西.感谢selbie 在评论中发布此内容.这使我与ICE走在正确的轨道上.如果有人想出其他的话,我会把这个问题保持开放一段时间.我将开始编写自己的ICE代码,或尝试在线查找内容.谢谢!

java sockets udp stun hole-punching

5
推荐指数
1
解决办法
1554
查看次数

Android上的UDP打孔; UDP服务器

我正在尝试在Android上为我的udp服务器实现udp打孔.事情应该像这样:

  1. 客户端(在nat之后;可能是3G,...)向服务器发送DatagramPacket(服务器具有公共IP;端口也称为45555).客户端重复发送具有给定延迟的数据报
  2. 一旦服务器收到数据报,它就会每隔500毫秒发回一次数据报("信号").
  3. 如果打孔工作,客户应该接收这些信号

这是我当前的客户端实现(Android):

    //in onCreate()
    DatagramSocket socket = new DatagramSocket(46222);
    socket.setSoTimeout(2000);
    final Thread t = new Thread(new Runnable(){

        @Override
        public void run() {
            int delay = Integer.parseInt(e2.getText().toString());//e1 and e2 are EditTexts
            String ip = e1.getText().toString();
            try {
                DatagramPacket packet = new DatagramPacket(new byte[1],1, InetAddress.getByName(ip), 45555);
                while(!cleanUp){//cleanUp is set to true in onPause()
                    lock.lock(); //Lock lock = new ReentrantLock();
                    socket.send(packet);
                    lock.unlock();
                    Thread.sleep(delay);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                if(socket!=null)
                    socket.close();
            }
        }

    });
    final Thread t2 = …
Run Code Online (Sandbox Code Playgroud)

java android udp network-programming hole-punching

5
推荐指数
1
解决办法
1380
查看次数

ICMP 打洞有缺陷吗?

如果相关 NAT 设备重写出站 ICMP 数据包,ICMP NAT 穿越应该如何工作?

图表

=========================================================================================
| CLIENT  | <---> |  NAT-C  | <---> { internet } <---> |  NAT-S  | <---> | SERVER |
=========================================================================================
                  19.19.19.19   (external addresses)   72.72.72.72
192.168.0.2       192.168.0.1   (internal addresses)   172.16.0.1       172.16.0.2
Run Code Online (Sandbox Code Playgroud)

力学

ICMP 打洞的快速概述,如下所述pwnat

SERVER向其他主机(例如3.3.3.3)发送 ICMP 回显请求数据包 (ping) 以打开 中的漏洞NAT-S。当CLIENT想要连接时,它会向 发送一个 ICMP 超时数据包NAT-S,该数据包应该路由到SERVER。为了使所述路由正常工作,CLIENT通过在 ICMP 超时数据包中嵌入3.3.3.3它期望SERVER首先发送的相同数据包 (ICMP Echo to ) 来构造 ICMP 超时数据包。

问题 …

nat icmp hole-punching pwnat

4
推荐指数
1
解决办法
1043
查看次数

Magento Hole puch与清漆

我最近在系统(ubuntu)中安装了清漆3.x并将其配置为8080.

现在启用了整页缓存,其工作正常.我只是想忽略页面的一些特定动态块.我怎么能用magento做.此外,我没有使用Magentos默认缓存技术,所以我禁用它.还试过模块Terpentine

谢谢和注意

Rajesh Ganjeer

magento varnish hole-punching

3
推荐指数
1
解决办法
6449
查看次数

TCP Hole Punching使用Java套接字而不是Python

我在这里阅读了有关TCP打孔的文章.

为此,必须绑定用于与远程主机建立TCP连接的套接字,以及本地主机用于侦听到同一端口的连接的套接字.我已经能够在Java中执行此操作,但即使为给定套接字设置了SO_REUSEADDR标志,也无法在Python中执行此操作.有人能解释一下为什么吗?是因为Python本身就是单线程的吗?

python sockets network-programming tcp hole-punching

2
推荐指数
1
解决办法
4676
查看次数