【C#】C#获取本地的内网(局域网)和外网(公网)IP地址的方法
1、获取本机的IP地址集合:
1 /// <summary> 2 /// 获取本机所有ip地址 3 /// </summary> 4 /// <param name="netType">"InterNetwork":ipv4地址,"InterNetworkV6":ipv6地址</param> 5 /// <returns>ip地址集合</returns> 6 public static List<string> GetLocalIpAddress(string netType) 7 { 8 string hostName = Dns.GetHostName(); //获取主机名称 9 IPAddress[] addresses = Dns.GetHostAddresses(hostName); //解析主机IP地址 10 11 List<string> IPList = new List<string>(); 12 if (netType==string.Empty) 13 { 14 for (int i = 0; i < addresses.Length; i++) 15 { 16 IPList.Add(addresses[i].ToString()); 17 } 18 } 19 else 20 { 21 //AddressFamily.InterNetwork表示此IP为IPv4, 22 //AddressFamily.InterNetworkV6表示此地址为IPv6类型 23 for (int i = 0; i < addresses.Length; i++) 24 { 25 if (addresses[i].AddressFamily.ToString() == netType) 26 { 27 IPList.Add(addresses[i].ToString()); 28 } 29 } 30 } 31 return IPList; 32 }
1 List<string> ips= GetLocalIpAddress("");//获取本地所有ip 2 List<string> ipv4_ips = GetLocalIpAddress("InterNetwork");//获取ipv4类型的ip 3 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信息;
1 /// <summary> 2 /// 获取页面html 3 /// </summary> 4 /// <param name="url">请求的地址</param> 5 /// <param name="encoding">编码方式</param> 6 /// <returns></returns> 7 public static string HttpGetPageHtml(string url, string encoding) 8 { 9 string pageHtml = string.Empty; 10 try 11 { 12 using (WebClient MyWebClient = new WebClient()) 13 { 14 Encoding encode = Encoding.GetEncoding(encoding); 15 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"); 16 MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据 17 Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据 18 pageHtml = encode.GetString(pageData); 19 } 20 } 21 catch (Exception e) 22 { 23 24 } 25 return pageHtml; 26 } 27 /// <summary> 28 /// 从html中通过正则找到ip信息(只支持ipv4地址) 29 /// </summary> 30 /// <param name="pageHtml"></param> 31 /// <returns></returns> 32 public static string GetIPFromHtml(String pageHtml) 33 { 34 //验证ipv4地址 35 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)))"; 36 string ip = ""; 37 Match m = Regex.Match(pageHtml, reg); 38 if (m.Success) 39 { 40 ip = m.Value; 41 } 42 return ip; 43 }
测试(测试时间:2019年6月18日17:37:46):
1 var t0_html = HttpGetPageHtml("https://www.ip.cn", "utf-8"); 2 var t1_html = HttpGetPageHtml("http://www.ip138.com/ips138.asp", "gbk"); 3 var t2_html = HttpGetPageHtml("http://www.net.cn/static/customercare/yourip.asp", "gbk"); 4 var t0_ip = GetIPFromHtml(t0_html);// 111.198.29.123 5 var t1_ip = GetIPFromHtml(t1_html);// 111.198.29.123 6 var t2_ip = GetIPFromHtml(t2_html);// 111.198.29.123
目前这几个url地址都可以用,但不保证长久稳定,如果想稳定可靠的使用,可以使用一些收费的API接口,比如:http://user.ip138.com/ip/
————————————————————————————————————————
转载于:https://www.cnblogs.com/willingtolove/p/11046564.html
【C#】C#获取本地的内网(局域网)和外网(公网)IP地址的方法相关推荐
- 网易云音乐外链的真实地址下载方法
一个网易音乐外链地址长期有效,很简单的方法: 第一步打开网易云音乐,随便找到一首歌,播放,复制网址的ID, 例如:杨钰莹的心雨,网址是: http://music.163.com/#/song?id= ...
- 本地调试微信接口(内网穿透到外网)
原文链接:http://blog.csdn.net/xyang81/article/details/52141881 在做微信开发的时候,调用微信接口成功之后,微信会回调我们事先配置好的一个接口.由于 ...
- c#获取本地ip地址网关子网掩码_教你如何修改路由器LAN口IP地址的方法
现在绝大部分品牌或非品牌有线或无线路由器,其LAN口地址一般使用192.168.1.1或192.168.0.1网段,而使用此默认地址,既不安全,有时也不实用,比如局域网中电脑数过高,超过255台,则此 ...
- 本地如何内网穿透映射外网
在Internet网络中,两种网络形式是可以相互通讯的,一是公网IP是能够互相通讯的:二是局域网内,同归网段的私有IP地址能够互相通讯.公网IP和私有IP不能互相通讯.路由器一般有两个IP:一个是公网 ...
- 黑色沙漠(黑沙)单机版局域网联机外网公网教程
黑色沙漠(黑沙)单机版局域网联机外网公网教程 一.以下是我参考了网上一些教程针对以下问题的一些想法: 黑色沙漠(黑沙)单机版怎么改多人一起玩?怎么开局域网?怎么开公网,没有公网固定IP怎么办?公网动态 ...
- 几种查询局域网内在线弱电设备IP地址的方法,总有一款你会用的到
方法一:通过电脑cmd命令查询局域网内设备IP 在电脑开始菜单[运行],输入cmd回车,在弹出的命令提示窗口输入ipconfig/all回车,能够查看本机的IP.网关.mac地址信息. 然后在命令提示 ...
- 内网如何连接外网,注意!!
局域网连接外网的方法 第一步:连接到外网必须的条件 这一步要求大家一定要有一条能上网的线路,这样才能与局域网连接上外网,申请好宽带线路后需要把这条线路与路由器连接起来,保证畅通的情况下才可以进行下一步 ...
- Mac下Sunny_Ngrok内网地址映射成外网
我们本地Tomcat服务器访问的时候一般是127.0.0.1加端口号,比如:http://127.0.0.1:8080 但是这个只有统一局域网的设备才能访问,比如我们想发布一个外部网络也可以访问的we ...
- 使用内网穿透实现外网访问本地接口
java 内网穿透-实现外网访问本地IP接口 概念–所谓内网穿透,简单来说就是提供一个域名绑定内网IP和端口来实现外网访问内网. 业务场景,由于本人从事物联网开发经常需要对接一下硬件,人在公司但是需要 ...
- 通过设置路由器来实现局域网和外网的传奇SF架设
今天给大家讲一下如何通过设置路由器来实现局域网和外网的传奇SF架设! 就地取材,就拿世面上用的很广的D-Link DI-504 型号家庭装路由器给大家做图解吧! 不管是大小路由器基本上都有这几个功能的 ...
最新文章
- EBS并发管理器启动失败,系统暂挂,在重置计数器之前修复管理程序
- Linux 下的dd命令使用详解(摘录)
- HDU多校1 - 6959 zoto(莫队+树状数组/值域分块)
- Linux 命令之 vmstat 命令-显示虚拟内存状态
- Head first servlet and jsp学习笔记
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
- HTML+CSS页面练习——legend第九部分
- python 百度搜索结果_Python洗涤百度搜索结果
- C++ 从入门到入土(English Version)Section 8 : Recursion, Searching and Backtracking
- 工作那些事(四)大公司VS小公司
- CHIP-SEQ 芯片分析时,对于来自重复实验的数据,怎样进行MACS peaks calling 分析?
- 交叉编译 WPA_Supplicant
- 英文论文写作小贴士(2)
- mysql myisam转innodb_WordPressMySQL数据库MyISAM表转换InnoDB方法和修复工具
- 【幸福是什么,幸福的含义到底有多深呢?】
- 三星手机提取微信聊天数据
- 基于THREEJS场景中模型局部辉光效果
- DimLayer实现和setRelativeLayer分析【Android12】
- 销售人员开发大客户技巧 大客户销售怎样做好
- 2022 IEEE 全球机器人、人工智能与信息技术学术会议(GCRAIT2022)