デスクトップアプリとかだったら、Dns.GetHostEntry あたりで取得できる。
が、WinRTの場合はちょっと違うようだ。
とりあえずコード。
using Windows.Networking.Connectivity; /// <summary> /// 現在接続中のIPアドレス取得 /// </summary> /// <returns></returns> private string getIpAddress() { var profile = NetworkInformation.GetInternetConnectionProfile(); if (profile != null && profile.NetworkAdapter != null) { foreach (var info in NetworkInformation.GetHostNames()) { if (info.Type == HostNameType.Ipv4 && profile.NetworkAdapter.NetworkAdapterId == info.IPInformation.NetworkAdapter.NetworkAdapterId) { // IPv4 かつ 現在接続中のアダプターID return info.CanonicalName; } } } return string.Empty; }
var profile = NetworkInformation.GetInternetConnectionProfile();
こいつで接続されているネットワークの情報が取得できるっぽい。
NetworkInformation.GetHostNames()
これでホスト名やらIPアドレスやらがリストで取得できるので foreach で回す。
profile.NetworkAdapter.NetworkAdapterId == info.IPInformation.NetworkAdapter.NetworkAdapterId
現在接続中のものを判定するのなら、最初に取得したのとリストの NetworkAdapterId を比較する。
ホスト名の場合は、NetworkAdapter が null なので、IPアドレスを取得する場合に使えるっぽい。
複数アダプターが繋がっている場合とか色々テストしてないので、おかしいところがあるかも。
とりあえず今の環境では動いてるw