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 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名