![]() |
1
18
在每个网络场景中,tcp打孔的操作方式与udp打孔类似。例如,如果两个对等点A和B位于不同的NAT之后,则发送给另一个对等点的每个对等点的第一个syn包都会打开一个与其各自NAT中的公共地址相关联的漏洞。如果a到b的第一个syn包在b到a的第一个syn包到达b的nat之前到达b的nat,b的nat会认为a的syn包是主动的,并将其丢弃。然而,随后b_s_rst syn包可以成功地通过a_s nat,因为a_s nat将b的公共地址识别为a已启动的传出会话的目的地。 所以是的。有可能TCP HolePunch。我不明白为什么有人会这么想。 另外,您不能手动创建这种类型的bahaviour吗?它不需要依赖于任何特定的协议,只要收集所有所需信息的步骤相同。 一般来说,TCP打孔(3.2.1)按如下步骤进行: 客户:A、B 服务器:S A使用它与S的连接来请求S的连接 用B S回复了A的私人和公共地址, 同时将a的地址发送给b。 A和B异步建立输出连接- 相互试探(发送syn包)并 专用地址,来自他们使用的同一端口 同时,他们也在听 在其本地TCP上尝试TCP传入连接 端口。 A和B等待对其输出的syn-ack响应- 发送syn包或传入连接请求 (同步数据包)。如果连接失败,对等方可以重试 最长超时时间。 一旦三方握手过程完成, 对等方相互验证。如果身份验证- 操作失败,对等方关闭该连接并等待 另一个连接已成功验证。这个 将使用RST成功验证的连接 传输TCP数据。 (我知道这不是一个很好的答案,但没有足够的评论空间)。 |
![]() |
2
3
这个问题已经很老了,但是对于任何想找到解决办法的人来说,你应该看看 Open.NAT project 它非常容易使用,并与upnp和pmp nats一起工作! 假设您要将外部端口1700转发到本地端口1600,您只需执行以下操作:
您还可以列出所有现有映射,以便验证端口是否尚未使用。
还有一篇关于msdn上nat遍历的博客文章: https://blogs.msdn.microsoft.com/ncl/2009/07/27/end-to-end-connectivity-with-nat-traversal/ |
![]() |
3
2
听起来你可能把tcp和udp搞混了。TCP是一种面向连接的协议,防火墙和路由器很容易理解,并且需要一个发起程序(客户端)和一个侦听器(服务器)。如果客户机和服务器都在防火墙或nat之后,那么如果不让它们都连接到某个代理服务器(不是防火墙),就无法穿透漏洞。这样做的问题是代理将负责中继其所有通信量。 从你的问题来看,听起来你对udp打孔更感兴趣,它利用了udp是无状态的而不是面向连接的fat。因此,大多数状态跟踪防火墙都会对udp数据流做出“最佳猜测”,并假设离开给定端口的流量将在同一端口上收到回复,并自动将其路由回去。如果使用一些通道外手段(例如简单地传递地址而不是数据的tcp服务器),两个对等方可以在相同的端口上相互传输数据,那么它们各自的防火墙/nat路由器将打开允许通信量进入的漏洞。 至于如何做到这一点,这完全取决于您将如何获得对等方的IP地址。一旦你有了它,只需在一个约定的端口上开始传输udp数据包,然后等待回复。 |
![]() |
4
2
我们建立了一个图书馆 IceLink 它使用ice/stun/turn和完整的nat遍历来实现p2p流。基于stun的穿孔技术适用于大多数路由器在节点之间建立直接连接,而对于“坏”的路由器,连接又回到了基于回合的中继。 |
![]() |
5
1
http://sipsorcery.codeplex.com 有一个工作的眩晕服务器。 sipsorcery.core->sipsorcery.net->眩晕 |
![]() |
6
0
我不熟悉你的主题,但我碰巧知道一个开源的p2pvpn,它使用lib来做nat。你可以在这里查看(www.socialvpn.org)。 祝你好运。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 4 月前 |