こんにちは、あかぴです。
今回は C# で自身のローカルIPアドレスを取得することについての話題です。
前説
.net core はマルチプラットフォームなことがウリなので、Linux上で動くアプリケーションを作成することもあると思います。 .net の WebClient では自身のIPアドレスを調べるのにSystem.Net.Dns.GetHostAddresses() を用いる方法が良く使われています。
例: C# で自分のPCのIPアドレスを取得 – Edifying Soil (hatenablog.com)
問題
Linux上で上記の方法を用いてIPアドレスを取得すると、ループバックアドレス(だいたい 127.0.0.1)だけしか返ってきません。
解決策
NetworkInterface.GetAllNetworkInterfaces() を用いる方法を利用します
var heserver = NetworkInterface.GetAllNetworkInterfaces(); foreach(var host in heserver) { foreach(var ip in host.GetIPProperties().UnicastAddresses){ string addr_str = ip.Address.ToString(); if (addr_str.StartsWith("192.168")) { return addr_str; } } }
上記のコードでは、取得したアドレスのうち一番最初に見つかった192.168から始まるものを返しています。全部ほしければ適当なListにでも突っ込めばいいかと思います。
結果
私の試した環境 (raspberry pi os, .net core コンソールアプリ) では上手くいきました。
参考
本問題に関しての議論が上記ページで行われています。