在 C# 中獲取本地 IP 地址
-
使用 C# 中的
Dns.GetHostEntry()
函式獲取本地 IP 地址 -
使用 C# 中的
Socket.LocalEndPoint
屬性獲取本地 IP 地址 - 在 C# 中使用 Linq 獲取本地 IP 地址
-
在 C# 中使用
NetworkInterface
類獲取本地 IP 地址
在本教程中,我們將討論在 C# 中獲取機器本地 IP 地址的方法。
使用 C# 中的 Dns.GetHostEntry()
函式獲取本地 IP 地址
Dns
類獲取與 Internet 上的主機有關的資訊。在 C# 中,Dns
類中有很多方法可以實現 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.InterNetworkV6
屬性,而不是 AddressFamily.InterNetwork
屬性。
使用 C# 中的 Socket.LocalEndPoint
屬性獲取本地 IP 地址
當有多個 IP 地址時,獲取我們機器的本地 IP 地址的一種更準確的方法是連線 UDP 套接字,然後讀取其本地端點。C# 中的 Socket
類實現了 Berkeley 套接字介面,該介面提供了網路通訊的功能。以下程式碼示例向我們展示瞭如何使用 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 在 C# 中獲取計算機的本地 IP 地址。
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# 中的 Linq 的 Dns.GetHostEntry()
函式確定了計算機的本地 IPv4 地址。其餘程式碼類似於我們的第一個示例;唯一的區別是,我們從 Dns.GetHostEntry()
函式返回的地址列表中僅提取了一個 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
類檢索了本地計算機的 WLAN IPv4 地址。上面的程式碼可用於獲取我們本地計算機上的任何型別的 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