php中如何实现IP地址的限制访问问题 先将你的允许访问ip范围写出来。如果不知道,就要到网上找一个ip表看看 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 单个 IP:if ( $REMOTE_ADDR == '12.34.56.78' ){//允许访问}如果是一组 IP,就要看这些 IP 的范围及是否连续了连续的 IP 好办一些,不连续的 IP 就得挨个比较,影响速度 SSH(Secure Shell)安装SSH的站点可以用tcp_wrappers来限制哪些IP地址可以通过ssh来访问自己。比如,在/etc/hosts.allow中加入sshd,sshd2: 211.86.48.3那么只有211.8.48.3可以通过ssh来访问该主机。 有一个笨办法:先把允许的ip地址放到一个文件里,再用alexxing(赤铸)的方法认证一下就可以了 可以用截取函数截取一段有效ip(即允许访问的ip) blackspider和_Shakespeare(网络骑士) 都是一种方法,不过IIS好像可以添加想屏蔽掉的IP呀 对,Win2000Server的IIS就有IP地址及域名过滤功能! 呵呵,如果用iis还不如不限制ip好呢,大家觉得呢? 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地址用一个记事本文件存下来,这种限制语句怎么写呢? 看看我的一段源程序:<% 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地址'; lisuosa(李点) 的方法好像不行吧.应该截成一段一段的来比较才算比较准确吧.呵. <?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")把禁止列表读到内存中然后一个个比较…… 想搭建个类似linux源码下载那样的服务器,只提供下载,只有目录,不要漂亮的页面 PHP header 问题 读取数据 相似度问题 css显示图片的问题,请帮忙呀 大侠们,问个问题,急! 求该结果的preg_replace的替换写法 如何用php 获得访问者使用的浏览器的具体尺寸? 如何屏幕文本框输入的历史记录??? 谁那里有站内搜索的码啊?急~~~~~~~~~~~~进来给个建议 我超连接一个图片文件,点击的时候是打开那个图片,有什么办法可以点击时就下载那个图片文件呢? mysql和sqlserver到底谁的速度快? 关于点击出现的问题?
{
//允许访问
}如果是一组 IP,就要看这些 IP 的范围及是否连续了
连续的 IP 好办一些,不连续的 IP 就得挨个比较,影响速度
安装SSH的站点可以用tcp_wrappers来限制哪些IP地址可以通过ssh来访问自己。比如,在/etc/hosts.allow中加入
sshd,sshd2: 211.86.48.3
那么只有211.8.48.3可以通过ssh来访问该主机。
先把允许的ip地址放到一个文件里,再用alexxing(赤铸)的方法认证一下就可以了
if ( $REMOTE_ADDR >= '202.112.95.1' && $REMOTE_ADDR <= '202.112.96.254')
{
//允许访问
}这样可以实现吗?
还有,如果我限制的ip地址不是这样连续的,而是把这些离散的ip地址用一个记事本文件存下来,这种限制语句怎么写呢?
<%
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地址';
的方法好像不行吧.应该截成一段一段的来比较才算比较准确吧.呵.
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")
把禁止列表读到内存中然后一个个比较……