掘り下げた後、 NetworkInformationとHostNameを使用して必要な情報を見つけました。
NetworkInformation.GetInternetConnectionProfileは、ローカル マシンで現在使用されているインターネット接続に関連付けられている接続プロファイルを取得します。
NetworkInformation.GetHostNamesは、ホスト名のリストを取得します。明らかではありませんが、これには IPv4 および IPv6 アドレスが文字列として含まれます。
この情報を使用して、インターネットに接続されているネットワーク アダプターの 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();
}