我在NAT后面的计算机上的端口50885上运行了一些软件
如何从互联网上访问此端口? 我可以从计算机启动一些东西,因为我必须启动应用程序。
如果我弄错了:用我的本地地址:port,让我们说:192.168.0.10:50885 如果有什么东西通过计算机发起的NAT,那么应该有一些自动创建的端口转发,应该有某种公共IP:PORT应该敲击NAT后面的计算机上的50885端口。我是对的吗?
如果是这样,就不可能像php一样问一个服务器端脚本,嘿,告诉我这个公开的IP&港口是?
我对Port Forwarding感到有点困惑。
答案 0 :(得分:0)
是的,您必须查询外部脚本以从路由器的另一侧检索公共信息。有很多网站可以获取IP(http://whatismyip.com,http://iplookup.flashfxp.com等),但我从未见过报告IP和端口的网站,它们通常只报告IP。大多数NAT在端口上使用1对1关系,但它们可以使用不同的端口。如果您有自己的网站(或者有朋友),编写自己的脚本来检索公共端口并不是很困难。
如果您通过路由器从局域网PC到外部进行OUTBOUND TCP连接,则路由器会自动生成并跟踪必要的NAT查找信息,以便它可以来回转发该连接的流量。
如果从外部通过路由器与LAN PC建立INBOUND TCP连接,则不会自动建立NAT查找信息。需要通过端口转发规则提前告知路由器,哪个专用LAN IP:用于在特定公共IP:端口上接收新客户端连接时将传入连接定向到的端口。如果您的路由器支持uPNP(如果已启用),则当应用程序打开侦听套接字时,您的应用程序可以使用uPNP API /库以可编程方式在路由器中创建端口转发规则。否则,如果uPNP不可用,则必须手动配置路由器。
答案 1 :(得分:0)
根据我的理解,假设您使用socket local_ip:local_port来连接remote1_ip:remote1_port。在NAPT设备之后,local_ip:local_port变为translated_ip:translated_port。 remote1可以得到translated_ip:translated_port但我还没有找到这样的服务。下次使用相同的客户端local_ip:local_port建立与remote2_ip:remote2_port的新连接时,translated_ip:translated_port将保持不变吗?通常NAPT服务器会保留一段时间,比如5分钟。因此,如果来自remote3:remote3_port的人在5分钟内连接到translated_ip:translated_port(自从最后一个数据包发送到translated_ip:translated_port),NAPT服务器会将流量定向到local_ip:local_port。如果remote3_port = remote1_port,虽然remote1_ip!= remote1_ip,本地套接字将接受该连接。如果信息过期,NAPT服务器将分配新的translated_ip2:translated_port2。