我想用 C# 进行 TCP 打洞(NAT 穿越)。如果需要,可以使用集合服务器来完成。我发现http://sharpstunt.codeplex.com/ http://sharpstunt.codeplex.com/但无法让它发挥作用。理想情况下,我需要一些方法,我给出一个端口号(int)作为参数,调用此方法后在 NAT 上可用(“端口转发”)。如果该方法只返回某个可在 NAT 上使用的端口号,也可以。有人用 C# 做过这个吗?你能给我一些关于 Sharpstunt 或其他东西的工作例子吗?
在每种网络场景中,TCP 打洞的操作方式与 UDP 打洞类似。例如,如果两个对等点 A 和 B 位于不同的 NAT 后面,则每个对等点发送到另一个对等点的第一个 SYN 数据包会在各自的 NAT 中打开与其公共地址关联的漏洞。如果 A 发往 B 的第一个 SYN 数据包在 B 发往 A 的第一个 SYN 数据包到达 B 的 NAT 之前到达 B 的 NAT,则 B 的 NAT 会认为 A 的 SYN 数据包是未经请求的,并将其丢弃。然而,随后 B 的第一个 SYN 数据包可以成功通过 A 的 NAT,因为 A 的 NAT 将 B 的公共地址识别为 A 发起的传出会话的目的地。
所以是的。 TCP打孔是可能的。我不明白为什么有人会有不同的想法。
另外,您不能手动创建这种类型的行为吗?它不需要依赖于任何特定协议,只要收集所有所需信息的步骤相同即可。
一般来说,TCP 打孔(3.2.1)进行如下:
客户:A、B
服务器:S
• A 使用其与 S 的连接向 S 请求连接
与 B.
• S 用 B 的私有地址和公共地址回复 A,
同时将A的地址发送给B。
• A 和 B 异步建立传出连接
诱惑(发送 SYN 数据包)到彼此的公共和
私有地址,来自他们使用的同一端口
向S注册。同时,他们监听
本地 TCP 上的 TCP 传入连接尝试
端口。
• A 和 B 等待对其输出的 SYN-ACK 响应
发出 SYN 数据包或传入连接请求
(SYN 数据包)。如果连接失败,对等方可以重试
它达到最大超时期限。
• 一旦三向握手过程完成,
对等点互相验证。如果是正品——
失败,对等方关闭该连接并等待
另一个连接已成功通过身份验证。这
将使用第一个成功验证的连接
传输 TCP 数据。
(我知道这不是一个答案,但没有足够的空间发表评论)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)