首页 > 编程语言 >C#获取内外网IP地址

C#获取内外网IP地址

时间:2023-08-02 23:14:43浏览次数:31  
标签:return string C# ip Current result IP地址 HttpContext 内外

记录有效获取IP的方法

外网IP:

 public static string GetIPAddress()
        {
            string ip = "0.0.0.0";
            try
            {
                WebClient MyWebClient = new WebClient();
                MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据

                Byte[] pageData = MyWebClient.DownloadData("http://www.net.cn/static/customercare/yourip.asp"); //从指定网站下载数据

                string pageHtml = Encoding.Default.GetString(pageData);  //如果获取网站页面采用的是GB2312,则使用这句

                int i1 = pageHtml.IndexOf("<h2>"), i2 = pageHtml.IndexOf("</h2>");
                ip = pageHtml.Substring(i1 + 1, i2 - 1 - i1);
                ip = ip.Substring(3, ip.Length-3);
            }
            catch (WebException webEx)
            {
                webEx.Message.ToString();
            }
            return ip;
        }
View Code

 

  内网IP:

//内网ip
        public static string GetLocalIP()
        {
            try
            {
                string HostName = Dns.GetHostName(); //得到主机名
                IPHostEntry IpEntry = Dns.GetHostEntry(HostName);
                for (int i = 0; i < IpEntry.AddressList.Length; i++)
                {
                    //从IP地址列表中筛选出IPv4类型的IP地址
                    //AddressFamily.InterNetwork表示此IP为IPv4,
                    //AddressFamily.InterNetworkV6表示此地址为IPv6类型
                    if (IpEntry.AddressList[i].AddressFamily == AddressFamily.InterNetwork)
                    {
                        return IpEntry.AddressList[i].ToString();
                    }
                }
                return "";
            }
            catch (Exception ex)
            {
                return "";
            }
        }

        //获取ip
        public static string GetIP()
        {
            string result = String.Empty;
            if (HttpContext.Current != null && HttpContext.Current.Session != null && HttpContext.Current.Session["IP"] != null)
            {
                result = HttpContext.Current.Session["IP"].ToString();
            }
            else
            {
                result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                if (null == result || result == String.Empty)
                {
                    result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }

                if (null == result || result == String.Empty)
                {
                    result = HttpContext.Current.Request.UserHostAddress;
                }

                if (null == result || result == String.Empty || !IsIP(result))
                {
                    return "0.0.0.0";
                }
            }
            return result;
        }
View Code

 

  验证字符串是否为IP:

1  public static bool IsIP(string ip)
2         {
3             return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
4         }
IsIP

 

标签:return,string,C#,ip,Current,result,IP地址,HttpContext,内外
From: https://www.cnblogs.com/lyyd/p/11126226.html

相关文章

  • IOC认识及Autofac使用
    依赖注入学习DIP(DependencyInversion Principle)依赖倒置原则:上层模块不应该依赖于底层模块,二者应该通过抽象来依赖,依赖抽象而不是依赖细节。换言之,要针对接口编程,而不是针对实现编程。IOC(InversionofControl)控制反转:面向对象编程中的一种设计原则,可以用来减低计算机代......
  • Docker部署项目实践
    上一篇文件介绍了《Docker基础》,介绍类介绍如何使用docker发布java项目。一、项目打包首先,Docker部署项目前,先将项目打包好,比如达成jar文件,最好直接测试jar是否可运行,这里指定了端口1java-jaryour-app.jar--server.port=8081然后,将打包好的文件放到服务器指定位置 ......
  • C# 解决导出Excel长数字变成10次幂
    在做项目的时候遇到一个bug,当编号(仅针对纯数字)长度达到一定长度,比如超过11位之后,导出Excel后就转换成了10的幂次方。这是Excel特有的转换,而且当数字的位数达到15,以后的数字就会全部转化成0,造成精度的缺失。这显然是不符合要求的。 原始的赋值代码是这样的。dr["编号"]......
  • 通俗讲解Dirichlet分布和beta分布——Beta分布是二项分布的共轭先验,用大白话讲是,Beta
    二项分布:分布参数p,表示转化率的可能性。传统的频率学派会把实验总数中所有转化率的总数除以实验总数,得到这个p。以这个p为峰值获得一个类似高斯分布,大概像这样:然而,贝叶斯学派不会假设p是固定不变的,他们会引入一个Beta分布作为二项分布的共轭先验,通过调整Beta分布参数,动态调整p的值.......
  • Typescript使用基础篇
    前言对于typescript而言如果想要能在项目中熟练的应用,个人认为需要详细去了解以下几点内容:类型(基本类型,联合类型,类型断言,泛型),模块和命名空间,接口和类基础篇开发环境编译包全局安装npminstall-gtypescript编译ts文件命令tsc+ts文件监听文件变化并编译tsc-w+ts文件基础类型ty......
  • leetcode练习过的题目总结
    1.leetcode主要选项是:栈+双指针题号难度:简单链接20有效的括号26删除排序数组中的重复项27移除元素28实现strStr()88合并两个有序数组125.验证回文串141环形链表167两数之和II-输入有序数组225用队列实现栈232用栈实现队列234回文链表283移动零344反转字符串345反转字符串中的元......
  • 使用快捷键在Unity中快速锁定和解锁Inspector右上角的锁功能
    使用快捷键在Unity中快速锁定和解锁Inspector右上角的锁功能在Unity中,Inspector窗口是一个非常重要的工具,它允许我们查看和编辑选定对象的属性。有时候,我们可能希望锁定Inspector窗口,以防止意外更改对象的属性。幸运的是,Unity提供了一种快捷键的方式来快速锁定和解锁Inspector窗口......
  • C和C++进阶的学习笔记总结目录
    C语言–C语言基础知识积累记录学习教程:参考C++教程网之跟我一起学Cdo{…}while(0)的用途汇总(欢迎补充)在一些Linux内核和其它的开源代码中可见到【C语言】《带你学C带你飞》,笔记:链接––C++–一张图总结GoogleC++编程规范(GoogleC++StyleGuide)C++基础学习目录总结参考:链......
  • JavaScript中的 "return await promise" 与 "return promise"
    原文地址:'returnawaitpromise'vs'returnpromise'inJavaScript原文作者:DmitriPavlutin译文出自:翻译计划当从异步功能中返回时,您可以等待该承诺得到解决,或者您可以直接返回它:returnawaitpromisereturnpromise:jsasyncfunctionfunc1(){constpromise=asyncOperat......
  • apiDoc 文档使用指南
    安装安装node.js安装apiDoc,项目根目录下npminstallapidoc-g配置在你的项目根目录下新建apidoc.json文件,该文件描述了项目对外提供接口的概要信息如名称、版本、描述、文档打开时浏览器显示标题和接口缺省访问地址。apidoc.json{"name":"ServiceEbikeAPIs","version":"......