2013-02-07 43 views
1

我有一個HTTP服務器託管在我的Android設備上。我希望它能夠從互聯網上訪問它,即使它連接到家庭WiFi(無線路由器後面)。訪問NAT的HTTP服務器

此外,在路由器上配置靜態端口轉發不是一種選擇,因爲從互聯網上我將無法訪問路由器配置。

我有什麼選擇嗎?

我嘗試這樣做:

Android應用程序將來自Android設備HTTP請求(本地IP地址,比如192.168.0.1)從一個特定端口號(比如8080),通過家庭互聯網上的Web服務器WIFI,

路由器會將其源地址修改爲其公網IP地址(比如111.100.45.65)和源端口號修改爲任意隨機端口號(比如39824),並在其動態NAT表中創建一個條目。

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

按我的理解,這個條目保留爲atleast幾個小時。 互聯網上的Web服務器將分別報告源IP和端口爲111.100.45.65和39824。

在將Android應用程序的HTTP請求發送到Internet上的Web服務器之後,我在設備的端口8080上運行HTTP服務器。現在,如果我要將來自Internet的HTTP請求發送到端口39824處的地址111.100.45.65,則應該由設備上運行的HTTP服務器接收(路由器將解析來自其動態NAT表的請求並將其發送到我的設備) 。

但由於某種原因,此請求未得到解決。任何指針。

+0

你真的想爲此使用VPN。 –

+0

VPN也不是一個選項。我正在嘗試實現tcp打孔。我從android上的特定端口(路由器後面)連接到公共服務器。另外,我正在我應用程序的同一端口的另一個線程中偵聽。因爲公共服務器現在知道路由器的IP和端口,所以線程是否應該能夠從公共服務器上的客戶端接收HTTP請求? – rohitverma

回答

0

不可以。您的應用可以通過端口39824與Web上的http服務器進行通信。沒有其他人可以使用該端口在您的設備上通過網絡與您的http服務器進行聯繫。您需要在您的路由器上進行portforwarding,以便您的設備可以通過Internet訪問。

1

首先,關於從Internet訪問路由器配置,大多數路由器實際上都支持來自WAN接口的登錄。它在大多數路由器上默認關閉,但只要密碼是安全的,您無法啓用此功能。

其次,如果您在Internet上的Web服務器上設置代理,您嘗試的方法將會起作用。

  1. 通過啓動從Android設備到Internet上的Web服務器的連接來打開TCP漏洞。
  2. 現在互聯網上的Web服務器知道公共IP和目標端口可以與Android設備通話。
  3. 自動腳本可以在Internet上的Web服務器上配置代理服務器,該服務器將HTTP請求轉發給Android設備。

順便說一下,我懷疑NAT條目保留了至少幾個小時。您可能希望在您的Android設備和Internet上的Web服務器之間實現保持活動機制,以便TCP漏洞保持打開狀態。

+0

感謝您的回覆。遠程登錄到路由器接口在我的情況下也是不可能的。 HTTP服務器應用程序將安裝在許多用戶的設備上,每個設備都連接到不同的WIFI網絡。因此,我將無法訪問路由器憑據。你能否詳細說明你的第三點。再次感謝。 – rohitverma

+0

一旦這個洞被打成「Android - >路由器 - > Web服務器」,唯一可以通過互聯網與Android設備交談的是與Web服務器具有相同源IP地址的主機,即Web服務器本身沒有別的。因此,如果您想從Internet上的其他地方與Android設備通話,則必須使用威盛Web服務器,即Web服務器需要充當代理。 – wookie919

+0

代理需要動態配置的原因當然是Android設備的公共IP地址(和端口號)發生變化。你可以這樣做:(1)​​通過HTTP請求對Web服務器上的PHP文件打孔。 (2)PHP文件自動配置服務器本身的代理服務器,以便它將來自特定端口上接收到的Internet上其他地方的流量轉發給Android設備。很抱歉,但我無法給你確切的詳細信息,說明PHP腳本如何自動配置代理服務器,但我確信這可以完成。 – wookie919