本站「恢复」域名解析
作者:matrix 发布时间:2013-09-19 分类:兼容并蓄 零零星星
自从本站准备暂时停止域名解析 的2013年08月13日开始到昨天9-18 10:38. 😀 被安通过了。工信部短信通知的,后来也有email。 哈哈
硬是感谢各位相关人员~
这一个月的时间真恼火。期间找了俩关于不关站的办法:
1.靠谱的就是使用DNSPOD的功能:修改线路类型
到域名列表里找到线路类型选择“搜索引擎”,这样蜘蛛照样可以正常访问,比起停止域名解析来好得多。
本站收录本来就那一点点,感觉影响不大。
2.不靠谱的就是识别来访者ip地址实现自动屏蔽省级IP段。
这样的话还是有些作用,但不能保证人家看不到你的网站。
so, 不咋靠谱。
在index.php中适当位置添加相关代码:
<?
function convertip($ip)
{
//IP数据文件路径
$dat_path = 'QQWry.dat';
//检查IP地址
if (!ereg("^([0-9]{1,3}.){3}[0-9]{1,3}$", $ip)) {
return 'IP Address Error';
}
//打开IP数据文件
if (!$fd = @fopen($dat_path, 'rb')) {
return 'IP date file not exists or access denied';
}
//分解IP进行运算,得出整形数
$ip = explode('.', $ip);
$ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];
//获取IP数据索引开始和结束位置
$DataBegin = fread($fd, 4);
$DataEnd = fread($fd, 4);
$ipbegin = implode('', unpack('L', $DataBegin));
if ($ipbegin < 0) $ipbegin += pow(2, 32);
$ipend = implode('', unpack('L', $DataEnd));
if ($ipend < 0) $ipend += pow(2, 32);
$ipAllNum = ($ipend - $ipbegin) / 7 + 1;
$BeginNum = 0;
$EndNum = $ipAllNum;
//使用二分查找法从索引记录中搜索匹配的IP记录
while ($ip1num > $ipNum || $ip2num < $ipNum) {
$Middle = intval(($EndNum + $BeginNum) / 2);
//偏移指针到索引位置读取4个字节
fseek($fd, $ipbegin + 7 * $Middle);
$ipData1 = fread($fd, 4);
if (strlen($ipData1) < 4) {
fclose($fd);
return 'System Error';
}
//提取出来的数据转换成长整形,如果数据是负数则加上2的32次幂
$ip1num = implode('', unpack('L', $ipData1));
if ($ip1num < 0) $ip1num += pow(2, 32);
//提取的长整型数大于我们IP地址则修改结束位置进行下一次循环
if ($ip1num > $ipNum) {
$EndNum = $Middle;
continue;
}
//取完上一个索引后取下一个索引
$DataSeek = fread($fd, 3);
if (strlen($DataSeek) < 3) {
fclose($fd);
return 'System Error';
}
$DataSeek = implode('', unpack('L', $DataSeek . chr(0)));
fseek($fd, $DataSeek);
$ipData2 = fread($fd, 4);
if (strlen($ipData2) < 4) {
fclose($fd);
return 'System Error';
}
$ip2num = implode('', unpack('L', $ipData2));
if ($ip2num < 0) $ip2num += pow(2, 32);
//没找到提示未知
if ($ip2num < $ipNum) {
if ($Middle == $BeginNum) {
fclose($fd);
return 'Unknown';
}
$BeginNum = $Middle;
}
}
//下面的代码读晕了,没读明白,有兴趣的慢慢读
$ipFlag = fread($fd, 1);
if ($ipFlag == chr(1)) {
$ipSeek = fread($fd, 3);
if (strlen($ipSeek) < 3) {
fclose($fd);
return 'System Error';
}
$ipSeek = implode('', unpack('L', $ipSeek . chr(0)));
fseek($fd, $ipSeek);
$ipFlag = fread($fd, 1);
}
if ($ipFlag == chr(2)) {
$AddrSeek = fread($fd, 3);
if (strlen($AddrSeek) < 3) {
fclose($fd);
return 'System Error';
}
$ipFlag = fread($fd, 1);
if ($ipFlag == chr(2)) {
$AddrSeek2 = fread($fd, 3);
if (strlen($AddrSeek2) < 3) {
fclose($fd);
return 'System Error';
}
$AddrSeek2 = implode('', unpack('L', $AddrSeek2 . chr(0)));
fseek($fd, $AddrSeek2);
} else {
fseek($fd, -1, SEEK_CUR);
}
while (($char = fread($fd, 1)) != chr(0))
$ipAddr2 .= $char;
$AddrSeek = implode('', unpack('L', $AddrSeek . chr(0)));
fseek($fd, $AddrSeek);
while (($char = fread($fd, 1)) != chr(0))
$ipAddr1 .= $char;
} else {
fseek($fd, -1, SEEK_CUR);
while (($char = fread($fd, 1)) != chr(0))
$ipAddr1 .= $char;
$ipFlag = fread($fd, 1);
if ($ipFlag == chr(2)) {
$AddrSeek2 = fread($fd, 3);
if (strlen($AddrSeek2) < 3) {
fclose($fd);
return 'System Error';
}
$AddrSeek2 = implode('', unpack('L', $AddrSeek2 . chr(0)));
fseek($fd, $AddrSeek2);
} else {
fseek($fd, -1, SEEK_CUR);
}
while (($char = fread($fd, 1)) != chr(0)) {
$ipAddr2 .= $char;
}
}
fclose($fd);
//最后做相应的替换操作后返回结果
if (preg_match('/http/i', $ipAddr2)) {
$ipAddr2 = '';
}
$ipaddr = "$ipAddr1 $ipAddr2";
$ipaddr = preg_replace('/CZ88.Net/is', '', $ipaddr);
$ipaddr = preg_replace('/^s*/is', '', $ipaddr);
$ipaddr = preg_replace('/s*$/is', '', $ipaddr);
if (preg_match('/http/i', $ipaddr) || $ipaddr == '') {
$ipaddr = 'Unknown';
}
return $ipaddr;
}
function findstr($str, $substr)
{
$m = strlen($str);
$n = strlen($substr);
if ($m < $n) return false;
for ($i = 0; $i <= ($m - $n + 1); $i++) {
$sub = substr($str, $i, $n);
if (strcmp($sub, $substr) == 0) return true;
}
return false;
}
?>
<?
$user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
$user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];
$ClientCity = convertip($user_IP); //获得所在城市字符串
$ClientCity = iconv("gb2312", "utf-8", $ClientCity);
$flag = false;
$tmp = $_SERVER['HTTP_USER_AGENT'];
if (strpos($tmp, 'Googlebot') !== false) {
$flag = true;
} else if (strpos($tmp, 'Baiduspider') > 0) {
$flag = true;
} else if (strpos($tmp, 'Yahoo! Slurp') !== false) {
$flag = true;
} else if (strpos($tmp, 'msnbot') !== false) {
$flag = true;
} else if (strpos($tmp, 'Sosospider') !== false) {
$flag = true;
} else if (strpos($tmp, 'YodaoBot') !== false || strpos($tmp, 'OutfoxBot') !== false) {
$flag = true;
} else if (strpos($tmp, 'Sogou web spider') !== false || strpos($tmp, 'Sogou Orion spider') !== false) {
$flag = true;
} else if (strpos($tmp, 'fast-webcrawler') !== false) {
$flag = true;
} else if (strpos($tmp, 'Gaisbot') !== false) {
$flag = true;
} else if (strpos($tmp, 'ia_archiver') !== false) {
$flag = true;
} else if (strpos($tmp, 'altavista') !== false) {
$flag = true;
} else if (strpos($tmp, 'lycos_spider') !== false) {
$flag = true;
} else if (strpos($tmp, 'Inktomi slurp') !== false) {
$flag = true;
}
//echo $ClientCity;
$b = '安庆'; //这里填写要屏蔽的地区
if (findstr($ClientCity, $b)) {
if ($flag) { //这里是让蜘蛛过去
echo "<script>location.href='http://www.tlrc.com/';</script>";
} else {
echo "<script>location.href='http://www.tongling.cn/';</script>";
}
} else {
//正常需要访问的代码,也可以再增加屏蔽的城市
}
?>
参考:http://www.discuz.net/forum.php?mod=viewthread&tid=2712504
3.来自某Q群的代码。亲测成功!最简洁,也就几行js代码就可实现。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"></script>
<script type="text/javascript">
var t = remote_ip_info;
if( t.city == '成都' ){
window.location.href='https://www.hhtjim.com';
}
</script>
说明:
第5行填写需要屏蔽的城市
弊端就是只能屏蔽城市的IP段,屏蔽省份的话需要相应修改。
屏蔽四川全省:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"></script>
<script type="text/javascript">
var t = remote_ip_info;
if( t.province == '四川' ){
window.location.href='https://www.hhtjim.com';
}
</script>
说明:
第5行填写需要屏蔽的省份,这里就解决了上面不能屏蔽省份的弊端。
自己完全可以DIY,如果需要屏蔽中国地区
第5行改为if( t.country == '中国' ){
屏蔽来自联通的IP
第5行改为if( t.isp == '联通' ){