2010-04-12 173 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>