代码之家  ›  专栏  ›  技术社区  ›  Jason

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

  •  5
  • Jason  · 技术社区  · 14 年前

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

    6 回复  |  直到 11 年前
        2
  •  5
  •   kevink    14 年前

    像其他评论员所描述的那样,如果您像第三方网站看到的那样需要外部IP,那么您可能应该使用他们推荐的外部方法。

    但是,如果第三方以某种形式授予您访问权,这种形式是基于服务器看到的实际IP,而不是他们看到的IP,那么您可以使用

     <cfset cName = CreateObject("java", "java.net.InetAddress").getLocalHost().getHostAddress()>
    
     <cfdump var="#cName#">
    
        3
  •  4
  •   Paul Tomblin    14 年前

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

    1. 它可能有多个IP,并且缺少查看所有类型的内核数据结构的能力,您不太可能知道哪个IP将用于给定的传出连接。

    2. 它可能通过一个NAT防火墙或某种代理服务器连接到外部世界,这样外部世界将看到一个与您的设备上配置的IP不同的IP。

    事实上,可能不止这两个,但这些都是我曾经想到的。

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

        4
  •  2
  •   Andreas Schuldhaus    14 年前

    可以使用cgi.local_addr确定服务器的IP地址(cfml相当于php的$_server[“server_addr”])。它可以在使用ColdFusion或Railo的IIS和Apache上工作,因为您不在代理之后,不在服务器IP上发送消息,并且只有一个IP分配给您的服务器(不确定如果有多个IP,将显示哪个IP)。

        5
  •  1
  •   Community Paul Sweatte    7 年前

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

    关于这一点,有许多问题,请参见 here 例如。

        6
  •  0
  •   vrtjason    11 年前
    <cfhttp url="http://www.whatismyip.com/" result="myresult" resolveurl="yes">
    <cfoutput>#myresult.filecontent#</cfoutput>