Xsico https://www.xsico.cn Kay's Blog Sat, 07 Apr 2018 06:15:32 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.5.9 CET准考证号查询 https://www.xsico.cn/cache/cet-find.html https://www.xsico.cn/cache/cet-find.html#respond Tue, 22 Aug 2017 16:44:28 +0000 https://www.xsico.cn/?p=290 header('Content-type: application/json;charset=utf-8'); date_default_timezone_set('PRC'); if(!isset($_REQUEST['NM'])||empty($_REQUEST['NM'])||!isset($_REQUEST['ID'])||empty($_REQUEST['ID'])||!isset($_REQUEST['KD'])||empty($_REQUEST['KD'])){ $data=array( 'status'=>'403', 'ks_nm'=>'', 'ks_id'=>'', 'ks_bh'=>'', 'msg'=>'数据缺失' ); echo json_encode($data,JSON_UNESCAPED_UNICODE); exit; } function XCURL($url,$cookie,$post,$referer){ $ip = mt_rand(1,255).".".mt_rand(1,255).".".mt_rand(1,255).".".mt_rand(1,255).""; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch,CURLOPT_HTTPHEADER,array("CLIENT-IP:".$ip."", "Content-Type:"."application/x-www-form-urlencoded; charset=UTF-8"."","X_FORWARD_FOR:".$ip."")); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT,30); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt($ch, CURLOPT_REFERER, $referer); curl_setopt($ch, CURLOPT_POSTFIELDS,$post); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Encoding:gzip')); curl_setopt($ch, CURLOPT_ENCODING, "gzip"); $result=curl_exec($ch); curl_close($ch); return $result; } $url='http://app.cet.edu.cn:7066/baas/app/setuser.do?method=UserVerify'; $cookie = dirname(__FILE__)."/pic.cookie"; $referer='http://app.cet.edu.cn:7066/baas/app/setuser.do?method=UserVerify'; $data=array( 'ks_xm'=>$_REQUEST['NM'], 'ks_sfz'=>$_REQUEST['ID'], 'jb'=>$_REQUEST['KD'] ); $post=array( 'action'=>'', 'params'=>json_encode($data) ); $html=XCURL($url,$cookie,http_build_query($post),$referer); $sid=json_decode($html,true); if(empty($sid['msg'])&&!empty($sid['ks_bh'])){ $data=array( 'status'=>'200', 'ks_nm'=>$_REQUEST['NM'], 'ks_id'=>$_REQUEST['ID'], 'ks_bh'=>$sid['ks_bh'], 'msg'=>'' ); $bh=$sid['ks_bh']; }else{ $data=array( 'status'=>'400', 'ks_nm'=>'', 'ks_id'=>'', 'ks_bh'=>'', 'msg'=>'本次考试未通过|提交的数据有误|数据库中无匹配信息' ); $bh='Null'; } echo json_encode($data,JSON_UNESCAPED_UNICODE); ]]> https://www.xsico.cn/cache/cet-find.html/feed 0 区县级IP数据查询 https://www.xsico.cn/cache/ip-county-info.html https://www.xsico.cn/cache/ip-county-info.html#comments Wed, 26 Jul 2017 07:19:53 +0000 https://www.xsico.cn/?p=281 为QQ显IP版插件开发API接口时,考虑到接口调用频率高会产生高额API费用,而采用免费版接口则达不到要求的精确度,故下面这段代码应运而生。

<?php
header('Content-type: application/json;charset=utf-8');
if(!isset($_REQUEST['ip'])||empty($_REQUEST['ip'])){exit;}
$status='success';
$msg='';
function XCURL($url,$post,$referer){
        $ip = mt_rand(1,255).".".mt_rand(1,255).".".mt_rand(1,255).".".mt_rand(1,255)."";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch,CURLOPT_HTTPHEADER,array("CLIENT-IP".$ip."", "X_FORWARD_FOR:".$ip."")); 
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
        curl_setopt($ch, CURLOPT_TIMEOUT,90);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
        curl_setopt($ch, CURLOPT_REFERER, $referer);  
        curl_setopt($ch, CURLOPT_POSTFIELDS,$post);  
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Encoding:gzip'));
        curl_setopt($ch, CURLOPT_ENCODING, "gzip");
        $result=curl_exec($ch);
        curl_close($ch);
        return $result;
    }
function trimall($str)
{
    $qian=array(" "," ","\t","\n","\r");$hou=array("","","","","");
    return str_replace($qian,$hou,$str);    
}
    $url='http://www.ipip.net/ip.html';
	$referer='http://www.ipip.net/ip.html';
    $post=array(
        '_verify'=>'45df31f3738bba21f9c1579e4452b38e',
        'ip'=>$_REQUEST['ip']
    );
	$contents=XCURL($url,http_build_query($post),$referer);
	$alpharegular='/<span id="myself">(.*?)<\/span>/is';
	$betaregular='/<div style="text-align: center;color:red;font-size: 20px;font-weight: 600;">(.*?)<\/div>/is';
	preg_match_all($alpharegular,$contents,$alphatables);
	preg_match_all($betaregular,$contents,$betatables);
	if(!empty($alphatables[1][0])){
	if(empty($betatables[1][0])){
		$json=array('status:'=>$status,'msg:'=>$msg,'county:'=>'0','data:'=>trimall($alphatables[1][0]));
	}else{
		$json=array('status:'=>$status,'msg:'=>$msg,'county:'=>'1','data:'=>array(trimall($alphatables[1][0]),trimall($betatables[1][0])));
	}
	}else{
        $msg='Non Info';
		$json=array('status:'=>$status,'msg:'=>$msg,'county:'=>'0','data:'=>'');
	}
	echo json_encode($json);
?>
]]>
https://www.xsico.cn/cache/ip-county-info.html/feed 6
Bing美图抓取API代码 https://www.xsico.cn/cache/bing-img-curl-api.html https://www.xsico.cn/cache/bing-img-curl-api.html#comments Thu, 20 Jul 2017 05:55:07 +0000 https://www.xsico.cn/?p=270 function XCURL($url,$referer){ $ip = mt_rand(1,255).".".mt_rand(1,255).".".mt_rand(1,255).".".mt_rand(1,255).""; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch,CURLOPT_HTTPHEADER,array("CLIENT-IP".$ip."", "X_FORWARD_FOR:".$ip."")); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT,15); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_REFERER, $referer); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Encoding:gzip')); curl_setopt($ch, CURLOPT_ENCODING, "gzip"); $result=curl_exec($ch); curl_close($ch); return $result; } if(isset($_REQUEST['rand'])&&!empty($_REQUEST['rand'])&&$_REQUEST['rand']=='true'){ $url='http://cn.bing.com/HPImageArchive.aspx?idx='.rand(0,6).'&n=1'; }else{ $url='http://cn.bing.com/HPImageArchive.aspx?idx=0&n=1'; } $referer=base64_decode('aHR0cHM6Ly93d3cueHNpY28uY24v'); $str=XCURL($url,$referer); if(preg_match("/(.+?)<\/url>/ies",$str,$matches)){ $imgurl='http://cn.bing.com'.$matches[1]; } if(isset($_REQUEST['size'])&&!empty($_REQUEST['size'])){ if($_REQUEST['size']=='1920*1080'){ $imgurl=str_replace("1366x768","1920x1080",$imgurl); } } if(isset($_REQUEST['type'])&&!empty($_REQUEST['type'])){ $type=$_REQUEST['type']; }else{ $type='jpeg'; } if($imgurl){ header('Content-Type: image/'.$type); header(base64_decode('Q29weXJpZ2h0OiB3d3cueHNpY28uY24=')); @ob_end_clean(); @readfile($imgurl); @flush(); @ob_flush(); exit(); }else{ exit('error'); } ]]> https://www.xsico.cn/cache/bing-img-curl-api.html/feed 4 服务端ATS检测API https://www.xsico.cn/cache/ats-ios-check.html https://www.xsico.cn/cache/ats-ios-check.html#respond Sun, 16 Jul 2017 14:09:39 +0000 https://www.xsico.cn/?p=260 在2015年6月份的WWDC 上,Apple提出了App Transport Security(ATS)的概念。这一特性的主要意图是为我们的App与服务器之间提供一种安全的通信方式,以防止中间人窃听、篡改传输的数据。这一特性在iOS 9+和OS X 10.11+中是默认的支持项。这一概念的提出,也将意味着Apple将会慢慢转向支持HTTPS,而可能放弃HTTP。ATS 检测可以 协助你检测出 服务端是否符合 ATS 的各项要求。


REQUEST URL: https://ats.api.xsico.cn/v1/
REQUEST METHOD: POST/GET
参数:
host:要检测的服务端域名
port:可选,默认443端口
返回数据格式:json

]]>
https://www.xsico.cn/cache/ats-ios-check.html/feed 0
本地DNS探测分析 https://www.xsico.cn/cache/local-dns-probe-analysis.html https://www.xsico.cn/cache/local-dns-probe-analysis.html#comments Mon, 10 Jul 2017 04:37:06 +0000 http://www.xsico.cn/?p=233 几乎所有的公共DNS均声称采用BGP Global AnyCast技术部署,为了更直观的分析DNS服务器的性能以及解析准确度编写此工具用于探测DNS服务器虚拟IP背后的真实节点数量。
本地递归DNS一般通过anycast或集群方式部署,用户在使用一个IP接入时背后可能使用了众多的服务器IP节点。本地DNS探测分析API可通过递归DNS的其中任意IP查询到其他所有提供服务的IP。
工作原理:
LDPA的后端下发分布式查询请求(各地运营商),请求的域名为XSICO事先注册好并托管到自己的NS服务器上的。然后LDPA记录递归查询的源 ip,该ip就是所谓的真实ip。
REQUEST URL:
https://ldpa.api.xsico.cn/?tsig=
参数:[tsig] – DNS服务器IP
传值方式:GET
数据格式:JSON
DEMO程序:http://dns.dujin.org/
示例:

function Xcurl($url){
        $ip = mt_rand(1,255).".".mt_rand(1,255).".".mt_rand(1,255).".".mt_rand(1,255)."";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch,CURLOPT_HTTPHEADER,array("CLIENT-IP".$ip."", "X_FORWARD_FOR:".$ip."")); 
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
        curl_setopt($ch, CURLOPT_TIMEOUT,30);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Encoding:gzip'));
        curl_setopt($ch, CURLOPT_ENCODING, "gzip");
        $result=curl_exec($ch);
        $httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE); 
        curl_close($ch);
        return $result;
    }
function dump($vars, $label = '', $return = false) {
    if (ini_get('html_errors')) {
        $content = "<pre>\n";
        if ($label != '') {
            $content .= "<strong>{$label} :</strong>\n";
        }
        $content .= htmlspecialchars(print_r($vars, true));
        $content .= "\n</pre>\n";
    } else {
        $content = $label . " :\n" . print_r($vars, true);
    }
    if ($return) { return $content; }
    echo $content;
    return null;
}
if(isset($_GET['dns'])&&!EMPTY($_GET['dns'])){
	$url = 'https://ldpa.api.xsico.cn/?tsig='.$_GET['dns'];
    echo dump(json_decode(Xcurl($url),true));
}else{
	echo 'NO DNS IP';
}
]]>
https://www.xsico.cn/cache/local-dns-probe-analysis.html/feed 2
VPARSE API https://www.xsico.cn/cache/vparseapi.html https://www.xsico.cn/cache/vparseapi.html#comments Sun, 09 Jul 2017 08:23:42 +0000 http://www.xsico.cn/?p=211 VPARSE致力于国内多视频网站所有视频资源的真实地址解析以及视频资源的二次播放,衍生物为各视频网站会员专享视频的无限制解析播放。

2017.07.08 VPARSE API v1版本关闭

2017.07.09 VPARSE API v2版本上线

此次更新内容:

1.全程采用HTTPS链接,保护隐私,屏蔽运营商等第三方广告劫持。

2.播放背景,样式表统一,轮询规则优化。

3.PC端,移动端细化至设备型号,区别显示。

API REQUEST URL:

https://vparse.api.xsico.cn/v2/?tsig=

参数说明:[tsig] – 视频播放页url

传值方式:GET传值

013406bg54uhyu04n8n4gd

013416xsj47ttjjzt0js79

]]>
https://www.xsico.cn/cache/vparseapi.html/feed 2
ZFOCR API https://www.xsico.cn/cache/zfocrapi.html https://www.xsico.cn/cache/zfocrapi.html#respond Thu, 06 Jul 2017 01:26:54 +0000 http://www.xsico.cn/?p=203 目前字典大致为4500条左右,识别率基本站稳85%,可以确保请求三次之中一定有一次是识别正确的,内网环境下单次完成时间在1.5s-2s,外网环境下完成时间可能会在2.5-3s之间,

PIN Identify by fangzheng.php 为主文件
PIN Identify lib.php 为其函数库
downloadImg.php 用于download验证码
AddDictionary.php 用于添加字典
zidian.sql 为字典,建一个叫’yzm’的数据库导入即可

 PS:目前认为运算效率的瓶颈在 similar_text()  这个核心函数上,函数的作用在于对比两个字符串的相似程度,但是其算法时间复杂度T(n) = O(n^3) ,所以准备用T(n) = O(m*n)动态规划实现一个相类似的函数去代替该函数,以提高性能,时间未定。。。

API REQUEST URL:

http://ocr.api.xsico.cn/v1/?img=

header('Content-Type: text/html;charset=utf-8');
include('./function/PIN Identify lib.php');
$yz = 10;//切割判断阈值
$all = array();
$save_to = './cache/' . time() . '.png';
function XCURL($url){
        $ip = mt_rand(1,255).".".mt_rand(1,255).".".mt_rand(1,255).".".mt_rand(1,255)."";
        $ch = curl_init();
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch,CURLOPT_HTTPHEADER,array("CLIENT-IP".$ip."", "X_FORWARD_FOR:".$ip."")); 
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
        curl_setopt($ch, CURLOPT_TIMEOUT,15);
        curl_setopt($ch, CURLOPT_REFERER, "https://grades.xsico.cn/");  
        //开启Gzip提升数据传输速度
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Encoding:gzip'));
        curl_setopt($ch, CURLOPT_ENCODING, "gzip");
        $result=curl_exec($ch);
        curl_close($ch);
		return $result;
    }
$save = file_put_contents($save_to, XCURL($url));
$_info = getimagesize($save_to);

$info = array(
    'width' => $_info[0],
    'height' => $_info[1],
    'type' => image_type_to_extension($_info[2], false),
    'mime' => $_info['mime']
);
$fun = "imagecreatefrom{$info['type']}";//根据上面获取的格式判定应该使用哪种'imagecreatefrom***'函数
$image = $fun($save_to);

//二值化
for ($y = 0; $y < $info['height']; ++$y) {
    for ($x = 0; $x < $info['width']; ++$x) {
        $rgb = imagecolorat($image, $x, $y);
        $rgbArray = imagecolorsforindex($image, $rgb);
        if ($rgbArray['red'] < 110 && $rgbArray['green'] < 110 && $rgbArray['blue'] > 100) {
            $all[$y][$x] = '1';
        } else {
            $all[$y][$x] = '0';
        }
    }
}
imagedestroy($image);//摧毁内存中的图片

//去噪点
$all = remove_noise($info['height'], $info['width'], $all);//引用remove_noise函数获取去噪点后的二值化数组

$start_x1=$end_x1 =$start_x2=$end_x2=$start_x3=$end_x3=$start_x4 =$end_x4= 0;//切割用的x轴参考值
$start_y1 =$end_y1=$start_y2=$end_y2=$start_y3=$end_y3=$start_y4=$end_y4= 0;//切割用的y轴参考值

//切割
cutting($info['width'],$info['height']);//获取到x轴和y轴的切割用的参考值


//echo "x:S1:$start_x1,E1:$end_x1,S2:$start_x2,E2:$end_x2,S3:$start_x3,E3:$end_x3,S4:$start_x4,E4:$end_x4


"; //echo "y:S1:$start_y1,E1:$end_y1,S2:$start_y2,E2:$end_y2,S3:$start_y3,E3:$end_y3,S4:$start_y4,E4:$end_y4


"; $letter1 = $letter2 = $letter3 = $letter4 = array(); //获得切割坐标后截取 for ($y = $start_y1, $_y = 0; $y < $end_y1; ++$y, ++$_y) { for ($x = $start_x1, $_x = 0; $x < $end_x1; ++$x, ++$_x) { $letter1[$_y][$_x] = $all[$y][$x]; } } for ($y = $start_y2, $_y = 0; $y < $end_y2; ++$y, ++$_y) { for ($x = $start_x2, $_x = 0; $x < $end_x2; ++$x, ++$_x) { $letter2[$_y][$_x] = $all[$y][$x]; } } for ($y = $start_y3, $_y = 0; $y < $end_y3; ++$y, ++$_y) { for ($x = $start_x3, $_x = 0; $x < $end_x3; ++$x, ++$_x) { $letter3[$_y][$_x] = $all[$y][$x]; } } for ($y = $start_y4, $_y = 0; $y < $end_y4; ++$y, ++$_y) { for ($x = $start_x4, $_x = 0; $x < $end_x4; ++$x, ++$_x) { $letter4[$_y][$_x] = $all[$y][$x]; } } //展示切割后的结果和二值化后的数组 //show($info['height'], $info['width'], $all, $letter1, $letter2, $letter3, $letter4); $ocr = discern($letter1, $letter2, $letter3, $letter4);//识别 function delFileUnderDir( $dirName ) { if ( $handle = opendir( "$dirName" ) ) { while ( false !== ( $item = readdir( $handle ) ) ) { if ( $item != "." && $item != ".." ) { if ( is_dir( "$dirName/$item" ) ) { delFileUnderDir( "$dirName/$item" ); } else { //获取文件最后访问时间 $fileatime=fileatime("$dirName/$item"); //保留300S以内的Cache,避免影响已经触发的进程 if(($_SERVER["REQUEST_TIME"]-$fileatime)>5){ unlink("$dirName/$item"); } } } } closedir( $handle ); } } delFileUnderDir('cache');
]]>
https://www.xsico.cn/cache/zfocrapi.html/feed 0
PPTV视频解析源码 https://www.xsico.cn/cache/pptvparsecode.html https://www.xsico.cn/cache/pptvparsecode.html#respond Sat, 26 Nov 2016 16:08:42 +0000 http://www.xsico.cn/?p=132 error_reporting(0); header('Content-Type:text/html;charset=UTF-8'); $vid = $_GET['v']; $url = "http://player.pptvyun.com/svc/flashplayer/pl/".$vid.".swf"; $header = httpCurl($url,true); $temp = parse_url($header); $api = preg_replace('/swf=/','',$temp['query']); preg_match('/o={p}(.*?)$/',urldecode($api),$o); preg_match('/validtk={p}(.*?)&/',urldecode($api),$token); $api = "http://svc.pptvyun.com/svc/v1/play/auth/?playStr=".$vid."&username=&type=web.cloudplay&userType%3D0%26o%3D28667&validtk=".$token[1]."&o=".$o[1]."&referrer=&type=web.cloudplay&o=".$o[1]."&pageUrl="; header('Content-Type:application/xml;charset=utf-8'); $data=vcurl($api); preg_match_all('|</bwt><bh>(.*?)</bh>|', $data, $c); preg_match_all('|UTC">(.*?)</key>|', $data, $d); preg_match_all('|<item rid="(.*?)"|', $data, $e); switch ($_GET['qxd']) { case 'cq': $ip_ip = $c[1][1]; $key_key = $d[1][1]; $mp4_mp4 = $e[1][1]; break; case 'gq': $ip_ip = $c[1][0]; $key_key = $d[1][0]; $mp4_mp4 = $e[1][0]; break; case 'pt': $ip_ip = $c[1][2]; $key_key = $d[1][2]; $mp4_mp4 = $e[1][2]; break; case 'pq': $ip_ip = $c[1][3]; $key_key = $d[1][3]; $mp4_mp4 = $e[1][3]; break; default: $ip_ip = $c[1][1]; $key_key = $d[1][1]; $mp4_mp4 = $e[1][1]; break; } $url = "http://".$ip_ip."/w/".$mp4_mp4."?fpp.ver=1.3.0.19&k=".$key_key."&type=web.cloudplay"; header("location: {$url}"); function httpCurl($url,$returnHeader=false,$referer=NULL) { $UserAgent = 'Mozilla/5.0 (iPad; CPU OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13D15 Safari/601.1'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); $data = curl_exec($curl); if($returnHeader){ $data = curl_getinfo($curl,CURLINFO_EFFECTIVE_URL); } curl_close($curl); return $data; } function vcurl($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); curl_close($curl); return $data; } ]]> https://www.xsico.cn/cache/pptvparsecode.html/feed 0 浅谈HTTP劫持、DNS污染的影响及解决办法 https://www.xsico.cn/cache/dnshttp.html https://www.xsico.cn/cache/dnshttp.html#comments Sun, 09 Oct 2016 13:31:22 +0000 http://www.xsico.cn/?p=112 首先我们说一下“墙:防火长城”,它是由 互联网科学家(比如:方滨兴)、工作人员、五毛、分布式超级计算机、三大运营商组成的。
我们可以看到,墙并不是一个独立的单独存在的一个组织,而是由国内各领域的互联网重要结构组成的。

互联网科学家:专门研究如何低成本高效率的更有效的过滤审核。 工作人员:一些非机器替代的人工操作,比如人工审核。 五毛:五毛。 分布式超级计算机:要知道每一秒经过大陆各国际出口经过的流量是非常庞大的,需要很多超级计算机进行运算过滤。 三大运营商:这个是最重要的组成部分,没有运营商的支持,墙就是个屁。大陆各国际出口都是三大运营商建立和控制的,如果他们不点头,墙又如何在“大门口”(国际宽带出口处)建立“过滤审核检查站”,当然运营商也是国家控制的,所以还是一家人。

所以,墙就相当于在 大陆的各个国际宽带出口处建立的 过滤审核检查站。


还有我发现一个很有趣的事情,很多人以为只有中国和朝鲜存在墙,这很无知。
如果你把 屏蔽Google、Facebook、Youtube、Twitter的国家 就当作这个国家存在墙的话,那我无话可说。
墙或者说 互联网防火长城,是任何一个拥有互联网主权国家的必备组成。
如果你的国家没有墙,没有信息审核过滤机制,那政权随时可能推翻,这不是吹牛,有好几个国家的总统或者总理因为不注重这个问题,导致不仅下位还坐牢了。
美国是个自称最自由的国家,所以他就没有墙了吗?不,他们对盗版网站,儿童色情网站等也是屏蔽。
还有韩国,在互联网方面最发达的国家之一,同样也是针对色情行业大力清理屏蔽。
就算是越南、缅甸、泰国,这种互联网相对不发达的国家,依然存在墙。
墙是必然的,你不可能阻止墙的存在,我并不是为 中国防火长城开脱什么,我只是阐述墙必须存在的事实。
同时墙也是一种变相的保护国内互联网产业的发展,否则微博,百度哪那么容易发展起来。
因为一些话太敏感,不能说的太直白,否则就要拆水表了,理解不了就反过来站在领导人的角度思考,所以上面说的你们能理解多少那就是多少吧。

HTTP劫持

大家都知道,我的 dou-bi.com 域名在前段时间的G20期间被HTTP劫持和DNS污染了,而我也简单的研究了一下这两个。
HTTP劫持很容易理解,因为HTTP传输协议是明文的,并且我的网站服务器是在海外,要访问我的网站就要通过中国的国际宽带出口,出去与我的网站建立连接。
但是那G20期间因为戒严,所以加强了HTTP关键词审查,我的网站也是因为关键词的原因在经过出口的时候,被“检查站:墙”扫描到了违规关键词,于是掐断了TCP链接。
所以当时用户访问网站会遇到:链接已重置、该网站已永久移动到其他地址等等。

解决方法

而HTTP劫持很容易解决,那就是加上SSL证书,网站链接全部内容加密,这样“检查站:墙”就无法解密数据分析关键词了。
但是这不是绝对能解决这个问题的,如果你的网站只是误杀或者违规擦边球,那还好,如果是大型网站,就会特殊对待了。
HTTPS在建立加密连接的时候,需要一次握手,也就是达成链接协议建立加密连接,但是这次握手是明文的(建立加密链接首先就是链接双方信任,比如网站的SSL证书是自己签的,或者SSL证书到期或伪造的,在访问这个网站的时候浏览器就会进行提示,表示此网站不安全啥的。)
握手是明文的就意味着,如果你的域名被重点关注,即使你加上了SSL证书,也会在首次握手的时候,被关键词匹配然后掐断链接。
还有一种方式,就是域名备案,使用国内服务器。这样用户在访问你的网站时,根本不需要经过墙,自然也没有了拦截。

DNS污染

DNS污染,又称为域名服务器缓存污染(DNS cache pollution)或者域名服务器快照侵害(DNS cache poisoning)。
DNS污染是指一些刻意制造或无意中制造出来的域名服务器分组,把域名指往不正确的IP地址。
一般来说,网站在互联网上一般都有可信赖的域名服务器,但为减免网络上的交通,一般的域名都会把外间的域名服务器数据暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有相关网域的局域域名服务器的缓存受到污染,就会把网域内的电脑导引往错误的服务器或服务器的网址。

原理解析

我们假设 A为用户端也就是你的电脑设备,B为DNS服务器,C为A到B链路中一个节点的网络设备(路由器、交换机、网关等)。
然后我们模拟一次被污染的DNS请求过程。
A访问一个网站,比如 google.com ,然后,A向B通过UDP方式发送查询请求,比如查询内容 A google.com ,这个数据库在前往B的时候要经过数个节点网络设备比如C,然后继续前往DNS服务器B。
然而在这个传输过程中,C针对这个数据包进行特征分析,(DNS端口为53,进行特定端口监视扫描,对UDP明文传输的DNS查询请求进行特征和关键词匹配分析,比如“google.com”是关键词,也或者是“A记录”),从而立刻返回一个错误的解析结果(比如返回了 A 233.233.233.233 )。
众所周知,作为链路上的一个节点,网络设备C 必定比真正的 DNS服务器B 更快的返回结果到 用户电脑A,而目前的DNS解析机制策略有一个重要的原则,就是只认第一。因此 节点网络设备C所返回的查询结果就被 用户电脑A当作了最终结果,于是用户电脑A因为获得了错误的IP,导致无法正常访问 google.com 。

验证污染

我的 www.dou-bi.com 主域名虽然在大部分地区解除了DNS污染,但是我的两个SS站域名并没有,所以我尝试对我的SS 子域名进行nslookup测试。

C:\Users\Administrator>nslookup ss.dou-bi.com 8.8.8.8
服务器: google-public-dns-a.google.com
Address: 8.8.8.8

非权威应答:
名称: ss.dou-bi.com
Addresses: 200:2:9f6a:794b::
8.7.198.45

我使用的是谷歌的 8.8.8.8 DNS,但是我得到的A记录 IP却是8.7.198.45,这个明显不是我的IP,看一下其他被DNS污染的域名就会发现都会有这个IP。
所以很明显,我的 ss.dou-bi.com 域名受到了DNS污染。

解决方法

  • 使用加密代理,比如Shadowsocks,在加密代理里进行远程DNS解析,或者使用VPN上网。
  • 修改hosts文件,操作系统中Hosts文件的权限优先级高于DNS服务器,操作系统在访问某个域名时,会先检测HOSTS文件,然后再查询DNS服务器。可以在hosts添加受到污染的DNS地址来解决DNS污染和DNS劫持。
  • 通过一些软件编程处理,可以直接忽略返回结果是虚假IP地址的数据包,直接解决DNS污染的问题。
  • 如果你是Firefox用户,并且只用Firefox,又懒得折腾,直接打开Firefox的远程DNS解析就行了。在地址栏中输入:about:config找到 network.proxy.socks_remote_dns 一项改成true。
  • 使用DNSCrypt软件,此软件与使用的OpenDNS直接建立相对安全的TCP连接并加密请求数据,从而不会被污染。 对于被DNS污染的网站站长来说,最有效的方法就是 换域名或者IP 了。

污染攻击大事记

2010年3月,当美国和智利的用户试图访问热门社交网站如 http://facebook.comhttp://youtube.com 还有 http://twitter.com 等域名,他们的域名查询请求转交给中国控制的DNS根镜像服务器处理,由于这些网站在中国被封锁,结果用户收到了错误的DNS解析信息,这意味着防火长城的DNS域名污染域名劫持已影响国际互联网。

2010年4月8日,中国大陆一个小型ISP的错误路由数据,经过中国电信的二次传播,扩散到了整个国际互联网,波及到了AT&T、Level3、Deutsche Telekom、Qwest Communications和Telefonica等多个国家的大型ISP。

2012年11月9日下午3点半开始,防火长城对Google的泛域名 http://google.com 进行了大面积的污染,所有以 http://google.com 结尾的域名均遭到污染而解析错误不能正常访问,其中甚至包括不存在的域名,而Google为各国定制的域名也遭到不同程度的污染(因为Google通过使用CNAME记录来平衡访问的流量,CNAME记录大多亦为 http://google.com 结尾),但Google拥有的其它域名如 http://googleusercontent.com 等则不受影响。有网友推测这也许是自防火长城创建以来最大规模的污染事件,而Google被大面积阻碍连接则是因为18大 。 ——摘取自:知乎

当然,DNS污染的大事件肯定不会只有这几个,但是这也说明了DNS污染的力量和危害之大。

IP黑名单

即使没有DNS污染 或者 你获得了正确的IP,你就能正常访问这些被屏蔽的网站了吗?
不,墙目前已经有了IP黑名单,针对谷歌这种网站已经不再是普通的DNS污染了,因为总会有办法访问被DNS污染的网站(比如指定Hosts)。
那么就直接把所有的谷歌IP拉黑不就好了?就算你获得了正确的谷歌IP,但是当你去访问这个IP的时候,墙会发现这个IP存在于黑名单中,于是直接阻断,于是浏览器就会提示:www.google.com的响应时间过长等等。
当然谷歌的IP非常多,而且有很多都是隐藏的。
像Goagent、XX-NET、Hosts方式访问谷歌或者其他被屏蔽的网站,都是使用的谷歌IP,当大量谷歌IP被拉黑后,这三种方式就会衰败。
现在这三种方式依然在不停的扫描那些隐藏的谷歌IP,但是谷歌IP再多也不是无穷无尽的,迟早会消耗完毕,坐吃山空。到时候就是这几种方法的死期了。
在普通用户扫描的时候,“墙”中的工作人员和超级计算机何尝也不是在扫描?正是看到了这种依赖于谷歌IP方式的末路,所以我网站到现在也没有一篇和这几种方式有关的教程和文章。

]]>
https://www.xsico.cn/cache/dnshttp.html/feed 3
Javascript document.referrer判断访客来源网址 https://www.xsico.cn/cache/javascript-document-referrer.html https://www.xsico.cn/cache/javascript-document-referrer.html#comments Mon, 12 Sep 2016 13:23:17 +0000 http://www.xsico.cn/?p=85 用简单几行的javascript,就可抓到使用的来源,以及作出一些防范的措施。

<script type="text/javascript">
var refurl=document.referrer;
if(refurl.indexOf("stus8")&gt;-1){
alert("来源网址"+document.referrer+"为本站不信任网址!");
location.replace(refurl);
}
</script>
]]>
https://www.xsico.cn/cache/javascript-document-referrer.html/feed 4