C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析
- 作者: 风吹内裤JB凉
- 来源: 51数据库
- 2021-07-31
本文实例讲述了c#实现获取本地内网(局域网)和外网(公网)ip地址的方法。分享给大家供大家参考,具体如下:
1、获取本机的ip地址集合:
/// <summary>
/// 获取本机所有ip地址
/// </summary>
/// <param name="nettype">"internetwork":ipv4地址,"internetworkv6":ipv6地址</param>
/// <returns>ip地址集合</returns>
public static list<string> getlocalipaddress(string nettype)
{
string hostname = dns.gethostname(); //获取主机名称
ipaddress[] addresses = dns.gethostaddresses(hostname); //解析主机ip地址
list<string> iplist = new list<string>();
if (nettype==string.empty)
{
for (int i = 0; i < addresses.length; i++)
{
iplist.add(addresses[i].tostring());
}
}
else
{
//addressfamily.internetwork表示此ip为ipv4,
//addressfamily.internetworkv6表示此地址为ipv6类型
for (int i = 0; i < addresses.length; i++)
{
if (addresses[i].addressfamily.tostring() == nettype)
{
iplist.add(addresses[i].tostring());
}
}
}
return iplist;
}
list<string> ips= getlocalipaddress("");//获取本地所有ip
list<string> ipv4_ips = getlocalipaddress("internetwork");//获取ipv4类型的ip
list<string> ipv6_ips = getlocalipaddress("internetworkv6");//获取ipv6类型的ip
2、获取本机局域网内ip地址:
如果本机在局域网内,直接调用上面的方法即可,以ipv4为例:
list<string> ipv4_ips = getlocalipaddress("internetwork");
如果本机只有一个网卡,且没有安装虚拟网卡,那么ipv4_ips里应该只有一条数据,即局域网内地址;
3、获取本机的公网ip地址:
1)、如果本机是拨号上网的或具有独立公网ip的情况下,使用上面的方法即可,以ipv4为例:
list<string> ipv4_ips = getlocalipaddress("internetwork");
如果本机只有一个网卡,且没有安装虚拟网卡,那么ipv4_ips里应该只有一条数据,即公网ip地址;
2)、如果是路由上网的,想获取网关的外网ip,只能通过访问一些公网的地址来获取外网ip了;
步骤:先获取到含有本机外网ip的页面信息,再通过正则获取到ip信息;
/// <summary>
/// 获取页面html
/// </summary>
/// <param name="url">请求的地址</param>
/// <param name="encoding">编码方式</param>
/// <returns></returns>
public static string httpgetpagehtml(string url, string encoding)
{
string pagehtml = string.empty;
try
{
using (webclient mywebclient = new webclient())
{
encoding encode = encoding.getencoding(encoding);
mywebclient.headers.add("user-agent", "mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/68.0.3440.84 safari/537.36");
mywebclient.credentials = credentialcache.defaultcredentials;//获取或设置用于向internet资源的请求进行身份验证的网络凭据
byte[] pagedata = mywebclient.downloaddata(url); //从指定网站下载数据
pagehtml = encode.getstring(pagedata);
}
}
catch (exception e)
{
}
return pagehtml;
}
/// <summary>
/// 从html中通过正则找到ip信息(只支持ipv4地址)
/// </summary>
/// <param name="pagehtml"></param>
/// <returns></returns>
public static string getipfromhtml(string pagehtml)
{
//验证ipv4地址
string reg = @"(?:(?:(25[0-5])|(2[0-4]\d)|((1\d{2})|([1-9]?\d)))\.){3}(?:(25[0-5])|(2[0-4]\d)|((1\d{2})|([1-9]?\d)))";
string ip = "";
match m = regex.match(pagehtml, reg);
if (m.success)
{
ip = m.value;
}
return ip;
}
测试(测试时间:2019年6月18日17:37:46):
var t0_html = httpgetpagehtml("http://www.51sjk.com/Upload/Articles/1/0/262/262451_20210702002841446.cn", "utf-8");
var t1_html = httpgetpagehtml("http://www.51sjk.com/Upload/Articles/1/0/262/262451_20210702002841462.asp", "gbk");
var t2_html = httpgetpagehtml("http://www.51sjk.com/Upload/Articles/1/0/262/262451_2021070200284146201.asp", "gbk");
var t0_ip = getipfromhtml(t0_html);// 111.198.29.123
var t1_ip = getipfromhtml(t1_html);// 111.198.29.123
var t2_ip = getipfromhtml(t2_html);// 111.198.29.123



目前这几个url地址都可以用,但不保证长久稳定,如果想稳定可靠的使用,可以使用一些收费的api接口,比如:

ps:这里再为大家推荐几款ip相关工具供大家参考使用:
ip地址归属地在线查询工具:
在线ip地址/子网掩码计算与转换工具:
在线网络计算器|tcp/ip子网掩码计算与换算工具:
推荐阅读
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
热点文章
团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
0
使用 MSBuild.exe 在发布模式下构建 C# 解决方案
0
当我发布 Web 应用程序时,AfterPublish 脚本不运行
0
构建时 T4 转换的产品仅在下一个构建中使用
0
ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
0
新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
0
如何将条件编译符号(DefineConstants)传递给 msbuild
0
MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
0
NuGet 包还原找不到包,没有源
0
使用 C# 6.0 功能运行 TFS 构建
0
