比如我的HTTPport 80
是被路由器打开并映射到port 42300
朝外的。
有没有办法识别,比如说,port 150
无需访问路由器,就可以将开放的连接映射到哪个外部端口?
我知道我可以设置路由器如何将某些内部端口手动映射到我想要的外部端口。
答案1
这并不容易,不过你应该重新考虑如何将其形象化。反过来看更有帮助,因为我们正在查看传入连接 - 这就是为什么这被称为端口转发:
在路由器的公网IP地址上开放端口,并转发到内部资源的地址和端口。
因此,您的路由器打开了端口 42300 并在其公共 IP 上监听此端口,并将任何传入连接转发到内部服务器上的端口 80。
因此,您的问题最好表述为“我如何确定路由器上的哪个端口被转发到内部服务器上的端口 150”。由于这种工作方式,需要从外部源启动到正确端口上的公共 IP 地址的连接。
由于您不知道正确的端口,并且无法访问路由器查看它是什么,那么您唯一的选择就是尝试所有端口并查看哪一个可以通过。
您可以使用nmap工具来执行此操作。
答案2
请参阅 Paul 的回答以了解端口转发概念的解释。
除非您之前曾以某种方式说服管理员路由器(其所有者?)将某些内容转发到您计算机上的 150 端口,而他们却忘了告知您他们选择了哪个端口,否则答案很可能出奇的简单:路由器上的任何端口均未转发到您的计算机。
(如果不是这种情况,您可以nmap
按照 Paul 的建议使用 找到开放的端口,然后使用您想要使用的应用程序对所有候选端口进行测试。)
在(最近让很多人感到烦恼的)常见客户端设置中,大多数计算机上的端口不需要从互联网的大部分区域访问,而且在许多情况下,对于安全机制较弱的操作系统来说,这会招致恶意软件和黑客攻击。因此,防火墙被发明,但在某些情况下已被 NAT 设备(通常称为“家庭路由器”)所取代。
NAT 设备原则上允许多台计算机从本地网络通过它访问互联网,但通常不允许相反方向的流量通过,除非明确将端口转发到本地网络上的特定计算机。
对于给定的 IP 地址,{tcp,udp} 端口数量是有限的(如果我没记错的话是 2^16-1),因此即使路由器的防火墙部分是不需要的,它也不可能打开本地网络上每台计算机的每个端口(理论上 10.0.0.0/8 网络可能有 2^24-1 个设备),除非只有一台连接的计算机。默认设置几乎总是不转发任何端口。