php中禁止单个ip与ip段访问的代码小结

1.禁止单个IP

<?php
//IP访问限制
if(getenv(‘HTTP_CLIENT_IP‘) && strcasecmp(getenv(‘HTTP_CLIENT_IP‘), ‘unknown‘)) {
$userip = getenv(‘HTTP_CLIENT_IP‘);
} elseif(getenv(‘HTTP_X_FORWARDED_FOR‘) && strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR‘), ‘unknown‘)) {
$userip = getenv(‘HTTP_X_FORWARDED_FOR‘);
} elseif(getenv(‘REMOTE_ADDR‘) && strcasecmp(getenv(‘REMOTE_ADDR‘), ‘unknown‘)) {
$userip = getenv(‘REMOTE_ADDR‘);
} elseif(isset($_SERVER[‘REMOTE_ADDR‘]) && $_SERVER[‘REMOTE_ADDR‘] && strcasecmp($_SERVER[‘REMOTE_ADDR‘], ‘unknown‘)) {
$userip = $_SERVER[‘REMOTE_ADDR‘];
}
$banned_ip = array (
"127.0.0.1",
"203.0.0.1",
"56.12.50.65",
"192.168.1.88"
);
if (in_array($userip,$banned_ip)) {
die ("Your IP is block to connect !");
}
echo "小鱼阁测试";
?> 

2.禁止IP段

<?php
//判断IP访问限制
if(getenv(‘HTTP_CLIENT_IP‘) && strcasecmp(getenv(‘HTTP_CLIENT_IP‘), ‘unknown‘)) {
$userip = getenv(‘HTTP_CLIENT_IP‘);
} elseif(getenv(‘HTTP_X_FORWARDED_FOR‘) && strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR‘), ‘unknown‘)) {
$userip = getenv(‘HTTP_X_FORWARDED_FOR‘);
} elseif(getenv(‘REMOTE_ADDR‘) && strcasecmp(getenv(‘REMOTE_ADDR‘), ‘unknown‘)) {
$userip = getenv(‘REMOTE_ADDR‘);
} elseif(isset($_SERVER[‘REMOTE_ADDR‘]) && $_SERVER[‘REMOTE_ADDR‘] && strcasecmp($_SERVER[‘REMOTE_ADDR‘], ‘unknown‘)) {
$userip = $_SERVER[‘REMOTE_ADDR‘];
}
$ban_range_low=ip2long("217.0.0.0"); //ip段首
$ban_range_up=ip2long("217.255.255.255");//ip段尾
$ip=ip2long($userip]);
if ($ip>$ban_range_low && $ip<$ban_range_up)
{
print "Banned";
exit();
}
?> 

另外请注意,PHP的ip2long有bug,请慎用

<?php
echo ip2long(‘58.99.11.1‘),"<br/>";   //输出是 979569409
echo ip2long(‘58.99.011.1‘),"<br/>";  //输出是 979568897
echo ip2long(‘058.99.11.1‘),"<br/>";  //输出是空
?> 

在PHP 4.x,PHP 5.x中,有前导零的ip转换的结果都不正确。

解决办法,使用自己的函数:

function myip2long($ip){
   $ip_arr = split(‘\.‘,$ip);
   $iplong = (16777216 * intval($ip_arr[0])) + (65536 * intval($ip_arr[1])) + (256 * intval($ip_arr[2])) + intval($ip_arr[3]);
   return $iplong;
}

完毕!

php中禁止单个ip与ip段访问的代码小结

时间: 2024-08-27 02:10:00

php中禁止单个ip与ip段访问的代码小结的相关文章

php中限制ip段访问、禁止ip提交表单的代码

在需要禁止访问或提交表单的页面添加下面的代码进行判断就可以了. 注意:下边只是一个PHP限制IP的实例代码,如果您打算应用到CMS中,请自行修改. <?php /加IP访问限制 if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $userip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR

iptables中规则的关系——以只允许某些IP段访问为例

最近遇到一个问题:服务器被全球的IP频繁试图通过ssh登录. 于是想到通过iptables防火墙限制访问,达到:仅允许指定ip段访问ssh服务(22端口). 关于iptables添加规则的文章有很多,而鲜有介绍规则之间的顺序.因此希望通过这篇文章介绍iptables多条规则之间是如何协同工作的. 注:作者并没有在此投入很多时间调研,因而以下仅仅是个人理解,有错误之处希望不吝指出. 假设希望仅仅允许 111.111.0.0/16 IP段ssh登录,而禁止其他所有ip登录. 最简单的命令是: ipt

自己写的一个校验IP、IP掩码、IP段的方法封装到了JQ中,方便了使用者的使用

使用者只需要在js中调用方法并传入一个ID即可生成验证工具      $("#IP").ipInput().Init(); <div id="IP"></div> (function() { var ipInputer = function (ele) { this.$element = ele; } ipInputer.prototype = { Init: function() { var tample = '<div class=

tftp 限制ip 限制ip段 或者多个ip段访问

1 限制单个ip访问 tftp 配置tftp信息 vi /etc/xinetd.d/tftp 在 service tftp配置信息中添加  only_form =ip 重启 service xinetd restart 则只有 单个ip 的机器能访问此ftp服务 2 限制一个ip段访问 tftp 配置tftp信息 vi /etc/xinetd.d/tftp 在 service tftp配置信息中添加  only_form = ip段(例如 100.2.29.0/24) 重启 service xi

php中获取用户登陆的IP地址以及常规处理

本文为原创,转载请注明!  在我们开发多站点业务网站中,经常需要获取客户端的ip地址来给用户推荐其所在地址的信息的业务,用php获取客户端的ip地址,我们一般用到的PHP内置方法是$_SERVER['REMOTE_ADDR']. 但是这个函数只能获取访问者本地连接中设置的IP,局域网网关出口的IP地址,如果访问者使用代理服务器,将不获取代理服务器的IP,而是获取访问者网关的真实IP.如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面. 所以我们一般为

php禁用某ip或者ip地址段访问

因为还没有深入学习Apache和nginx 所以用PHP写了一个可以禁用地址的小程序 用法 <?php include("banIP.php");?>即可 禁用单个ip: <?php //禁用ip地址 $ip=$_SERVER["REMOTE_ADDR"]; $ban=file_get_contents("ban.dat"); if(stripos($ban,$ip)) { die("Your IP Address i

【网络基础】IP数据报文段解析

IP数据报文段的结构示意图如下: (1)版本 占4位,指IP协议的版本. 通信双方使用的IP协议版本必须一致.目前广泛使用的IP协议版本号为4(即IPv4).关于IPv6,目前还处于草案阶段. (2)首部长度 占4位,可表示的最大十进制数值是15. 请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到4*15=60字节.当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充.因此数据部分永远在

VMWare中Linux虚拟机设置静态IP上网的设置方法

VMWare中Linux虚拟机设置静态IP上网的设置方法 标签: vmwareLinux虚拟机securecrt静态IP上网 2016-05-18 02:30 702人阅读 评论(0) 收藏 举报  分类: Linux 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 现在大部分人的家庭网络环境都是通过无线路由器为家里的电脑和手机提供网络. 在使用VMware安装Linux之后,默认使用的是DHCP连接网络. 但是如果使用类似 SecureCRT以SSH方式连接到虚拟机上的

如何在 Linux 终端中知道你的公有 IP

导读 在本文中我将会介绍在几种在 Linux 终端中查看你的公有 IP 地址的方法.这对普通用户来说并无意义,但 Linux 服务器(无GUI或者作为只能使用基本工具的用户登录时)会很有用.无论如何,从 Linux 终端中获取公有 IP 在各种方面都很意义,说不定某一天就能用得着. 公有地址由 InterNIC 分配并由基于类的网络 ID 或基于 CIDR 的地址块构成(被称为 CIDR 块),并保证了在全球互联网中的唯一性.当公有地址被分配时,其路由将会被记录到互联网中的路由器中,这样访问公有