C# 如何获得本地IP?
我在这个帖子里读到了这个问题: 但是这个代码对我不起作用:C# 如何获得本地IP?,c#,asp.net,ip-address,C#,Asp.net,Ip Address,我在这个帖子里读到了这个问题: 但是这个代码对我不起作用: string hostname = Dns.GetHostName(); IPHostEntry ip = Dns.GetHostEntry(hostname); 这让我在论点的第二行上犯了一个错误: 字段初始值设定项无法引用 非静态字段、方法或 财产 我想将我的机器的本地IP存储在一个字符串中。就这些 在ASP.Net中,您可以从请求对象获取请求的IP地址: //This will return the collection of
string hostname = Dns.GetHostName();
IPHostEntry ip = Dns.GetHostEntry(hostname);
这让我在论点的第二行上犯了一个错误:
字段初始值设定项无法引用
非静态字段、方法或
财产
我想将我的机器的本地IP存储在一个字符串中。就这些 在ASP.Net中,您可以从请求对象获取请求的IP地址:
//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");
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地址”到底是什么意思?在.NET 2.0、3.5和4.0中适用于我。您的目标是.NET的哪个版本?
IPAddress addr = IPAddress.Parse( myIpAddress ) ;