经过大量挖掘,我使用NetworkInformation和HostName找到了您需要的信息。
NetworkInformation.GetInternetConnectionProfile检索与本地计算机当前使用的 Internet 连接关联的连接配置文件。
NetworkInformation.GetHostNames检索主机名列表。这并不明显,但这包括作为字符串的 IPv4 和 IPv6 地址。
使用此信息,我们可以获得连接到 Internet 的网络适配器的 IP 地址,如下所示:
public string CurrentIPAddress()
{
var icp = NetworkInformation.GetInternetConnectionProfile();
if (icp != null && icp.NetworkAdapter != null)
{
var hostname =
NetworkInformation.GetHostNames()
.SingleOrDefault(
hn =>
hn.IPInformation != null && hn.IPInformation.NetworkAdapter != null
&& hn.IPInformation.NetworkAdapter.NetworkAdapterId
== icp.NetworkAdapter.NetworkAdapterId);
if (hostname != null)
{
// the ip address
return hostname.CanonicalName;
}
}
return string.Empty;
}
请注意,HostName具有属性 CanonicalName、DisplayName 和 RawName,但它们似乎都返回相同的字符串。
我们还可以使用类似下面的代码获取多个适配器的地址:
private IEnumerable<string> GetCurrentIpAddresses()
{
var profiles = NetworkInformation.GetConnectionProfiles().ToList();
// the Internet connection profile doesn't seem to be in the above list
profiles.Add(NetworkInformation.GetInternetConnectionProfile());
IEnumerable<HostName> hostnames =
NetworkInformation.GetHostNames().Where(h =>
h.IPInformation != null &&
h.IPInformation.NetworkAdapter != null).ToList();
return (from h in hostnames
from p in profiles
where h.IPInformation.NetworkAdapter.NetworkAdapterId ==
p.NetworkAdapter.NetworkAdapterId
select string.Format("{0}, {1}", p.ProfileName, h.CanonicalName)).ToList();
}