如何获取本地机器的IPv4和IPv6地址?
我正在开发一个Windows应用程序,我需要找到本地机器的IPv4和IPv6地址。操作系统可以是XP或Windows 7如何获取本地机器的IPv4和IPv6地址?
我得到了一个解决方案,让MAC地址一样,
string GetMACAddress()
{
var macAddr =
(
from nic in NetworkInterface.GetAllNetworkInterfaces()
where nic.OperationalStatus == OperationalStatus.Up
select nic.GetPhysicalAddress().ToString()
).FirstOrDefault();
return macAddr.ToString();
}
这在所有OS工作。
获得适用于XP和WINDOWS 7的IPv4和IPv6地址的正确方法是什么?
string strHostName = System.Net.Dns.GetHostName();;
IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;
Console.WriteLine(addr[addr.Length-1].ToString());
if (addr[0].AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
{
Console.WriteLine(addr[0].ToString()); //ipv6
}
这里是我的方法只获取所有的IPv4地址。
/// <summary>
/// Gets/Sets the IPAddress(s) of the computer which the client is running on.
/// If this isn't set then all IPAddresses which could be enumerated will be sent as
/// a comma separated list.
/// </summary>
public string IPAddress
{
set
{
_IPAddress = value;
}
get
{
string retVal = _IPAddress;
// If IPAddress isn't explicitly set then we enumerate all IP's on this machine.
if (_IPAddress == null)
{
// TODO: Only return ipaddresses that are for Ethernet Adapters
String strHostName = Dns.GetHostName();
IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;
List<string> validAddresses = new List<string>();
// Loops through the addresses and creates a list of valid ones.
for (int i = 0; i < addr.Length; i++)
{
string currAddr = addr[i].ToString();
if(IsValidIP(currAddr)) {
validAddresses.Add(currAddr);
}
}
for(int i=0; i<validAddresses.Count; i++)
{
retVal += validAddresses[i];
if (i < validAddresses.Count - 1)
{
retVal += ",";
}
}
if (String.IsNullOrEmpty(retVal))
{
retVal = String.Empty;
}
}
return retVal;
}
}
他想要IPv4和IPv6地址。 – 2012-07-10 10:52:57
@Ramhound ......是的,这很清楚。可以很容易地修改为执行IPv6。 – blak3r 2012-07-12 00:40:56
这就是我低估了你的答案的原因:**“这是我的方法,只能获取所有的IPv4地址。”**你没有指出如何修改代码来获得IPv6地址。 – 2012-07-12 11:30:34
要得到所有的IP4和IP6地址,这里是我的首选解决方案。请注意,它也会过滤环回IP地址,如127.0.0.1或:1
public static IEnumerable<IPAddress> GetIpAddress()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
return (from ip in host.AddressList where !IPAddress.IsLoopback(ip) select ip).ToList();
}
注意:这需要使用'System.Linq'和'System.Collections.Generic'命名空间。 – starbeamrainbowlabs 2016-10-15 09:38:54
我试过了。但是它只返回IPv4 – Matt 2012-07-10 10:40:36
addr [0]有ipv6,查看编辑答案 – Habib 2012-07-10 10:43:14
感谢您的宝贵信息。但IPv6返回:: 1。有什么方法可以获得实际价值吗? – Matt 2012-07-10 12:07:59