2010-04-12 84 views
5

我需要能夠找到該頁面當前正在執行的服務器的IP地址。我有一些調用第三方站點的代碼,並且必須傳遞特定的密鑰,這些密鑰會根據所在的服務器而發生變化。在ColdFusion中是否存在CGI變量或某種方式來確定主機服務器的IP地址?如何獲取您的應用程序服務器的IP地址

回答

1

最安全的方法是使用像WhatIsMyIP這樣的服務。如果服務器位於NAT後面,則操作系統不知道外部IP地址。

對此,SO有很多問題,例如參見here

4

有兩個原因導致程序無法查詢它運行的主機,看看它的IP是:

  1. 它可能有多個IP地址,而短的通過各種內核數據的期待你不可能知道哪個結構將用於給定的傳出連接。

  2. 它可能通過NAT防火牆或某種代理連接到外部世界,以便外部世界將看到不同於您的盒子上配置的IP。

實際上,可能會比這兩個更多,但那些是我想到的。

因此,最簡單的方法是連接到公司網絡外某個地方的另一個盒子,看看它認爲你有什麼IP。我使用在我的colo box上運行的兩行CGI腳本來檢測我的家庭服務器當前有哪些IP(所以我可以檢測到有線公司改變它的時間)。

5

像其他評論者所概述,如果你需要的外部IP作爲第三方站點看到它,那麼你可能應該使用他們推薦的外部方法。

但是,如果第三方是給你以某種形式的基於實際IP作爲服務器認爲自己,而不是IP,因爲他們看到它訪問您可以使用

<cfset cName = CreateObject("java", "java.net.InetAddress").getLocalHost().getHostAddress()> 

<cfdump var="#cName#"> 
2

您可以使用CGI .LOCAL_ADDR來確定你的服務器的IP地址(CFML相當於PHP的$ _SERVER [「SERVER_ADDR」])。它使用ColdFusion或Railo,它可以在IIS和Apache上運行,因爲您不在代理服務器後面,沒有註冊服務器IP,只有一個IP分配給您的服務器(不知道哪個IP會顯示,如果有多個IP)。

0
<cfhttp url="http://www.whatismyip.com/" result="myresult" resolveurl="yes"> 
<cfoutput>#myresult.filecontent#</cfoutput>