技術ブログを開設する
ログイン
プログラマのための技術ブログプラットフォーム

C#でゲートウェイが設定されているNICのIPアドレスを取得する

2019-01-11に投稿

クライアント向けに外部からアクセスできるNICのIPアドレスを取得するためのコード。
VirtualBoxなどで作られる仮想NICは除外する。
サーバーなどで複数のゲートウェイがある場合はもう一工夫が必要になる。

using System.Linq;  
using System.Net;  
using System.Net.NetworkInformation;  
using System.Net.Sockets;  

private static IPAddress GetLocalAddress(AddressFamily addressFamily = AddressFamily.InterNetwork)  
{  
    // PC向け  
    var localAddress NetworkInterface.GetAllNetworkInterfaces()  
        .Where(i => i.OperationalStatus == OperationalStatus.Up)  
        .Where(i => i.NetworkInterfaceType != NetworkInterfaceType.Loopback)  
        .Where(i => i.GetIPProperties().GatewayAddresses.Count > 0)  
        .SelectMany(i => i.GetIPProperties().UnicastAddresses)  
        .Where(address => address.Address.AddressFamily == addressFamily)  
        .Select(address => address.Address)  
        .FirstOrDefault();  

    // スマホ向け  
    if (localAddress == null)  
    {  
        localAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList  
            .FirstOrDefault(addr => addr.AddressFamily == addressFamily);  
    }  

    return localAddress;  
}

このログへのコメント

コメントはありません
このエントリーをはてなブックマークに追加