先将你的允许访问ip范围写出来。如果不知道,就要到网上找一个ip表看看

解决方案 »

  1.   

    单个 IP:if ( $REMOTE_ADDR == '12.34.56.78' )
    {
    //允许访问
    }如果是一组 IP,就要看这些 IP 的范围及是否连续了
    连续的 IP 好办一些,不连续的 IP 就得挨个比较,影响速度
      

  2.   

    SSH(Secure Shell)
    安装SSH的站点可以用tcp_wrappers来限制哪些IP地址可以通过ssh来访问自己。比如,在/etc/hosts.allow中加入
    sshd,sshd2: 211.86.48.3
    那么只有211.8.48.3可以通过ssh来访问该主机。
      

  3.   

    有一个笨办法:
    先把允许的ip地址放到一个文件里,再用alexxing(赤铸)的方法认证一下就可以了
      

  4.   

    可以用截取函数截取一段有效ip(即允许访问的ip)
      

  5.   

    blackspider和_Shakespeare(网络骑士) 都是一种方法,不过IIS好像可以添加想屏蔽掉的IP呀
      

  6.   

    对,Win2000Server的IIS就有IP地址及域名过滤功能!
      

  7.   

    呵呵,如果用iis还不如不限制ip好呢,大家觉得呢?
      

  8.   

    alexxing(赤铸)的方法用来比较连续的ip地址,可以这样用吗:假设我只允许ip地址在202.112.95.1到202.112.96.254之间的机子访问我的网站,语句:
    if ( $REMOTE_ADDR >= '202.112.95.1' && $REMOTE_ADDR <= '202.112.96.254')
    {
    //允许访问
    }这样可以实现吗?
    还有,如果我限制的ip地址不是这样连续的,而是把这些离散的ip地址用一个记事本文件存下来,这种限制语句怎么写呢?
      

  9.   

    看看我的一段源程序:
    <%  
      if($GLOBALS["CanMaskIp"]==1)                                  //封杀IP地址
      {
        $strSQL="SELECT count(*) FROM MaskIp WHERE '".$GLOBALS["strVisitedIp"]."' BETWEEN SrcIpAddr AND DesIpAddr";
        $tmpMaskIp=mysql_fetch_row(mysql_query($strSQL,$GLOBALS["hDatabase"]));
        if($tmpMaskIp[0]>0)
        {
          echo "<html>\n";
          echo "<head>\n";
          echo "<title>".$GLOBALS["WindowTitle"]."</title>\n";
          echo "</head>\n";
          echo "<body>\n";
          echo "<p>  </p>\n";
          echo "<p>  </p>\n";
          echo "<p>  </p>\n";
          echo "<p>  </p>\n";
          echo "<p><center><font color=#FF00FF size=5>嘿嘿,你的IP地址被管理员禁止了哦!!<br>\n";
          echo "<hr width=80% color=#CC00CC>\n";
          echo "想想你自已是不是干了什么哈?!\n";
          echo "</font></center></p>\n";
          echo "</body>\n";
          echo "</html>";
          mysql_close($GLOBALS["hDatabase"]);
          exit();
        }
        unset($tmpMaskIp);
      }
    %>
    要求建立如下表:
    CREATE TABLE MaskIp (
      SrcIpAddr varchar(16) NOT NULL default '',
      DesIpAddr varchar(16) NOT NULL default '',
      PRIMARY KEY  (SrcIpAddr)
    ) TYPE=MyISAM COMMENT='记录封杀IP地址';
      

  10.   

    lisuosa(李点) 
    的方法好像不行吧.应该截成一段一段的来比较才算比较准确吧.呵.
      

  11.   

    <?
    function chkip($client_ip,$network_number,$ip_mask)
    {
    preg_match("/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/",$client_ip,$ipsplit);
    preg_match("/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/",$ip_mask,$ipsplit1);
    preg_match("/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/",$network_number,$ipsplit2);
    if (((integer)$ipsplit[1]&$ipsplit1[1])==$ipsplit2[1])
    if (((integer)$ipsplit[2]&$ipsplit1[2])==$ipsplit2[2])
    if (((integer)$ipsplit[3]&$ipsplit1[3])==$ipsplit2[3])
    if (((integer)$ipsplit[4]&$ipsplit1[4])==$ipsplit2[4])
    return true;
    return false;
    }
    ?>
    函数参数一个是客户端ip,后面是使用网段比较的方式,
    将ip地址与掩码做与运算,结果与网段值相同,则在该网段内,返回true。
    对于楼主使用的例子,其调用如下
    chkip($REMOTE_ADDR,"202.112.96.0","255.255.255.0")
    把禁止列表读到内存中然后一个个比较……