LocalAddressの取得

getLocalAddress_thumbAIRアプリから、デバイスのipアドレスを取得する場合には、NetworkInfoから取得すると簡単なはずなんだけど、スマホ、とくにiOSからだと上手くとれない。そこで、DatagramSocketからとる方法を試してみた。(左の画像はiOS 6.1.3での実行結果)

getLocalAddress
(上の画像はVirtualBoxがインストールされているWindows7での実行結果)

要はDatagramSocketで、適当なアドレスにconnectして、コネクトできたらそこからlocalAddressを取得している。これにより、NetworkInfoで取れない環境でも取れる。

イベントを待たないといけないのでそこが一手間かかるけど、外部からソケットで繋げるなら使いやすい値が取得できるのも嬉しい。
WindowsPC,Android,iOSでとれたし、VirtualBoxなどの仮想マシンがインストールされた環境でも、必要なアドレスのみ取得できる。
(VirtualBoxインストール済みマシンだと、起動していなくてもNetworkInfoからは仮想インターフェイスのIPV4アドレスもとれてしまう。)

2016年1月5日追記
不可視アプリでは、DatagramSocket.connectからのアドレス取得ができないようなので、NetworkInfoから取得したほうが良さそう。

バイナリー、ソース一式
https://github.com/umhr/GetLocalAddress