ip- 这段正则表达式的含义?

问题描述

这段正则表达式的含义?

整个函数是获取真实IP的,

 function real_ip()
{
    static $realip = NULL;

    if ($realip !== NULL)
    {
        return $realip;
    }

    if (isset($_SERVER))
    {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);

            /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
            foreach ($arr AS $ip)
            {
                $ip = trim($ip);

                if ($ip != 'unknown')
                {
                    $realip = $ip;

                    break;
                }
            }
        }
        elseif (isset($_SERVER['HTTP_CLIENT_IP']))
        {
            $realip = $_SERVER['HTTP_CLIENT_IP'];
        }
        else
        {
            if (isset($_SERVER['REMOTE_ADDR']))
            {
                $realip = $_SERVER['REMOTE_ADDR'];
            }
            else
            {
                $realip = '0.0.0.0';
            }
        }
    }
    else
    {
        if (getenv('HTTP_X_FORWARDED_FOR'))
        {
            $realip = getenv('HTTP_X_FORWARDED_FOR');
        }
        elseif (getenv('HTTP_CLIENT_IP'))
        {
            $realip = getenv('HTTP_CLIENT_IP');
        }
        else
        {
            $realip = getenv('REMOTE_ADDR');
        }
    }

    preg_match("/[d.]{7,15}/", $realip, $onlineip);
    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';

    return $realip;
}

preg_match("/[d.]{7,15}/", $realip, $onlineip); 这里的正则表达式有点不明白,
为什么数字或点要重复七到十五次?

解决方案

这个是用来匹配ipv6的。

解决方案二:

preg_match("/[d.]{7,15}/", $realip, $onlineip);

单纯从代码上来解释这个正则,就是指:

匹配 数字或点 7-15次

从逻辑上不是很理解为什么要这么判断

http://www.baike.com/wiki/TCP%2FIP&prd=button_citiao2_search

解决方案三:

preg_match("/[d.]{7,15}/", $realip, $onlineip);

我仔细想了一下,一个正常的IP可能是这样:

1.1.1.1 (数字+点正好是7位) 192.168.100.101 (数字+点正好是15位)

所以此代码的判断有些可笑,我想他的本意是: 数字加点的长度要在 7-15位之间

但是他没有想到这样的情况也是可以的: 1....1...1.....1 192116821003101

时间: 2024-10-03 08:39:28

ip- 这段正则表达式的含义?的相关文章

new-link这段代码的含义是什么?看不懂

问题描述 link这段代码的含义是什么?看不懂 var query = data.Select((x, r) =>x.Select((v, c) => new { r, c, v })); var result = query.GroupBy(x => x.c).Select(x => x.Select(y => y.v).OrderBy(x => x.r).ToArray()).ToArray(); 解决方案 我的代码? var query = data.Select

轻松获得网通、电信、铁通IP地址分配段

有时搞一些跨网段的工程和应用,需要尽量准确的知道电信.网通.铁通等电信运营商的IP地址段分配情况,可网上的资料不但很少,而且经常都是N个月前的过期资料-- APNIC是管理亚太地区IP地址分配的机构,它有着丰富准确的IP地址分配库,同时这些信息也是对外公开的!下面就让我们看看如何在Linux下获得一些电信运营商的IP地址分配情况: shell> wget http://ftp.apnic.net/apnic/dbase/tools/ripe-dbase-client-v3.tar.gz shel

php禁止某ip或ip地址段访问的方法

 这篇文章主要介绍了php禁止某ip或ip地址段访问的方法,涉及服务器变量$_SERVER.文件及字符串的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php禁止某ip或ip地址段访问的方法,分享给大家供大家参考.具体分析如下: 因为还没有深入学习Apache和nginx 所以用PHP写了一个可以禁用地址的小程序 使用时只需: ? 1 <?php include("banIP.php");?> 即可 禁用单个ip如下: ? 1 2 3 4 5

c++-如何用java或者C++编写一个可以验证网络IP接入段合法性并且控制其流量的简易服务器呢?

问题描述 如何用java或者C++编写一个可以验证网络IP接入段合法性并且控制其流量的简易服务器呢? 本人不是学编程,但是毕业设计里面需要做这个 ,希望各路大神不吝赐教 解决方案 http://wenku.baidu.com/link?url=j_QVex7Ffpzw6nOsgiUK3NIdDmNy0sSKt1WuWluBvu6Y9b1Xd41XMPXeDLa5W9zdVErzoScQCyjj_1T1EygG8cX3GaJsr3zxrtOtWI8ZIvO 解决方案二: 计算单位时间write的数

谁能帮我解释下这段javascript的含义和作用,谢谢!

问题描述 谁能帮我解释下这段javascript的含义和作用,谢谢! var Remember = new Object(); Remember = function(){}; Remember.prototype = { initialize: function(el, options){ this.el = $(el); this.days = 365; this.options = options; this.effect(); var cookie = this.readCookie()

求一段代码的含义,是C#+sql Serve的

问题描述 求一段代码的含义,是C#+sql Serve的 protected void Button1_Click(object sender EventArgs e) { SqlConnection con = dataconn.getcon(); con.Open(); //string Querystr = ""select * from examstu_info where stu_id="" + ""'"" + Te

aspx-c # asp.net有没有一段正则表达式 可以过滤那些危险字符的

问题描述 c # asp.net有没有一段正则表达式 可以过滤那些危险字符的 c # asp.net有没有一段正则表达式 可以过滤那些危险字符的 比如我在文本框输入<br>alert("测试") 或者 update delete insert 这样的字符就提示是危险字符串.. 有上面好的思路 或者相关的文章 解决方案 cmd.Parameters.AddWithValue(""@参数名""参数值);假定这里cmd是SqlCommand

能解释下下面这段代码的含义,以及为什么会这样输出吗?(没有金币了,拜托了)

问题描述 能解释下下面这段代码的含义,以及为什么会这样输出吗?(没有金币了,拜托了) package com.think_in_java_Chapter12; import java.io.*; import java.util.logging.Logger; class LoggingException extends Exception{ private static Logger logger = Logger.getLogger("LoggingException"); pub

c-麻烦看一下这一段正则表达式,有一点问题

问题描述 麻烦看一下这一段正则表达式,有一点问题 (?:(?:https?|ftp)://|www.)[-a-z0-9+&@#/%?=~_|!:.;]*[-a-z0-9+&@#/%=~_|]/i这段正则的功能是匹配URL这里的是为了什么-a a前面的- 是什么-a-z0-9+ 后面的一堆&@#/%?=~_|!:.; 这些是什么啊....如果是符号匹配的话,不需要加吗?* 后的[ ] 又是为了什么,不是已经有*了吗? 最后的 [ ] 后面的 /i 又是什么? 解决方案 :匹配单词边界