获取客户端IP,

今天Boss说,项目中的报错邮件发回的客户端IP地址不对,居然是自己服务器端的IP地址...我那个汗了一把...百度了一堆,最会也木有找到更好的方法,希望园子里的大牛们给小弟指点指点...

下面是正在使用的获取IP地址的方法. 正如你看到的,有时候仍旧取不到真的准确的IP地址,我想要个能百分之百取得IP地址的方法,只能跪求了....

复制代码
/// <summary>
    /// 获取ip
    /// </summary>
    /// <param name="m_p">当前页</param>
    /// <returns>IP</returns>
    public static string GetUserIP()
    {
        HttpContext context = HttpContext.Current;
        string clientip = "";

        //可以透过代理服务器取得客户端真实的IP,但是并不是每个代理服务器都能用这个方法取得真实IP
        //如果客户端没有使用代理服务器,这个值就为null,所以必须判断
        if (context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
        {
            clientip = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Trim();
            if (clientip.IndexOf(",") > -1)
            {
                string[] tempIp = clientip.Split(',');
                foreach (string s in tempIp)
                {
                    //192.168.1.1属于IP地址的C类地址,属于保留IP,专门用于路由器设置.
                    if (!s.StartsWith("192.168"))
                    {
                        clientip = s.Trim();
                        break;
                    }
                }
            }
        }
        else
        {
            //取得客户端的IP地址,如果客户端使用代理服务器,那么取得的就是代理服务器的IP,而不是真实的IP地址
            clientip = context.Request.ServerVariables["REMOTE_ADDR"];
        }
        try
        {
            IPAddress.Parse(clientip);
        }
        catch
        {
            clientip = "127.127.0.1";
        }
        return clientip;
    }
复制代码

 

posted @   RY一步一个脚印  阅读(2358)  评论(11编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示