c# 獲得本地ip地址的三種方法
網(wǎng)上有很多種方法可以獲取到本地的IP地址。一線常用的有這么些:
枚舉本地網(wǎng)卡
using System.Net.NetworkInformation;
using System.Net.Sockets;
foreach (NetworkInterface netif in NetworkInterface.GetAllNetworkInterfaces()
.Where(a => a.SupportsMulticast)
.Where(a => a.OperationalStatus == OperationalStatus.Up)
.Where(a => a.NetworkInterfaceType != NetworkInterfaceType.Loopback)
.Where(a => a.GetIPProperties().GetIPv4Properties() != null)
.Where(a => a.GetIPProperties().UnicastAddresses.Any(ua => ua.Address.AddressFamily == AddressFamily.InterNetwork))
.Where(a => a.GetIPProperties().UnicastAddresses.Any(ua => ua.IsDnsEligible))
)
{
Console.WriteLine("Network Interface: {0}", netif.Name);
IPInterfaceProperties properties = netif.GetIPProperties();
foreach (IPAddressInformation unicast in properties.UnicastAddresses)
Console.WriteLine("\tUniCast: {0}", unicast.Address);
}
獲得的信息比較全面,相當(dāng)于網(wǎng)卡的信息都能獲取,但是不能區(qū)分虛擬網(wǎng)卡(比如docker)。
嘗試連接一個(gè)IP地址
string localIP;
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(localIP);
可以避免虛擬網(wǎng)卡,但是對(duì)于內(nèi)網(wǎng)地址,不一定適用,同時(shí)要求網(wǎng)絡(luò)必須在線,并且有其他服務(wù)器可以進(jìn)行連接。
借用DNS解析
using System.Net;
string sHostName = Dns.GetHostName();
IPHostEntry ipE = Dns.GetHostEntry(sHostName);
IPAddress[] IpA = ipE.AddressList;
for (int i = 0; i < IpA.Length; i++)
{
Console.WriteLine("IP Address {0}: {1} ", i, IpA[i].ToString());
}
IPAddress還可以繼續(xù)通過(guò)篩選IPv4的方法進(jìn)行更精確的選擇,和第一種方法是類似的。操作方法非常簡(jiǎn)潔,但是和獲得網(wǎng)卡信息一樣,不能區(qū)分虛擬網(wǎng)卡。
總結(jié)
對(duì)于有雙網(wǎng)卡的情況,往往兩個(gè)網(wǎng)卡都是有效的IPV4地址,這個(gè)時(shí)候需要使用方法2通過(guò)局域網(wǎng)或者廣域網(wǎng)內(nèi)訪問(wèn)進(jìn)行區(qū)分。當(dāng)然也可以選擇更為復(fù)雜的方式:在局域網(wǎng)內(nèi)使用廣播服務(wù),然后再抓包確定獲取的網(wǎng)絡(luò)地址。
以上就是c# 獲得本地ip地址的三種方法的詳細(xì)內(nèi)容,更多關(guān)于c# 獲得本地ip地址的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- c#獲取客戶端IP地址(考慮代理)
- 獲取客戶端IP地址c#/vb.net各自實(shí)現(xiàn)代碼
- 如何用C#驗(yàn)證IP是否為局域網(wǎng)地址
- C#實(shí)現(xiàn)獲取本地內(nèi)網(wǎng)(局域網(wǎng))和外網(wǎng)(公網(wǎng))IP地址的方法分析
- C#獲取本機(jī)IP地址(ipv4)
- C#編程獲取IP地址的方法示例
- winform C#獲得Mac地址,IP地址,子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān)的實(shí)例
- C#獲取路由器外網(wǎng)IP,MAC地址的實(shí)現(xiàn)代碼
- C#實(shí)現(xiàn)獲取設(shè)置IP地址小工具
- C#獲取真實(shí)IP地址實(shí)現(xiàn)方法
- C# 獲取客戶端IPv4地址的示例代碼
相關(guān)文章
c#之利用API函數(shù)實(shí)現(xiàn)動(dòng)畫窗體的方法詳解
本篇文章是對(duì)c#中利用API函數(shù)實(shí)現(xiàn)動(dòng)畫窗體的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
C#中DataTable和List互轉(zhuǎn)的示例代碼
很多場(chǎng)景下,我們需要將List轉(zhuǎn)換成為DataTable,本文主要介紹了C#中DataTable和List互轉(zhuǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
C#中使用Socket獲取網(wǎng)頁(yè)源代碼的代碼
C#使用Socket獲取網(wǎng)頁(yè)源代碼的代碼,需要的朋友可以參考下。2010-12-12
C#判斷頁(yè)面中的多個(gè)文本框輸入值是否有重復(fù)的實(shí)現(xiàn)方法
這篇文章主要介紹了C#判斷頁(yè)面中的多個(gè)文本框輸入值是否有重復(fù)的實(shí)現(xiàn)方法,是一個(gè)非常簡(jiǎn)單實(shí)用的技巧,需要的朋友可以參考下2014-10-10
Unity ScrollView實(shí)現(xiàn)動(dòng)態(tài)列表生成
這篇文章主要為大家詳細(xì)介紹了Unity ScrollView實(shí)現(xiàn)動(dòng)態(tài)列表生成,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04

