如何获取应用程序服务器的IP地址

时间:2010-04-12 18:26:28

标签: coldfusion cgi ip-address

我需要能够找到当前正在执行页面的服务器的IP地址。我有一些调用第三方站点的代码,并且必须传递一个特定的密钥,该密钥会根据它所在的服务器而改变。在ColdFusion中是否有一个CGI变量或某种方式来确定主机服务器的IP地址是什么?

6 个答案:

答案 0 :(得分:5)

与其他评论者一样,如果您需要外部IP,如第三方网站所见,那么您可能应该使用他们推荐的外部方法。

但是,如果第三方以某种形式为您提供基于实际IP的访问权限,因为服务器看到了自己,而不是他们看到的IP,您可以使用

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

 <cfdump var="#cName#">

答案 1 :(得分:4)

有两个原因导致程序无法查询正在运行的主机并查看其IP是什么:

  1. 它可能有多个ips,而且没有查看各种内核数据结构,你不太可能知道哪一个将用于给定的传出连接。

  2. 它可能通过NAT防火墙或某种代理连接到外部世界,这样外面的世界将会看到与您的盒子上配置的IP不同的IP。

  3. 实际上,可能会有超过这两个,但那些已经发生在我身上。

    正因为如此,最简单的方法是连接到公司网络之外某个地方的另一个盒子,看看它认为你拥有什么IP。我使用在我的colo盒子上运行的两行CGI脚本来检测我的家庭服务器当前具有的IP(因此我可以检测到有线电视公司何时更改它)。

答案 2 :(得分:2)

答案 3 :(得分:2)

您可以使用CGI.LOCAL_ADDR来确定服务器的IP地址(CFML相当于PHP的$ _SERVER [“SERVER_ADDR”])。它适用于使用ColdFusion或Railo的IIS和Apache,因为您不是在代理服务器之后,不是自己的服务器IP并且只为您的服务器分配了一个IP(不确定将显示哪个IP,如果有多个IP)。

答案 4 :(得分:1)

最安全的方法是使用WhatIsMyIP之类的服务。如果服务器位于NAT后面,则操作系统不知道外部IP地址。

关于此,有很多问题,请参阅here

答案 5 :(得分:0)

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