基于我們有些運(yùn)維需求,需要屏蔽指定國(guó)家和地區(qū)的用戶IP訪問。這里,我們可以用特定的PHP腳本撰寫檢測(cè)指定IP的地區(qū)IP,然后通過引用到WordPress嵌入到頁面中。這里,麥子整理幾個(gè)網(wǎng)上采用的方法。后續(xù)如果有需要的時(shí)候可以一并參考選擇用到我們網(wǎng)站中。
1、屏蔽指定國(guó)家
<?php /** * * test.php(屏蔽國(guó)家IP) * */ $verification = '美國(guó)';//需要屏蔽國(guó)家的IP function get_client_ip() { $ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } 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']; } return $ip; } $ip = get_client_ip();//獲取訪客IP $antecedents = $_SERVER['HTTP_REFERER'];//訪客來路地址 $result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);//IP數(shù)據(jù)庫(kù)來自淘寶。 $address = json_decode($result,true); //判斷訪客是否屬于美國(guó),是否來自百度,是否來自谷歌 if($address['data']['country'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){ sleep(10);//設(shè)置一個(gè)10秒等待。 header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); header('Retry-After: 3600000'); exit; } ?>
這里,我們將代碼丟到test.php頁面中然后引用到index.php或者是header.php中。
2、屏蔽指定省份
<?php /** * * test.php(屏蔽地方IP) * */ $verification = '江西省';//需要屏蔽省份的IP function get_client_ip() { $ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } 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']; } return $ip; } $ip = get_client_ip();//獲取訪客IP $antecedents = $_SERVER['HTTP_REFERER'];//訪客來路地址 $result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);//IP數(shù)據(jù)庫(kù)來自淘寶。 $address = json_decode($result,true); //判斷訪客是否屬于江西省,是否來自百度,是否來自谷歌 if($address['data']['region'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){ sleep(99999999);//設(shè)置一個(gè)999999秒的等待。 Header("HTTP/1.1 204 No Content"); exit; } ?>
3、屏蔽指定訪客不跳過搜索引擎蜘蛛
<?php 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); } header("Content-type: text/html; charset=utf-8"); $verification = '山東省';//修改省份 $ip = get_client_ip(); //獲取當(dāng)前用戶的ip $antecedents = $_SERVER['HTTP_REFERER'];//訪客來路地址 $result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);//IP數(shù)據(jù)庫(kù)來自淘寶。 $address = json_decode($result,true); if($address['data']['region'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){ sleep(9999999999999999); ob_start(); header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); header('Retry-After: 3600'); echo '網(wǎng)站備案中....'; exit; } ?>
根據(jù)需要修改對(duì)應(yīng)省份。這個(gè)是可以屏蔽對(duì)應(yīng)指定訪客地區(qū)的,但是不屏蔽蜘蛛。
參考文章:
1、https://www.cnblogs.com/igood/p/4802114.html
2、https://wzfou.com/ip-ku/
評(píng)論