IPアドレスの取得
Metro Style App でアプリが実行されているマシンのIPアドレスを取得してみます。
IPアドレスは Windows.Networking.Connectivity.NetworkInformation.GetHostNames() で取得できる HostName に含まれています。
複数の HostName が返ってきますが、このうち NetworkAdapter が null ではない物がIPアドレスです。
以下のようなサンプルで動作を確認してみました。
var hostNames = Windows.Networking.Connectivity.NetworkInformation.GetHostNames(); for (int i = 0; i < hostNames.Count; i++) { Debug.WriteLine("HostName {0}", i + 1); Debug.WriteLine(" DisplayName = {0}", hostNames[i].DisplayName); Debug.WriteLine(" RawName = {0}", hostNames[i].RawName); Debug.WriteLine(" CanonicalName = {0}", hostNames[i].CanonicalName); if (hostNames[i].NetworkAdapter != null) { Debug.WriteLine(" IP Address = yes"); Debug.WriteLine(" NetworkAdapterId = {0}", hostNames[i].NetworkAdapter.NetworkAdapterId.ToString()); } }
実行すると、以下の4種類の情報が取得できました。
試した範囲では DisplayName と RawName は同じでした。
CanonicalName はIPアドレスの場合違いがありませんでしたが、コンピューター名の場合は全て小文字で取得されました。
IPv4 と IPv6 を識別する情報はありませんので、文字列の書式で判別するしかないようです。
今回は NIC が1つだけしか動作していない環境でしたが、複数動作している場合はIPアドレスも複数取得できると思われます。
複数取得できた場合、IPv4 と IPv6 のペアを判別する情報がない(NetworkAdapterId は同じ NIC の IPv4 と IPv6 で違う値)ので問題があるかもしれません。
なお、MACアドレスについても取得できないか調べましたが、こちらは取得方法を見つけられませんでした(System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces() は削除されているようです)。
端末識別に使用できないようにするために、意図的に取得できないようになっているのかもしれません。