我在这个帖子中读到了这个问题:How to get the IP address of the server on which my C# application is running on?
但是这段代码对我不起作用:
string hostname = Dns.GetHostName();
IPHostEntry ip = Dns.GetHostEntry(hostname);
它在论证的第二行给了我一个错误:
字段初始值设定项无法引用 非静态字段,方法或 属性。
我想将我的机器的本地IP存储在一个字符串中。就这样!
答案 0 :(得分:2)
public static String GetIP()
{
String ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if(string.IsNullOrEmpty(ip))
{
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
return ip;
}
答案 1 :(得分:1)
//This will return the collection of local IP's
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
public static bool IsLocalIpAddress(string host)
{
try
{ // get host IP addresses
IPAddress[] hostIPs = Dns.GetHostAddresses(host);
// get local IP addresses
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
// test if any host IP equals to any local IP or to localhost
foreach (IPAddress hostIP in hostIPs)
{
// is localhost
if (IPAddress.IsLoopback(hostIP)) return true;
// is local address
foreach (IPAddress localIP in localIPs)
{
if (hostIP.Equals(localIP)) return true;
}
}
}
catch { }
return false;
}
//Call this method this will tell Is this your local Ip
IsLocalIpAddress("localhost");
答案 2 :(得分:0)
在ASP.Net中,您可以从Request对象获取请求的IP地址:
string myIpAddress = Request.UserHostAddress ;
它可以是IPv4地址或IPv6地址。要查找,请将其解析为System.Net.IPAddress:
IPAddress addr = IPAddress.Parse( myIpAddress ) ;
如果您对当前主机的IP地址感兴趣,那么会变成一个更复杂(有趣?)的问题。
任何给定的主机(以及“主机”读取“个人计算机”)可能安装了多个NIC(网络接口卡)。每个NIC(假设它连接到IP网络)都有一个分配给它的IP地址 - 并且可能同时分配了IPv4和IPv6地址。
此外,每个NIC本身可以是多宿主,并且具有额外的IP地址,可以分配IPv4和/或IPv6。
然后我们有了IP环回适配器,每个主机共享相同的环回地址。对于IPv4,环回地址定义为整个127/8子网(即IP地址127.0.0.0-127.255.255.255都是IPv4环回地址)。 IPv6仅分配一个环回地址(:: 1)。
那么,从主机的有利位置来看,你需要知道上下文(环回适配器或NIC?如果是NIC,哪一个?Ipv4或IPv6?)即使这样,你也不能保证一个IP地址。您必须问问自己,“我的IP地址”是什么意思?