PHP判断是否国内IP/代理IP

上次偶然发现,应该是有人利用软件恶意对一代刷网撸赞,看了IP,基本都是国外的。

当时撸的不多,也没太注意,结果后来越发猖狂。

没办法,只有对访问IP进行限制了。


利用了淘宝的IP地址库,淘宝做的这么大,相信这个数据库应该比较给力。

接口地址:http://ip.aliyun.com/service/getIpInfo.php?ip=

返回的是json格式,PHP格式化一下就行。

判断是不是代理IP,主要是对$_SERVER['HTTP_VIA']返回值判断,如果为空或者无数值,一般非代理IP。(这段是网上查资料找来的)


利用这个两个东西,相信就可以屏蔽大部分恶意访问请求了。

自己感觉效果还行吧。  


代码演示:

	<?php
	$url = 'http://ip.aliyun.com/service/getIpInfo.php?ip=' . real_ip ();
	$res = file_get_contents ( $url );
	$res = (json_decode ( $res, true ));
	if ($res ['data'] ['country'] == '中国' && empty ( $_SERVER ['HTTP_VIA'] ))
		echo '允许访问';
	else
		echo '拒绝请求';
	function real_ip() {
		$ip = $_SERVER ['REMOTE_ADDR'];
		if (isset ( $_SERVER ['HTTP_X_FORWARDED_FOR'] ) && preg_match_all ( '#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER ['HTTP_X_FORWARDED_FOR'], $matches )) {
			foreach ( $matches [0] as $xip ) {
				if (! preg_match ( '#^(10|172\.16|192\.168)\.#', $xip )) {
					$ip = $xip;
					break;
				}
			}
		} elseif (isset ( $_SERVER ['HTTP_CLIENT_IP'] ) && preg_match ( '/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER ['HTTP_CLIENT_IP'] )) {
			$ip = $_SERVER ['HTTP_CLIENT_IP'];
		} elseif (isset ( $_SERVER ['HTTP_CF_CONNECTING_IP'] ) && preg_match ( '/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER ['HTTP_CF_CONNECTING_IP'] )) {
			$ip = $_SERVER ['HTTP_CF_CONNECTING_IP'];
		} elseif (isset ( $_SERVER ['HTTP_X_REAL_IP'] ) && preg_match ( '/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER ['HTTP_X_REAL_IP'] )) {
			$ip = $_SERVER ['HTTP_X_REAL_IP'];
		}
		return $ip;
	}
	
	?>


本博客所有文章如无特别注明均为原创。作者:小珏复制或转载请以超链接形式注明转自 小珏博客
原文地址《PHP判断是否国内IP/代理IP
分享到:更多

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(1)

direct lender installment loans <a href="http://installmentloans.bid">installment loans online</a> payday loans florida <a href=http://installmentloans.bid>direct lending</a>
Loans 3个月前 (2018-03-11) 回复