访问NATed HTTP服务器

时间:2013-02-07 17:52:21

标签: android sockets networking tcp

我的Android设备上托管了一个HTTP服务器。我希望它能够从互联网访问它,即使它连接到家庭wifi(无线路由器后面)。

此外,在路由器上配置静态端口转发不是一种选择,因为从互联网上我无法访问路由器配置。

我有任何选择吗?

我试过了:

Android应用程序从特定端口号(例如8080)向Android设备(具有本地IP地址,例如192.168.0.1)发送HTTP请求,通过家庭WIFI向互联网上的Web服务器发送,

路由器会将源地址修改为其公共IP地址(例如111.100.45.65),将源端口号修改为任意随机端口号(例如39824),并在其动态NAT表中创建一个条目。

内部IP内部端口外部端口 192.168.0.1 8080 39824

根据我的理解,此条目至少保留几个小时。 互联网上的Web服务器将源IP和端口分别报告为111.100.45.65和39824.

在从Android应用程序向互联网上的Web服务器发送HTTP请求后,我在设备的端口8080上运行HTTP服务器。现在,如果我要从互联网发送HTTP请求到端口39824的地址111.100.45.65,它应该由设备上运行的HTTP服务器接收(路由器将解析来自其动态NAT表的请求并将其指向我的设备)

但出于某种原因,这个请求并没有得到解决。任何指针。

2 个答案:

答案 0 :(得分:1)

首先,关于从Internet访问路由器配置,大多数路由器确实支持来自WAN接口的登录。它在大多数路由器上默认关闭,但只要您的密码安全,就没有理由不能启用它。

其次,如果您在Internet上的Web服务器上设置代理,那么您尝试的将会起作用。

  1. 通过启动从Android设备到Internet上的Web服务器的连接来打孔。
  2. 现在,互联网上的网络服务器知道公共IP和目标端口能够与Android设备通信。
  3. 自动脚本可以在Internet上的Web服务器上配置代理服务器,以便将HTTP请求转发到Android设备。
  4. 顺便说一句,我怀疑NAT条目是否保留了至少几个小时。您可能希望在Android设备和Internet上的Web服务器之间实现保持活动机制,以便TCP漏洞保持打开状态。

答案 1 :(得分:0)

没有。您的应用可以通过端口39824与网络上的http服务器进行通信。没有其他人可以使用该端口通过Web与您设备上的http服务器建立联系。您需要在路由器上进行端口转发,才能从互联网上访问您的设备。