我需要能够找到当前正在执行页面的服务器的IP地址。我有一些调用第三方站点的代码,并且必须传递一个特定的密钥,该密钥会根据它所在的服务器而改变。在ColdFusion中是否有一个CGI变量或某种方式来确定主机服务器的IP地址是什么?
答案 0 :(得分:5)
与其他评论者一样,如果您需要外部IP,如第三方网站所见,那么您可能应该使用他们推荐的外部方法。
但是,如果第三方以某种形式为您提供基于实际IP的访问权限,因为服务器看到了自己,而不是他们看到的IP,您可以使用
<cfset cName = CreateObject("java", "java.net.InetAddress").getLocalHost().getHostAddress()>
<cfdump var="#cName#">
答案 1 :(得分:4)
有两个原因导致程序无法查询正在运行的主机并查看其IP是什么:
它可能有多个ips,而且没有查看各种内核数据结构,你不太可能知道哪一个将用于给定的传出连接。
它可能通过NAT防火墙或某种代理连接到外部世界,这样外面的世界将会看到与您的盒子上配置的IP不同的IP。
实际上,可能会有超过这两个,但那些已经发生在我身上。
正因为如此,最简单的方法是连接到公司网络之外某个地方的另一个盒子,看看它认为你拥有什么IP。我使用在我的colo盒子上运行的两行CGI脚本来检测我的家庭服务器当前具有的IP(因此我可以检测到有线电视公司何时更改它)。
答案 2 :(得分:2)
我会使用hostip.info API
您的XML格式:http://api.hostip.info/get_xml.php
您的HTML格式:http://api.hostip.info/get_html.php
答案 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>