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
Getting the IP address of server in ASP.NET?
提问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 中显示开发人员控制台内的网络选项卡。在“请求标头”选项卡中,您可以看到所有服务器变量的列表,如下所示:
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