C# 在 ASP.NET 中获取服务器的 IP 地址?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/646525/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-04 11:37:45  来源:igfitidea点击:

Getting the IP address of server in ASP.NET?

c#asp.netdnsreferrer

提问by jergason

How do I get the IP address of the server that calls my ASP.NET page? I have seen stuff about a Response object, but am very new at c#. Thanks a ton.

如何获取调用我的 ASP.NET 页面的服务器的 IP 地址?我看过有关 Response 对象的内容,但我对 c# 非常陌生。万分感谢。

采纳答案by TStamper

This should work:

这应该有效:

 //this gets the ip address of the server pc

  public string GetIPAddress()
  {
     IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); // `Dns.Resolve()` method is deprecated.
     IPAddress ipAddress = ipHostInfo.AddressList[0];

     return ipAddress.ToString();
  }

http://wec-library.blogspot.com/2008/03/gets-ip-address-of-server-pc-using-c.html

http://wec-library.blogspot.com/2008/03/gets-ip-address-of-server-pc-using-c.html

OR

或者

 //while this gets the ip address of the visitor making the call
  HttpContext.Current.Request.UserHostAddress;

http://www.geekpedia.com/KB32_How-do-I-get-the-visitors-IP-address.html

http://www.geekpedia.com/KB32_How-do-I-get-the-visitors-IP-address.html

回答by mythz

The above is slow as it requires a DNS call (and will obviously not work if one is not available). You can use the code below to get a map of the current pc's local IPV4 addresses with their corresponding subnet mask:

以上很慢,因为它需要一个 DNS 调用(如果一个不可用,显然将不起作用)。您可以使用下面的代码获取当前 PC 本地 IPV4 地址及其相应子网掩码的映射:

public static Dictionary<IPAddress, IPAddress> GetAllNetworkInterfaceIpv4Addresses()
{
    var map = new Dictionary<IPAddress, IPAddress>();

    foreach (var ni in NetworkInterface.GetAllNetworkInterfaces())
    {
        foreach (var uipi in ni.GetIPProperties().UnicastAddresses)
        {
            if (uipi.Address.AddressFamily != AddressFamily.InterNetwork) continue;

            if (uipi.IPv4Mask == null) continue; //ignore 127.0.0.1
            map[uipi.Address] = uipi.IPv4Mask;
        }
    }
    return map;
}

warning: this is not implemented in Mono yet

警告:这还没有在 Mono 中实现

回答by Alberto León

  //this gets the ip address of the server pc
  public string GetIPAddress()
  {
     string strHostName = System.Net.Dns.GetHostName();
     //IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); <-- Obsolete
     IPHostEntry ipHostInfo = Dns.GetHostEntry(strHostName);
     IPAddress ipAddress = ipHostInfo.AddressList[0];

     return ipAddress.ToString();
  }

回答by MrPurpleStreak

Request.ServerVariables["LOCAL_ADDR"];

Request.ServerVariables["LOCAL_ADDR"];

This gives the IP the request came in on for multi-homed servers

这为多宿主服务器提供了请求的 IP

回答by André Voltolini

This will work for IPv4:

这将适用于 IPv4:

public static string GetServerIP()
{            
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());

    foreach (IPAddress address in ipHostInfo.AddressList)
    {
        if (address.AddressFamily == AddressFamily.InterNetwork)
            return address.ToString();
    }

    return string.Empty;
}

回答by Tahir77667

The below snap is taken from Mkyongto show the networks tab inside developers console in google chrome.Inside "Request Headers"tab you could see a list of all server variables as shown below:

下面的快照取自Mkyong,以在 google chrome 中显示开发人员控制台内的网络选项卡。在“请求标头”选项卡中,您可以看到所有服务器变量的列表,如下所示:

enter image description here

在此处输入图片说明

Below are few lines of code which gets the ipaddress of the client which hits your application

下面是几行代码,它们获取访问您的应用程序的客户端的 ipaddress

//gets the ipaddress of the machine hitting your production server              
string ipAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

if (ipAddress == "" || ipAddress == null)  
{                                     
  //gets the ipaddress of your local server(localhost) during development phase                                                                         
  ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];              
}

//Output:                                                                           
For production server - 122.169.106.247 (random)
For localhost         - ::1