`

IP及IP段进行访问限制

 
阅读更多
IP及IP段进行访问限制
转自:http://hudeyong926.iteye.com/blog/1584554

<?php
$oblock_ip = new block_ip();
$boolean = $oblock_ip->checkip();
class block_ip {
	var $block_ip = array("192.168.1.1","210.10.2.1-20","222.34.4.*");

	function __construct(){
	}

	function __destruct(){
	}

	private function makepregip($str){
		if (strstr($str,"-")) {
			$aip = explode(".",$str);
			foreach ($aip as $k=>$v) {
				if (!strstr($v,"-")) {
					$preg_limit .= makepregip($v);
				}       else{
					$aipnum = explode("-",$v);
					for($i=$aipnum[0];$i<=$aipnum[1];$i++){
						$preg .=$preg?"|".$i:"[".$i;
					}
					$preg_limit .=strrpos($preg_limit,".",1)==(strlen($preg_limit)-1)?$preg."]":".".$preg."]";
				}
			}
		}else{
			$preg_limit .= $str.".";
		}
		return $preg_limit;
	}

	private function getallblockip(){
		if ($this->block_ip) {
			foreach ($this->block_ip as $k=>$v) {
				$ipaddres = $this->makepregip($v->start_ip);
				$ip = str_ireplace(".","\.",$ipaddres);
				$ip  = str_replace("*","[0-9]{1,3}",$ip);
				$ipaddres  = "/".$ip."/";
				$ip_list[] = $ipaddres;
			}
		}
		return $ip_list;
	}

	public function checkip() {
		$iptable = $this->getallblockip();
		$isjoined = true;
		//取得用户ip
		$ip = $this->get_client_ip();
		$ip = trim($ip);
		//剔除黑名单中的ip区段
		if ($iptable) {
			foreach($iptable as $value) {
				if (preg_match("{$value}",$ip)) {
					$isjoined = false;
					break;
				}
			}
		}
		//如果在ip黑名单中就执行如下操作
		if( !$isjoined ){
			echo "ip error";
			exit;
		}
	}

	private function get_client_ip(){
		if (getenv("http_client_ip") && strcasecmp(getenv("http_client_ip"), "unknown"))
			$ip = getenv("http_client_ip");
		else if (getenv("http_x_forwarded_for") && strcasecmp(getenv("http_x_forwarded_for"), "unknown"))
			$ip = getenv("http_x_forwarded_for");
		else if (getenv("remote_addr") && strcasecmp(getenv("remote_addr"), "unknown"))
			$ip = getenv("remote_addr");
		else if (isset($_server['remote_addr']) && $_server['remote_addr'] && strcasecmp($_server['remote_addr'], "unknown"))
			$ip = $_server['remote_addr'];
		else
			$ip = "unknown";
		return($ip);
	}

}
?>



/////////////////////////////////////////////////////////////////////////////

<?php
/*
子网掩码“长”得和 IP 地址类似,比如:255.255.255.0。可以用它来做逻辑 AND 运算判断是否要把数据
包发送到外网(区分子网) 。比如我们已知 IP 为 202.202.15.0,子网掩码为 255.255.255.0(24 个 1) ,那么
我们可以把这个网段描述为202.202.15.0:24。 现在我要判断202.212.16.238这个地址是否在202.202.15.0:24
这个网络中。可以这么做:
由于掩码为 24 位,你可以理解为只要IP 地址和网络地址的前 24 位相同,那就是同一个网络了。
先用二进制来实现。把24(即 255.255.255.0)转换成掩码,也就是 24 个 1。
11111111.11111111.11111111.00000000
然后,11111111 11111111 11111111 00000000(255.255.255.0)
AND 11001010 11001010 00010000 11101110(202.212.16.238)
=11001010 11001010 00010000 00000000(202.202.16.0)
202.202.16.0!=202.202.15.0,所以不在网络地址内。
用 PHP 代码来表示如下:

*/
function ip_in_network($ip, $net_addr, $net_mask){
	if($net_mask <= 0){ return false; }
	$ip_binary_string = sprintf("%032b",ip2long($ip));
	$net_binary_string = sprintf("%032b",ip2long($net_addr));
	return (substr_compare($ip_binary_string,$net_binary_string,0,$net_mask) === 0);
}

var_dump(ip_in_network('202.202.16.0', '202.202.16.10', 24));

?>



分享到:
评论

相关推荐

    IP地址段的过滤,限制ip,限制主机访问

    例如,限制所有属于某个公司网络(可能拥有一个共同的前缀)的IP访问。 6. **IP地址的判断与转换**:在Java中,可以使用`java.net.InetAddress`类获取和解析IP地址。`InetAddress.getByName(ip)`可将字符串形式的IP...

    Springboot过滤器禁止ip频繁访问功能实现

    Springboot过滤器禁止ip频繁访问功能实现是指在Springboot项目中,通过编写一个过滤器来限制ip频繁访问的功能实现。这项功能可以防止恶意ip的访问,保护服务器的安全。 首先,需要了解什么是过滤器。在Web开发中,...

    zookeeper限制ip版

    通过以上改造,我们成功为Zookeeper 3.4.14增加了IP访问控制功能,增强了系统安全性。然而,需要注意的是,这种改造可能会引入额外的复杂性和潜在的性能影响,因此在实际部署时,需要根据具体场景权衡利弊,确保改造...

    php IP及IP段进行访问限制的代码

    在PHP中实现基于IP地址和IP段的访问限制是一项常见需求,尤其是在需要控制网站访问权限时。根据提供的文件内容,我们可以详细讨论相关的知识点。 首先,文件中展示了一个名为`block_ip`的类,该类的目的是通过IP黑...

    php限制ip访问次数.txt

    php限制ip访问次数.txt php限制ip访问次数.txt php限制ip访问次数.txt php限制ip访问次数.txt

    java 动态换ip限制 ip频繁限制

    通常,服务器会记录每个IP地址在一定时间内的请求次数,当超过预设阈值时,就会对这个IP进行封锁或者限制其访问速度。这种机制可以有效防止DDoS攻击和非法数据抓取。 在Java中,应对IP限制的方法多种多样,以下是...

    Windows下通过ip安全策略设置只允许固定IP远程访问

    Windows 操作系统提供了 IP 安全策略功能,可以限制固定 IP 远程访问,以提高系统的安全性。下面是具体的设置步骤和知识点: 一、创建安全策略 在 Windows 中,需要创建一个新的安全策略,以限制固定 IP 远程访问...

    IP安全策略限制IP进入远程桌面设置方法

    在网络安全管理中,限制特定IP访问远程桌面是一种有效的安全措施,可以防止未经授权的用户尝试登录并控制服务器。本文将详细讲解如何通过IP安全策略来设置这一限制,以增强服务器的安全性。 首先,我们需要理解IP...

    discuz 6.1插件_版块限制访问IP

    5. **日志记录**:记录被拒绝的IP访问尝试可以帮助管理员识别潜在的攻击模式,并及时调整策略。 总之,Discuz! 6.1插件版块限制访问IP功能是一项重要的管理工具,它能帮助论坛管理员精确控制内容的访问权限,以确保...

    限制IP段访问

    可以限制某IP不能访问网站,过滤

    IP访问限制ASP程序(可加入后台) v1.0

    IP访问限制ASP程序(可加入后台) 1.0 介绍: #fceywz_ip 文件夹:数据库文件夹 里面的#fceywz_ip.asa是ACCSEE2003数据库 ip.asp 管理可访问网页的IP地址管理; ip_tj.asp 添加新的IP地址; ip_xg.asp 修改IP...

    cookie访问限制ip

    在IT行业中,尤其是在Web开发领域,Cookie访问限制IP是一个重要的安全策略,用于保护网站免受恶意用户的攻击。本文将深入探讨如何使用JavaScript(JS)来实现这一功能,并针对可能出现的兼容性问题提供解决方案。 ...

    php限制访问ip,ip段.txt

    php限制访问ip

    设置IIS限制IP访问网站

    设置 IIS 限制 IP 访问网站 设置 IIS 限制 IP 访问网站是指通过 IIS 管理器限制某些 IP 地址或域名访问特定网站目录,以提高网站的安全性。本文将详细介绍设置 IIS 限制 IP 访问网站的步骤和相关知识点。 一、为...

    远程桌面端口修改及限制IP访问

    远程桌面端口修改及限制IP访问 远程桌面端口修改及限制IP访问是指在远程桌面连接中修改默认的3389端口号,并限制访问的IP地址,以确保服务器的安全。下面是详细的知识点: 一、远程桌面端口修改: 1. 打开注册表 ...

    VB ip限制访问代码

    本篇文章将详细解析一段用VBScript编写的IP限制访问代码,并对其中涉及的关键概念和技术点进行深入解读。 #### 二、关键知识点 ##### 1. IP地址转换为数字表示 - **函数定义**:`IP2Num` 函数用于将IP地址转换为...

    限制IP段与单个IP访问某页面 PHP源代码

    限制IP段与单份个IP访问某页面 PHP源代码 注释详细

    对于一个IP段区域做限制访问

    对于一个IP段区域做限制访问,譬如,对校院站点资源限制校园以外的电脑访问.

    通过路由条目拒绝国外IP屏蔽国外IP访问服务器

    ### 通过路由条目拒绝国外IP访问服务器 #### 背景介绍 随着互联网技术的飞速发展,网络安全问题日益凸显。服务器作为互联网的核心组成部分,面临着来自全球各地的各种威胁。尤其是那些面向公众开放的服务器,更...

Global site tag (gtag.js) - Google Analytics