.net core で linux 上のローカルIPアドレスを取得する方法

こんにちは、あかぴです。

今回は 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 コンソールアプリ) では上手くいきました。

 

参考

System.Net.Dns.GetHostAddresses() does not return all local ip addresses on Linux/.NET Core (it works in .NET Framework) · Issue #27534 · dotnet/runtime · GitHub

本問題に関しての議論が上記ページで行われています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です