C# でローカル IP アドレスを取得する

Muhammad Maisam Abbas 2024年2月16日
  1. C# の Dns.GetHostEntry() 関数を使用してローカル IP アドレスを取得する
  2. C# の Socket.LocalEndPoint プロパティを使用してローカル IP アドレスを取得する
  3. C# で Linq を使用してローカル IP アドレスを取得する
  4. C# の NetworkInterface クラスでローカル IP アドレスを取得する
C# でローカル IP アドレスを取得する

このチュートリアルでは、C# でマシンのローカル IP アドレスを取得する方法について説明します。

C# の Dns.GetHostEntry() 関数を使用してローカル IP アドレスを取得する

Dns クラスは、インターネット上のホストに関連する情報を取得します。Dns クラスには、C# の DNS 関連機能のための多くのメソッドがあります。Dns.GetHostEntry() 関数を使用して取得しますホストの IP アドレス。

次のコード例は、C# の Dns.GetHostEntry() 関数を使用してマシンのローカル IP アドレスを取得する方法を示しています。

using System;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      String strHostName = string.Empty;
      IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName());
      IPAddress[] addr = ipEntry.AddressList;

      for (int i = 0; i < addr.Length; i++) {
        Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString());
      }
    }
  }
}

出力:

IP Address 0: fe80::1db8:23a7:6483:8976%20
IP Address 1: 192.168.43.239

上記のコードでは、Dns.GetHostName() 関数を Dns.GetHostEntry() 関数のパラメーターとして渡して、C# でローカルマシンの IP アドレスを取得しました。この方法の唯一の問題は、マシンのすべての IP アドレスが得られることです。特定の IP アドレスを取得するには、C# で次のコードを記述する必要があります。

using System;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      var host = Dns.GetHostEntry(Dns.GetHostName());
      foreach (var ip in host.AddressList) {
        if (ip.AddressFamily == AddressFamily.InterNetwork) {
          Console.WriteLine("IP Address = " + ip.ToString());
        }
      }
    }
  }
}

出力:

IP Address = 192.168.43.239

上記のコードでは、ip.AddressFamilyAddressFamily.InterNetwork と等しいかどうかを確認しました。この条件は、ip 変数の IP アドレスが IPv4 アドレスであるかどうかをチェックします。上記のコードは、マシンの IPv4 アドレスのみを返します。マシンの IPv6 アドレスを取得する場合は、AddressFamily.InterNetwork の代わりに AddressFamily.InterNetworkV6 属性を使用できます。

C# の Socket.LocalEndPoint プロパティを使用してローカル IP アドレスを取得する

複数の IP アドレスがある場合にマシンのローカル IP アドレスを取得するより正確な方法は、UDP ソケットを接続してから、そのローカルエンドポイントを読み取ることです。C# の Socket クラスは、ネットワーク通信のための機能を提供するバークレーのソケット・インターフェースを実装しています。次のコード例は、Socket.LocalEndPoint プロパティC# でマシンのローカル IP アドレスを決定します。

using System;
using System.Net;
using System.Net.Sockets;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      string localIP = string.Empty;
      using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0)) {
        socket.Connect("8.8.8.8", 65530);
        IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
        localIP = endPoint.Address.ToString();
      }
      Console.WriteLine("IP Address = " + localIP);
    }
  }
}

出力:

IP Address = 192.168.43.239

上記のコードでは、socket ソケットをローカルマシンに接続し、socket.LocalEndPoint 属性を使用して socket のローカルエンドポイントを抽出しました。endPoint.Address 属性を使用して、endPoint の IP アドレスを取得しました。

C# で Linq を使用してローカル IP アドレスを取得する

Linq または統合言語クエリは、C# で SQL 機能を提供します。Linq と Dns.GetHostEntry() 関数を使用して、C# でマシンのローカル IP アドレスを取得することもできます。

次のコード例は、Linq を使用してマシンのローカル IP アドレスを C# で取得する方法を示しています。

using System;
using System.Linq;
using System.Net;

namespace get_local_ip_address {
  class Program {
    static void Main(string[] args) {
      if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {
        Console.WriteLine("No Network Available");
      }

      IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());

      var ippaddress =
          host.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
      Console.WriteLine(ippaddress);
    }
  }
}

出力:

192.168.43.239

上記のコードでは、C# の Dns.GetHostEntry() 関数で Linq を使用して、マシンのローカル IPv4 アドレスを決定しました。残りのコードは最初の例と同様です。唯一の違いは、Dns.GetHostEntry() 関数によって返されるアドレスのリストから 1つの IPv4 アドレスのみを抽出したことです。

C# の NetworkInterface クラスでローカル IP アドレスを取得する

NetworkInterface クラスには、ローカルマシンのネットワークインターフェイスに関するデータが含まれていますネットワークインターフェイスの統計と構成を提供します。NetworkInterface クラスの GetAllNetworkInterfaces() 関数ローカルマシン上のすべてのネットワークインターフェイスを提供します。NetworkInterface クラスの NetworkInterfaceType プロパティが使用されますネットワークインターフェイスのタイプを取得します。

次のコード例は、これらすべての関数を使用して、C# でローカルマシンのローカル IP アドレスを取得する方法を示しています。

using System;
using System.Linq;
using System.Net;

namespace get_local_ip_address {
  class Program {
    public static void getLocalIPAddressWithNetworkInterface(NetworkInterfaceType _type) {
      string output = "";
      foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces()) {
        if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up) {
          foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses) {
            if (ip.Address.AddressFamily == AddressFamily.InterNetwork) {
              output = ip.Address.ToString();
            }
          }
        }
      }
      Console.WriteLine("IP Address = " + output);
    }
    static void Main(string[] args) {
      getLocalIPAddressWithNetworkInterface(NetworkInterfaceType.Wireless80211);
    }
  }
}

出力:

IP Address = 192.168.43.239

上記のコードの C# で NetworkInterface クラスを使用して、ローカルマシンの WLANIPv4 アドレスを取得しました。上記のコードを使用して、ローカルマシン上の任意のタイプの IP アドレスを取得できます。たとえば、イーサネットインターフェイスの IP アドレスを取得する場合は、関数呼び出しで NetworkInterfaceType.Ethernet を渡して指定する必要があります。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

関連記事 - Csharp Network