如何获取服务器 IP 地址(在 C#/asp.net 中)?

Posted

技术标签:

【中文标题】如何获取服务器 IP 地址(在 C#/asp.net 中)?【英文标题】:How to get the server IP Address (in C# / asp.net)? 【发布时间】:2010-11-23 15:49:15 【问题描述】:

有没有1行方法来获取服务器的IP地址?

谢谢

【问题讨论】:

你的意思是“服务器” - ASP.Net 处理机器或服务器端防火墙/网关/代理 您需要考虑到您的服务器可以分配多个 IP 地址。 ***.com/q/646525/292060 的可能重复项,即使这有更好的选择答案。 我很想看看当你不得不依赖 HttpRequestMessage 对象而不是经典的 HttpRequest 时如何进行。 @SandRock - 您可以查看here,它会查找MS_HttpContext 属性,然后转换为HttpContextBase,这将允许访问ServerVariables 属性。根据您执行此操作的位置,您还可以直接获取 HttpContext 并将其查询为HttpContext.Current.Request.ServerVariables["LOCAL_ADDR"](抱歉回复晚了;)) 【参考方案1】:
Request.ServerVariables["LOCAL_ADDR"];

来自docs:

返回请求进入的服务器地址。这在计算机上可能有多个 IP 地址绑定到计算机上很重要,并且您想找出请求使用的地址。

这与与客户端计算机相关的远程地址不同。

【讨论】:

是的,很多东西都隐藏在 ServerVariables 集合中。 完美答案 - 从旧的 ASP 经典时代开始,我应该记得这个 :) 小故障:从服务器上的浏览器访问服务器时,它解析为 127.0.0.1。否则,爱它。 @Allbite - 这可能取决于服务器上的 DNS 是如何配置的,或者您如何请求站点 - 例如,如果有一个 HOSTS 条目将域指向 127.0.0.1 以确保您浏览只是本地服务器(例如在负载平衡环境中),或者您将站点请求为 LocalHost,那么是的,您肯定会得到 127.0.0.1。我有其他网站通过正确的 DNS 查找报告了正确的浏览器 IP 地址。 这显示了发送请求的服务器的地址,而不是托管网站的服务器【参考方案2】:

我在网上搜索了以下代码:(我在那里找不到单行方法)

string myHost = System.Net.Dns.GetHostName();

// Show the hostname 

MessageBox.Show(myHost);

// Get the IP from the host name

string myIP = System.Net.Dns.GetHostEntry(myHost).AddressList[index].ToString();

// Show the IP 

MessageBox.Show(myIP);

-> 其中 index 是您的 IP 地址主机的索引(即网络连接)。

代码来自:http://www.geekpedia.com/tutorial149_Get-the-IP-address-in-a-Windows-application.html

【讨论】:

"其中 index 是您的 IP 地址主机的索引(即网络连接)。" - 这是什么意思?该链接不再有效【参考方案3】:

正如其他人发布的那样,System.Net.Dns.GetHostEntry 是要走的路。当您访问 AddressList 属性时,您需要考虑 AddressFamily 属性,因为它可以返回 IPv4 和 IPv6 结果。

【讨论】:

【参考方案4】:

在您的 PC 上运行此代码时,此方法将返回您的机器公共 IP 地址,当您在服务器上部署应用程序时,将返回服务器 IP 地址。

public static string Getpublicip()
    
        try
        
            string externalIP = "";
            var request = (HttpWebRequest)WebRequest.Create("http://icanhazip.com.ipaddress.com/");
            var response = (HttpWebResponse)request.GetResponse();
            var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

            externalIP = new WebClient().DownloadString("http://icanhazip.com");
            return externalIP;

        
        catch (Exception e)
        

            return "null";
        

    

【讨论】:

以上是关于如何获取服务器 IP 地址(在 C#/asp.net 中)?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取浏览器当前的ip

C# - 连接到 (RAS) *** 时如何获取 IP 地址

如何让Docker容器获取外部DHCP服务器的IP地址

如何从 udp-socket (C/C++) 获取您自己的(本地)IP 地址

如何在 C 中获取我的非环回网络 IP 地址?

如何使用 HttpClient 从特定 IP 地址发送请求? C#