C# でローカル IP アドレスを取得する
-
C# の
Dns.GetHostEntry()
関数を使用してローカル IP アドレスを取得する -
C# の
Socket.LocalEndPoint
プロパティを使用してローカル IP アドレスを取得する - C# で Linq を使用してローカル IP アドレスを取得する
-
C# の
NetworkInterface
クラスでローカル 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.AddressFamily
が AddressFamily.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
を渡して指定する必要があります。
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