php模拟认证h3c校园网 之前买了一个cubieboard,苦于没有外网ip,后来在cs同过路由器绑定公网ip暂时解决问题,现在在3g也有网络接口,但是需要经过 h3c认证,我倒是有号,但是h3c认证需要打开浏览器,我一个cubieboard本来空间就不大,再装个图形界面和浏览器,那它作为服务器来玩的性价比就太低了,还不如买台二手主机呢,呵呵。
因为之前也用过php的curl功能,再秋币学长的鼓动下,我决定模拟认证下,就不用装图形界面和浏览器了。
正式开工,非常幸运的是,我在网上找到了很有用的博文,给了我很多启示和方法。
我一般的工作学习环境是debian ,真的是很方便,命令行比win的强多了。
我开始时先不断的登录下线认证系统http://222.24.19.190:8080/portal/index_default.jsp,并通过chrome浏览器的f12开发者工具查找其传参,刚开始时我错误的以为只是一次传参,只向一个页面传参.于是我就不断的模拟结果页面.发现根本不起作用.而且,这个结果页面是get传参,我就很不理解,而且在其传参列表里竟然没有密码一项。
我开始的几个小时根本是做无用工,因为方向就是不对的。
然后通过网上查,我找到了wireshark这个工具,并抓包分析,我发现一次登录h3c系统,要先后传参给5个页面。
一个pws,一个主页,一个afterlogin,一个心跳检测页,一个loginleave,所以我就分别看这几个网页的抓包数据。
发现其cookie都是一样的,但是只有pws这个页面是存在passwd这个传参的,也就是说,只有这个页面是验证密码的。
那我验证一下密码不就行了?
通过这个思路,经过10个小时。。。。。。看起来简单,用起来真的是得一丝不苟,要模拟header信息,而网上很多curl的header都是错的,导致我根本弄不对。后来,经过自己测试后才得到正确的用法。我发现认证的密码是经过base64加密的,那就给了这个脚本通用型的可能。但是我比较懒,我先把我的cubieboard弄好,再管别人吧。呵呵
源码如下:
<?php
class test{
public function login(){
// $name="xianglijuan";
// $pwd="910820";
// $pwd=base64_encode($pwd);
$url="http://222.24.19.190:8080/portal/pws?t=li";
$fields="userName=xianglijuan&userPwd=OTEwODIw&serviceType=&userurl=&userip=222.24.52.191&basip=&language=Chinese&portalProxyIP=222.24.19.190&portalProxyPort=50200&dcPwdNeedEncrypt=1&assignIpType=0&appRootUrl=http%3A%2F%2F222.24.19.190%3A8080%2Fportal%2F&manualUrl=&manualUrlEncryptKey=rTCZGLy2wJkfobFEj0JF8A%3D%3D";
$host = array(
"Accept: application/json,text/javascript, */*; q=0.01",
"Host: 222.24.19.190:8080",
"Origin: http://222.24.19.190:8080",
"X-Requested-With: XMLHttpRequest",
"User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36",
"Content-Type: application/x-www-form-urlencoded",
"Referer: http://222.24.19.190:8080/portal/index_default.jsp",
"Accept-Encoding: gzip,deflate,sdch",
"Accept-Language: zh-CN,zh;q=0.8,en;q=0.6",
"Cookie: hello1=xianglijuan;0hello2=false; hello3=; hello4=;0i_p_pl=%7B%22errorNumber%22%3A1%2C%22nextUrl%22%3A%22HTTP%3A%2F%2F222.24.19.190%3A8080%2Fportal%2Findex_default.jsp%22%2C%22quickAuth%22%3Afalse%2C%22clientLanguage%22%3A%22Chinese%22%2C%22defaultServiceType%22%3A%22%22%2C%22assignIpType%22%3A0%2C%22iNodePwdNeedEncrypt%22%3A1%2C%22findPwdUrl%22%3A%22http%3A%2F%2F222.24.19.190%3A8080%2Fselfservice%2Fmail%2FforgetPassword.jsf%3Finit%3Dtrue%26url%3DaHR0cDovLzIyMi4yNC4xOS4xOTA6ODA4MC9wb3J0YWwvP3VzZXJpcD0yMjIuMjQuNTIuMTkx%22%2C%22clientPrivateIp%22%3A%22222.24.52.191%22%2C%22nasIp%22%3A%22%22%2C%22ifTryUsePopupWindow%22%3Atrue%7D; JSESSIONID=74A36C8E6D2BCFCF6892628F00C68742");
$ch=curl_init($url);
curl_setopt($ch,CURLOPT_HEADER,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,0);
curl_setopt($ch,CURLOPT_HTTPHEADER,$host);
// curl_setopt($ch, CURLOPT_REFERER, "http://222.24.19.190:8080/portal/index_default.jsp");//来路
// curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_exec($ch);
curl_close($ch);
// $url="http://222.24.19.190:8080/portal/page/online.jsp?st=2&pl=%7B%22errorNumber%22%3A1%2C%22heartBeatCyc%22%3A600000%2C%22heartBeatTimeoutMaxTime%22%3A3%2C%22userDevPort%22%3A%22Old_center1-vlan-07-0252%40vlan%22%2C%22userStatus%22%3A99%2C%22serialNo%22%3A-1312%2C%22ifNeedModifyPwd%22%3Afalse%2C%22browserUrl%22%3A%22%22%2C%22clientPrivateIp%22%3A%22222.24.52.191%22%2C%22nasIp%22%3A%22%22%2C%22clientLanguage%22%3A%22Chinese%22%2C%22ifTryUsePopupWindow%22%3Atrue%7D";
// $ch=curl_init($url);
// curl_setopt($ch,CURLOPT_HEADER,1);
// curl_setopt($ch,CURLOPT_RETURNTRANSFER,0);
// curl_setopt($ch, CURLOPT_REFERER, "http://222.24.19.190:8080/portal/index_default.jsp");//来路
// curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36");
// curl_setopt($ch,CURLOPT_HTTPHEADER,$host);
// curl_exec($ch);
// curl_close($ch);
}
}
$ex=new test();
ignore_user_abort();
do{
$ex->login();
sleep(60*5);//5min
}while(true);
?>