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

28

有没有一行代码可以获取服务器的IP地址?

谢谢。


你所说的“服务器”是指ASP.Net处理机还是服务器端防火墙/网关/代理? - Dewfy
2
你需要考虑到你的服务器可能会被分配多个IP地址。 - UserControl
可能是https://dev59.com/HHRB5IYBdhLWcg3wXWO2的重复,尽管这里有一个更好的选定答案。 - goodeye
我很想看看在必须依赖于 HttpRequestMessage 对象而不是经典的 HttpRequest 时如何进行操作。 - SandRock
@SandRock - 你可以看下这里,它会查找 MS_HttpContext 属性,然后将其转换为 HttpContextBase,从而允许访问 ServerVariables 属性。根据您执行此操作的位置,您还可以直接获取 HttpContext 并查询 HttpContext.Current.Request.ServerVariables ["LOCAL_ADDR"](很抱歉回复晚了 ;)) - Zhaph - Ben Duguid
4个回答

58
Request.ServerVariables["LOCAL_ADDR"];

文档中得知:

返回接收请求的服务器地址。在计算机上可以绑定多个IP地址的情况下非常重要,您需要找出请求使用了哪个地址。

这与远程地址有所不同,后者涉及客户机器。


是的,在ServerVariables集合中有很多处理隐藏事物的内容。 - Zhaph - Ben Duguid
2
完美的答案 - 从旧的ASP Classic时代,我应该记住这个 :) - JL.
小故障:从服务器上的浏览器访问时,它会解析为127.0.0.1。否则,一切都很好。 - Allbite
1
@Allbite - 这可能取决于服务器上DNS的配置方式,或者您请求站点的方式 - 例如,如果有一个HOSTS条目将域指向127.0.0.1以确保您只浏览本地服务器(例如在负载平衡环境中),或者您将站点请求为LocalHost,那么是的,您肯定会得到127.0.0.1。我曾经遇到其他网站,当它们通过正确的DNS查找时,会报告浏览器的正确IP地址。 - Zhaph - Ben Duguid
1
这显示了发送请求的服务器地址 而不是 托管网站的服务器 - Talha
@Talha - 不是的,LOCAL_ADDR 返回托管站点关联的网络地址 - REMOTE_ADDR 返回请求客户端的地址:"REMOTE_ADDR 请求方远程主机的 IP 地址。" - Zhaph - Ben Duguid

6

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

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


1
"其中索引是您的IP地址主机的索引(即网络连接)。" - 这是什么意思?该链接不再有效。 - Nigel Fds

2

正如其他人所发表的,System.Net.Dns.GetHostEntry 是正确的方法。当您访问 AddressList 属性时,您需要考虑到 AddressFamily 属性,因为它可能返回 IPv4 和 IPv6 的结果。


0

当您在个人电脑上运行此代码时,此方法将返回您的机器公共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";
        }

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接