首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以用蛮力搜索/猜测对称NAT端口预测打孔?

是否可以用蛮力搜索/猜测对称NAT端口预测打孔?
EN

Network Engineering用户
提问于 2014-12-29 23:59:04
回答 4查看 2.1K关注 0票数 4

假设我们有两个客户端A和B希望彼此连接,分别位于对称NAT的NA和NB后面。此外,还有一个会合服务器S存在,以协助客户A和B的孔打孔过程。文献指出,由于NA和NB在任何时候随机分配外部端口,它们各自的客户端启动一个新的连接(即使目标地址相同),因此在连接客户端之间交换的外部端口信息是无效的。我想知道的是,为什么客户端A和B不可能先尝试S提供的外部端口信息,然后,如果失败,尝试反复猜测/蛮横--强迫外部端口。

我的猜测是,尝试所有的2^16端口会花费太长时间,或者有些东西会完全超出我的头,而蛮力搜索需要(2^16)^2猜测,这是完全不可行的。

EN

回答 4

Network Engineering用户

回答已采纳

发布于 2014-12-30 01:10:49

为什么客户A和B不能尝试S提供的外部端口信息?

因为用于与S交谈的端口永远不会是用于与任何一个端点对话的端口。S将是一个港口;A->B将是另一个港口.如果NAT操作正确,则两个端口都不可猜测。NAT条目将Src(ip:port)/Dst(ip:port)内部映射为Src(ip:port)/Dst(ip:port)外部 --这是NAT可以更改的8个数字。当A从S变成B,这是一种全新的连接,与全新的,未知的,外部的价值。STUN/ICE/等都指望src内外的端口关联对于多个目的地保持不变。

A和B无法知道NAT选择了哪个端口,即使它是“粘滞的”(只要使用相同的内部src端口,NAT使用相同的外部src端口),除非同一个端口(S)用于多个dst IP。S只知道和它交谈的是什么;如果NAT使用不同的外部src端口,S和A都不会知道那个端口是什么。

票数 4
EN

Network Engineering用户

发布于 2015-06-15 17:06:56

文献指出,由于NA和NB在各自的客户端启动新连接(即使目标地址相同)时随机分配外部端口,因此在连接客户端之间交换的外部端口信息是无效的。

“我想知道的是,为什么客户端A和B不可能先尝试S提供的外部端口信息,然后如果失败,就反复猜测/蛮横--强迫外部端口。”

  • 如果你喜欢玩彩票,那是可能的。我的JVM可以处理1000多个线程。可以为每个线程分配一个UDP套接字。如果端口映射确实是随机的(它出现在手机塔上,但很可能会偏向某些数字),那么理论上您可以同时从1000个线程发送1000个数据包,然后等待所有1000个套接字,等待应答。如果有65535个可能的端口,那么您就有1,000/65535的机会,或1.52%的机会。请注意,一些对称NAT将更改您的公共IP地址,如果它们用完了端口(PAT具有多个IP地址),请参见http://www.cisco.com/c/en/us/support/docs/ip/network-address-translation-nat/26704-nat-faq-00.html。总之,考虑到对称NAT可以占用65535多个端口(每个公共IP地址最多可占65535端口,但您的手机塔可能有一个以上的ip地址),那么您必须经过65535*n个端口,其中n是IP地址的数目。如果您确实占用了许多端口,“如果没有可用的端口,则丢包,除非池中有另一个IP地址可用。”这很可能导致使用NAT/路由器的每个人都被拒绝服务。如果您一次重复尝试1000个端口,则必须平均进行1/ .0152,或者平均进行66次尝试。如果您在每个调度之间等待.5秒,则平均需要33秒才能建立连接。

“有可能吗”

  • 是的,但这是不切实际的。
票数 4
EN

Network Engineering用户

发布于 2014-12-30 01:07:59

仅仅猜测源端口是不够的。你还需要知道S的端口,当A连接S时,NA正在期待流量将以S.的源IP返回,所以B还必须伪造S.的端口和IP。如果NA是“真正的”防火墙,您还必须猜测TCP序列号,否则防火墙将拒绝您。

票数 1
EN
页面原文内容由Network Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://networkengineering.stackexchange.com/questions/14876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档