C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析
概述
在C#中,获取本机IP地址是非常常见的功能,但如何获取本机所处的网络IP地址呢?本文将详细讲解获取本地内网(局域网)和外网(公网)IP地址的方法分析,并提供两条示例说明。
获取本地内网IP地址
获取本地内网(局域网)IP地址可以使用System.Net.NetworkInformation.NetworkInterface
类,该类提供了获取网络接口的信息的方法,包括IP地址、MAC地址等信息。
using System.Net.NetworkInformation;
...
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
// 找到本机第一个非回环地址的IPv4地址
if (ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet || ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
{
foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork && !IPAddress.IsLoopback(ip.Address))
{
Console.WriteLine($"本机内网IP地址:{ip.Address}");
break;
}
}
}
}
该代码使用了NetworkInterface.GetAllNetworkInterfaces()
方法来获取所有网络接口信息,然后利用UnicastIPAddressInformation
类中的Address
属性获取IP地址。其中,NetworkInterfaceType
用于指明网络接口类型,AddressFamily.InterNetwork
表示IPv4地址,IPAddress.IsLoopback()
方法用于判断是否为回环地址。
获取外网(公网)IP地址
获取外网(公网)IP地址需要借助网络请求。常用的网站为http://www.ip138.com/
和http://icanhazip.com/
,通过访问该网站获取本机的公网IP地址。
using System.Net;
...
string content;
using (WebClient wc = new WebClient())
{
content = wc.DownloadString("http://www.ip138.com/ip2city.asp");
}
Match match = Regex.Match(content, @"\[(.*)\]");
if (match.Success)
{
Console.WriteLine($"本机公网IP地址:{match.Groups[1].Value}");
}
该代码使用了WebClient.DownloadString(string address)
方法来获取网站的内容,然后借助正则表达式匹配IP地址。由于不同的网站可能返回的字符串格式不同,所以需要根据实际情况进行修改。
总结
本文介绍了获取本地内网(局域网)和外网(公网)IP地址的方法,分别使用了System.Net.NetworkInformation.NetworkInterface
和System.Net.WebClient
类。实际开发中,应根据需要使用相应的方法进行IP地址获取。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析 - Python技术站