c#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析

  

本文实例讲述了c#实现获取本地内网(局域网)和外网(公网)IP地址的方法。分享给大家供大家参考,具体如下:

  

1,获取本机的IP地址集合:

     ///& lt; summary>///获取本机所有ip地址///& lt;/summary>///& lt;参数name=皀etType”在“互联网络”:ipv4地址,“InterNetworkV6”: ipv6地址& lt;/param>///& lt; returns> ip地址集合& lt;/returns>   公共静态ListnetType GetLocalIpAddress(字符串)   {   字符串主机名=Dns.GetHostName ();//获取主机名称   IPAddress[]地址=Dns.GetHostAddresses(主机名);//解析主机IP地址      ListIPList=new List ();   如果(netType==string.Empty)   {   for (int i=0;我& lt;addresses.Length;我+ +)   {   [我].ToString IPList.Add(地址());   }   }   其他的   {//AddressFamily.InterNetwork表示此IP为IPv4,//AddressFamily.InterNetworkV6表示此地址为IPv6类型   for (int i=0;我& lt;addresses.Length;我+ +)   {   如果地址[我].AddressFamily.ToString ()==netType)   {   [我].ToString IPList.Add(地址());   }   }   }   返回IPList;   }      Listips=GetLocalIpAddress(" ");//获取本地所有ip   Listipv4_ips=GetLocalIpAddress(“目的”);//获取ipv4类型的ip   Listipv6_ips=GetLocalIpAddress (InterNetworkV6 ");//获取ipv6类型的ip      之前      

2,获取本机局域网内IP地址:

  

如果本机在局域网内,直接调用上面的方法即可,以ipv4为例:

        Listipv4_ips=GetLocalIpAddress(“目的”);      之前      

如果本机只有一个网卡,且没有安装虚拟网卡,那么ipv4_ips里应该只有一条数据,即局域网内地址;

  

3,获取本机的公网IP地址:

  

1),如果本机是拨号上网的或具有独立公网IP的情况下,使用上面的方法即可,以ipv4为例:

        Listipv4_ips=GetLocalIpAddress(“目的”);      之前      

如果本机只有一个网卡,且没有安装虚拟网卡,那么ipv4_ips里应该只有一条数据,即公网IP地址;

  

2),如果是路由上网的,想获取网关的外网IP,只能通过访问一些公网的地址来获取外网IP了;

  

步骤:先获取到含有本机外网ip的页面信息,再通过正则获取到ip信息;

     ///& lt; summary>///获取页面html///& lt;/summary>///& lt;参数name=" url "祝辞请求的地址& lt;/param>///& lt;参数name=氨嗦搿弊4潜嗦敕绞? lt;/param>///& lt; returns> & lt;/returns>   HttpGetPageHtml公共静态字符串(字符串url字符串编码)   {   字符串pageHtml=string.Empty;   试一试   {   使用(WebClient MyWebClient=new WebClient ())   {   编码编码=Encoding.GetEncoding(编码);   MyWebClient.Headers。Add(“用户代理”、“Mozilla/5.0 (Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎)Chrome/68.0.3440.84 Safari 537.36”);   MyWebClient。凭证=CredentialCache.DefaultCredentials;//获取或设置用于向互联网资源的请求进行身份验证的网络凭据   Byte [] pageData=https://www.yisu.com/zixun/MyWebClient.DownloadData (url);//从指定网站下载数据   pageHtml=encode.GetString (pageData);   }   }   捕获(异常e)   {      }   返回pageHtml;   }>///<总结///从html中通过正则找到ip信息(只支持ipv4地址)>//////& lt; returns> & lt;/returns>   pageHtml GetIPFromHtml公共静态字符串(字符串)   {//验证ipv4地址   字符串reg=@”(& # 63;:(& # 63;:((0 - 5) 25日)| (2 (0 - 4)\ d) | (1 (\ d {2}) | ((1 - 9) & # 63; \ d))) \){3}(& # 63;:((0 - 5) 25日)| (2 (0 - 4)\ d) | (1 (\ d {2}) | ((1 - 9) & # 63; \ d)))”;   字符串ip=" ";   m=正则表达式相匹配。匹配(pageHtml reg);   如果(m.Success)   {   ip=m.Value;   }   返回的ip;   }      之前      

测试(测试时间:2019年6月18日17:37:46):

        var t0_html=HttpGetPageHtml (“https://www.ip.cn”、“utf - 8”);   var t1_html=HttpGetPageHtml (“http://www.ip138.com/ips138.asp”、“gbk”);   var t2_html=HttpGetPageHtml (“http://www.net.cn/static/customercare/yourip.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      之前      

 C #实现获取本地内网(局域网)和外网(公网)IP地址的方法分析“> <h2 class=c#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析