【问题标题】:Accessing NATed HTTP server访问 NATed HTTP 服务器
【发布时间】:2013-01-23 08:08:09
【问题描述】:

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

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

我有什么选择吗?

我试过这个:

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

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

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

据我了解,此条目至少会保留几个小时。 Internet 上的 Web 服务器将报告源 IP 和端口分别为 111.100.45.65 和 39824。

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

但由于某种原因,此请求没有得到解决。任何指针。

【问题讨论】:

  • 您真的想为此使用 VPN。
  • VPN 也不是一个选项。我正在尝试实现 tcp 打孔。我正在从 android 上的特定端口(路由器后面)连接到公共服务器。此外,我正在我的应用程序中同一端口的另一个线程中监听。由于公共服务器现在知道路由器 ip 和端口,线程不应该能够在公共服务器上接收来自客户端的 HTTP 请求吗?

标签: android sockets networking tcp


【解决方案1】:

首先关于从 Internet 访问路由器配置,大多数路由器实际上都支持从 WAN 接口登录。大多数路由器默认关闭此功能,但只要您的密码安全,您就没有理由无法启用此功能。

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

  1. 通过启动从您的 Android 设备到 Internet 上的网络服务器的连接来打一个 TCP 漏洞。
  2. 现在 Internet 上的 Web 服务器知道公共 IP 和目标端口,以便能够与 Android 设备通信。
  3. 自动化脚本可以在 Internet 上的 Web 服务器上配置代理服务器,将 HTTP 请求转发到 Android 设备。

顺便说一句,我怀疑 NAT 条目至少会保留几个小时。您可能希望在您的 Android 设备和 Internet 上的 Web 服务器之间实现一个保持活动机制,以便 TCP 漏洞保持打开状态。

【讨论】:

  • 感谢您的回复。在我的情况下,远程登录到路由器接口也是不可能的。 HTTP 服务器应用程序将安装在许多用户的设备上,每个设备都连接到不同的 WIFI 网络。因此,我将无法访问路由器凭据。您能否详细说明您的第三点。再次感谢。
  • 一旦这个洞被打成“Android -> Router -> Web Server”,唯一能从互联网上与Android设备通信的就是与源IP地址相同的主机。 Web 服务器,即 Web 服务器本身,仅此而已。因此,如果您想从 Internet 上的其他地方与 Android 设备通信,则必须通过 Web 服务器,即 Web 服务器需要充当代理。
  • Proxy需要动态配置的原因当然是Android设备的公网IP地址(和端口号)发生了变化。您可以通过以下方式做到这一点: (1) 通过对 Web 服务器上的 PHP 文件的 HTTP 请求打孔。 (2) PHP 文件会自动在服务器本身上配置代理服务器,以便它将在特定端口上接收到的来自 Internet 上其他地方的流量转发到 Android 设备。抱歉,我无法向您详细说明 PHP 脚本将如何自动配置代理服务器,但我确信这是可以做到的。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2016-12-21
    • 2017-05-10
    • 2016-12-12
    • 2015-08-07
    • 2013-12-31
    相关资源
    最近更新 更多