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地址的方法相关推荐

  1. 网易云音乐外链的真实地址下载方法

    一个网易音乐外链地址长期有效,很简单的方法: 第一步打开网易云音乐,随便找到一首歌,播放,复制网址的ID, 例如:杨钰莹的心雨,网址是: http://music.163.com/#/song?id= ...

  2. 本地调试微信接口(内网穿透到外网)

    原文链接:http://blog.csdn.net/xyang81/article/details/52141881 在做微信开发的时候,调用微信接口成功之后,微信会回调我们事先配置好的一个接口.由于 ...

  3. c#获取本地ip地址网关子网掩码_教你如何修改路由器LAN口IP地址的方法

    现在绝大部分品牌或非品牌有线或无线路由器,其LAN口地址一般使用192.168.1.1或192.168.0.1网段,而使用此默认地址,既不安全,有时也不实用,比如局域网中电脑数过高,超过255台,则此 ...

  4. 本地如何内网穿透映射外网

    在Internet网络中,两种网络形式是可以相互通讯的,一是公网IP是能够互相通讯的:二是局域网内,同归网段的私有IP地址能够互相通讯.公网IP和私有IP不能互相通讯.路由器一般有两个IP:一个是公网 ...

  5. 黑色沙漠(黑沙)单机版局域网联机外网公网教程

    黑色沙漠(黑沙)单机版局域网联机外网公网教程 一.以下是我参考了网上一些教程针对以下问题的一些想法: 黑色沙漠(黑沙)单机版怎么改多人一起玩?怎么开局域网?怎么开公网,没有公网固定IP怎么办?公网动态 ...

  6. 几种查询局域网内在线弱电设备IP地址的方法,总有一款你会用的到

    方法一:通过电脑cmd命令查询局域网内设备IP 在电脑开始菜单[运行],输入cmd回车,在弹出的命令提示窗口输入ipconfig/all回车,能够查看本机的IP.网关.mac地址信息. 然后在命令提示 ...

  7. 内网如何连接外网,注意!!

    局域网连接外网的方法 第一步:连接到外网必须的条件 这一步要求大家一定要有一条能上网的线路,这样才能与局域网连接上外网,申请好宽带线路后需要把这条线路与路由器连接起来,保证畅通的情况下才可以进行下一步 ...

  8. Mac下Sunny_Ngrok内网地址映射成外网

    我们本地Tomcat服务器访问的时候一般是127.0.0.1加端口号,比如:http://127.0.0.1:8080 但是这个只有统一局域网的设备才能访问,比如我们想发布一个外部网络也可以访问的we ...

  9. 使用内网穿透实现外网访问本地接口

    java 内网穿透-实现外网访问本地IP接口 概念–所谓内网穿透,简单来说就是提供一个域名绑定内网IP和端口来实现外网访问内网. 业务场景,由于本人从事物联网开发经常需要对接一下硬件,人在公司但是需要 ...

  10. 通过设置路由器来实现局域网和外网的传奇SF架设

    今天给大家讲一下如何通过设置路由器来实现局域网和外网的传奇SF架设! 就地取材,就拿世面上用的很广的D-Link DI-504 型号家庭装路由器给大家做图解吧! 不管是大小路由器基本上都有这几个功能的 ...

最新文章

  1. EBS并发管理器启动失败,系统暂挂,在重置计数器之前修复管理程序
  2. Linux 下的dd命令使用详解(摘录)
  3. HDU多校1 - 6959 zoto(莫队+树状数组/值域分块)
  4. Linux 命令之 vmstat 命令-显示虚拟内存状态
  5. Head first servlet and jsp学习笔记
  6. MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
  7. HTML+CSS页面练习——legend第九部分
  8. python 百度搜索结果_Python洗涤百度搜索结果
  9. C++ 从入门到入土(English Version)Section 8 : Recursion, Searching and Backtracking
  10. 工作那些事(四)大公司VS小公司
  11. CHIP-SEQ 芯片分析时,对于来自重复实验的数据,怎样进行MACS peaks calling 分析?
  12. 交叉编译 WPA_Supplicant
  13. 英文论文写作小贴士(2)
  14. mysql myisam转innodb_WordPressMySQL数据库MyISAM表转换InnoDB方法和修复工具
  15. 【幸福是什么,幸福的含义到底有多深呢?】
  16. 三星手机提取微信聊天数据
  17. 基于THREEJS场景中模型局部辉光效果
  18. DimLayer实现和setRelativeLayer分析【Android12】
  19. 销售人员开发大客户技巧 大客户销售怎样做好
  20. 2022 IEEE 全球机器人、人工智能与信息技术学术会议(GCRAIT2022)

热门文章

  1. 本人译著《Professional Xcode 3》现已翻译完毕
  2. 如何设置 iCloud 云盘?
  3. 如何将PDF转换为DOCX?
  4. Mac废纸篓无法清空怎么办?
  5. 解决IIShalders错误,解决IISmodules错误
  6. Installation of Requests
  7. TalkingData崔晓波:移动数据工具发展的三个阶段
  8. 循环语句—C#基础回顾
  9. 怎样与用户有效地沟通以获取用户的真实需求?
  10. sqlite3 小记