PG.Lib

アプリ開発関連とかガジェット関連とか

ローカルマシンのIPアドレスを取得する

デスクトップアプリとかだったら、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