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)。
嘗試連接一個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)卡,但是對于內(nèi)網(wǎng)地址,不一定適用,同時要求網(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ù)通過篩選IPv4的方法進(jìn)行更精確的選擇,和第一種方法是類似的。操作方法非常簡潔,但是和獲得網(wǎng)卡信息一樣,不能區(qū)分虛擬網(wǎng)卡。
總結(jié)
對于有雙網(wǎng)卡的情況,往往兩個網(wǎng)卡都是有效的IPV4地址,這個時候需要使用方法2通過局域網(wǎng)或者廣域網(wǎng)內(nèi)訪問進(jìn)行區(qū)分。當(dāng)然也可以選擇更為復(fù)雜的方式:在局域網(wǎng)內(nèi)使用廣播服務(wù),然后再抓包確定獲取的網(wǎng)絡(luò)地址。
以上就是c# 獲得本地ip地址的三種方法的詳細(xì)內(nèi)容,更多關(guān)于c# 獲得本地ip地址的資料請關(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#實(shí)現(xiàn)控制線程池最大數(shù)并發(fā)線程
這篇文章主要介紹了C#實(shí)現(xiàn)控制線程池最大數(shù)并發(fā)線程的相關(guān)資料,需要的朋友可以參考下2016-07-07詳解WPF如何在Panel中實(shí)現(xiàn)設(shè)置所有子項間距
這篇文章主要為大家詳細(xì)介紹了WPF如何在Panel中實(shí)現(xiàn)設(shè)置所有子項間距,本文借鑒了 Qt 中的 Spacing 設(shè)置方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-10-10httpwebreqeust讀取httponly的cookie方法
下面小編就為大家?guī)硪黄猦ttpwebreqeust讀取httponly的cookie方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01C#如何在窗體程序中操作數(shù)據(jù)庫數(shù)據(jù)
這篇文章主要介紹了C#如何在窗體程序中操作數(shù)據(jù)庫數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04DataGridView不顯示最下面的新行、判斷新增行、刪除行操作
這篇文章介紹了DataGridView不顯示最下面的新行、判斷新增行、刪除行的操作方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02