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#實(shí)現(xiàn)控制線程池最大數(shù)并發(fā)線程
這篇文章主要介紹了C#實(shí)現(xiàn)控制線程池最大數(shù)并發(fā)線程的相關(guān)資料,需要的朋友可以參考下2016-07-07使用c#實(shí)現(xiàn)微信自動(dòng)化功能
這篇文章主要介紹了使用c#實(shí)現(xiàn)微信自動(dòng)化,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08詳解WPF如何在Panel中實(shí)現(xiàn)設(shè)置所有子項(xiàng)間距
這篇文章主要為大家詳細(xì)介紹了WPF如何在Panel中實(shí)現(xiàn)設(shè)置所有子項(xiàng)間距,本文借鑒了 Qt 中的 Spacing 設(shè)置方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-10-10httpwebreqeust讀取httponly的cookie方法
下面小編就為大家?guī)?lái)一篇httpwebreqeust讀取httponly的cookie方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01C#條件語(yǔ)句、循環(huán)語(yǔ)句(if、while)
這篇文章主要介紹了C#條件語(yǔ)句、循環(huán)語(yǔ)句(if、while)的用法,學(xué)習(xí)c#的朋友可以參考下2014-03-03C#如何在窗體程序中操作數(shù)據(jù)庫(kù)數(shù)據(jù)
這篇文章主要介紹了C#如何在窗體程序中操作數(shù)據(jù)庫(kù)數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04DataGridView不顯示最下面的新行、判斷新增行、刪除行操作
這篇文章介紹了DataGridView不顯示最下面的新行、判斷新增行、刪除行的操作方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02