Wei_Guanghui 2014-12-12 04:48 采纳率: 0%
浏览 1626

这段代码怎么解释。。

public static string GetIP()
{
string result = String.Empty;

        result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
        if (string.IsNullOrEmpty(result))
        {
            result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
        }

        if (string.IsNullOrEmpty(result))
        {
            result = HttpContext.Current.Request.UserHostAddress;
        }

        if (string.IsNullOrEmpty(result) || !Regex.IsMatch(result, 
        @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"))
        {
            return "127.0.0.1";
        }

        return result;
    }
  • 写回答

3条回答 默认 最新

  • threenewbee 2014-12-12 04:53
    关注

    public static string GetIP()
    {
    string result = String.Empty;
    result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 如果有代理,返回代理服务器报告的原始ip(而不是代理主机的ip)
    if (string.IsNullOrEmpty(result))
    {
    result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 返回主机ip
    }

        if (string.IsNullOrEmpty(result))
        {
            result = HttpContext.Current.Request.UserHostAddress; 这一步实际上多余,UserHostAddress就是remote_addr
        }
    
        if (string.IsNullOrEmpty(result) || !Regex.IsMatch(result,  
        @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$")) 如果没有ip,比如说内网回环,那么返回127.0.0.1是对的,但是如果是ipv6 ip,这么返回是不对的。总之,这样写简单粗暴且欠考虑。
        {
            return "127.0.0.1";
        }
    
        return result;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看