linux php验证码,openwrt路由器搭建PHP并用PHP识别验证码
首先要知道为什么要在openwrt搭建PHP环境并且识别验证码
因为很多宽带在登录上为了防止路由器或者其他的原因,添加了验证码,而我们就是不想去手动输入,有人问为什么不用ocr,目前我见到的是用Python在Linux上运行ocr,问题是openwrt的内存太小了,装Python是老鼠吃大象(当然可以挂载U盘去装)。
首先更新openwrt的软件源opkg update
安装PHP环境opkg install php5 php5-mod-gd php5-mod-curl php5-mod-session php5-mod-pdo php5-mod-mcrypt php5-mod-mbstring php5-fastcgi php5-cgi php5-mod-ctype php5-mod-exif php5-mod-iconv php5-mod-json php5-mod-sockets php5-mod-sqlite3 php5-mod-tokenizer php5-mod-zip
在/etc/httpd.conf最后面添加如下config uhttpd web
list listen_http 0.0.0.0:88
option home /www/php
option cgi_prefix /cgi-bin
option index_page "index.html index.php"
list interpreter ".php=/usr/bin/php-cgi"
上面监听http的88端口
设置88端口的根目录为/www/php
然后重启http服务/etc/init.d/uhttpd restart
然后打开/www/php
在里面添加php文件,然后添加如下的识别验证码的代码
(PHP验证码识别由HS5233提供)
注意!!!只能识别特别方正的全数字验证码!!!
放好以后,可以通过 路由器IP:88 访问PHP页面
最后写一个shell脚本,让路由器启动就自行登录#! /bin/sh -
while true
do
pinga=`ping 180.76.76.76 -c 1`
case "$pinga"
in
*ttl* ) ;;
* ) pingb=`ping 180.97.33.107 -c 1`
case "$pingb"
in
*ttl* ) ;;
* ) curl -g "http://192.168.1.1:88/index.php";;
esac
esac
done
然后把本shell添加到路由器启动项里面即可!
我在验证码里面改动了一下,让他识别后帮我提交:<?php
error_reporting(0);
$cookie = dirname(__FILE__)."/valid.tmp";//注意要先给当前目录777权限!
//执行
$validCode=getIdentify($cookie);
//需要开启PHP的shell_exec
$ip=shell_exec("ifconfig eth1| grep '10.1' | cut -f 2 -d ':' | cut -f 1 -d ' '");
$ip=substr($ip,0,-1);
//此处用var_dump($ip)查看截取多少位
$url='http://125.88.59.131:10001/login.do';
$username="";//账号
$pwd="";//密码
$data="edubas=113.98.13.29&eduuser=".$ip."&userName1=".$username."&password1=".base64_encode($pwd)."&rand=".$validCode;
$result=http_post_request($url,$data,$cookie);
$str1=mb_convert_encoding($result, "utf-8", "gb2312");
if(preg_match('/success/',$str1)){
echo "login success!";
}else{
echo "login failed!";
}
function http_post_request($url,$data,$cookie){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
curl_setopt($curl, CURLOPT_REFERER, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
function getIdentify($cookie){
$t=time();
$url = "http://125.88.59.131:10001/common/image.jsp?time=".$t; //验证码地址
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);
$img = curl_exec($curl);
curl_close($curl);
$fp = fopen("identify.jpg","w");
fwrite($fp,$img);
fclose($fp);
$res = imagecreatefromjpeg("identify.jpg"); //创建图像
$size = getimagesize("identify.jpg"); //获得图像大小
// print_r($size);
//echo '
'; //显示验证码
// exit;
$img_w = $size[0]-5; //图像宽度
$img_h = $size[1]-4; //图像高度
//二值化
for($i=3,$_i=0;$i
for($j=7,$_j=0; $j
$rgb = imagecolorat($res,$j,$i); //返回 image 所指定的图形中指定位置像素的颜色索引值。
$rgbarray = imagecolorsforindex($res, $rgb); //本函数用来取得调色盘上指定索引的颜色值。
if($rgbarray['red']+$rgbarray['green']+$rgbarray['blue']<400){
$data_array[$_i][$_j] = 1; //验证码部分为1
// echo '■';
}else{
$data_array[$_i][$_j] = 0; //空白为0
// echo '□';
}
}
// echo '
';
}
// exit;
$img_h -= 3;
$img_w -= 7;
// 切割
for($i=0;$i
for($j=0;$j
if($i<9){
$Vword[0] .= $data_array[$j][$i];
}else if($i>=13&&$i<22){
$Vword[1] .= $data_array[$j][$i];
}else if($i>=26&&$i<35){
$Vword[2] .= $data_array[$j][$i];
}else if($i>=39){
$Vword[3] .= $data_array[$j][$i];
}
}
}
//四个字符查看,教学使用
// echo $Vword[0].'|'.strlen($Vword[0]).'
';
// echo $Vword[1].'|'.strlen($Vword[1]).'
';
// echo $Vword[2].'|'.strlen($Vword[2]).'
';
// echo $Vword[3].'|'.strlen($Vword[3]).'
';
// exit;
//字典
$array[0] = array(
'000111111100001111111111100110000000110110000000001111000000000111100000000011011000000011001111111111100001111111000'
);
$array[1] = array(
'000000000000001100000000110110000000011111000000001111111111111111111111111111000000000001100000000000110000000000011'
);
$array[2] = array(
'011000000011111000000011111100000011011110000011001111000011000111100011000011011111000001100111000000110000000000000'
);
$array[3] = array(
'011000000011011000110000111100011000011110001100001111000110000111100111100111011110111111001110001111000000000000000'
);
$array[4] = array(
'000000001100000000011110000000111111000000111001100001110000110001111111111111111111111111100000000110000000000011000'
);
$array[5] = array(
'111111100011011111110000111100011000011110001100001111000110000111100001100111110000111111011000001111000000000000000'
);
$array[6] = array(
'000011111100000111111111100111001100110110001100001111000110000111100011000011110001110011101100011111100000000111100'
);
$array[7] = array(
'000000000000011000000000001100000000011110000000111111000001111001100011100000110011000000011111000000001110000000000'
);
$array[8] = array(
'000000001110001111001111101111111100111110011100001111000110000111100011100011111111110011101110001111100000000011100'
);
$array[9] = array(
'001111000000001111110001101110011100011110000110001111000011000111100001100011011001100111001111111111000001111110000'
);
//根据字符串相似度识别
for($tmp_count=0;$tmp_count<4;$tmp_count++){
foreach($array as $key=>$value){
foreach($value as $v){
similar_text($Vword[$tmp_count],$v,$similarResult);
if($similarResult>$result[$tmp_count]['similar']){
$result[$tmp_count]['similar'] = $similarResult;
$result[$tmp_count]['num'] = $key;
}
}
}
}
return $result[0]['num'].$result[1]['num'].$result[2]['num'].$result[3]['num'];
}
?>
linux php验证码,openwrt路由器搭建PHP并用PHP识别验证码相关推荐
- openwrt搭建邮件服务器,linux – 如何从OpenWrt路由器发送邮件
我正在使用OpenWrt 10.03并需要通过电子邮件从我的路由器发送"报告". 我安装了sendmail: # opkg install mini-sendmail 然后我用我的 ...
- vs linux 交叉编译,VS结合VisualGDB搭建OpenWrt交叉编译远程调试开发环境
由于此开发环境涉及3设备协同工作,因此先说明一下整体开发环境的配置以及每部分所负责的功能: 1.Windows PC 这里我用的是64位Win7,作为VS的安装环境Windows自然是必不可少的,本机 ...
- 集多功能为一体的智能WiFi模块Linux多线程处理器openwrt开发板工业4G路由器网口有线转无线WiFi
集多功能为一体的智能WiFi模块Linux多线程处理器openwrt开发板工业路由器网口有线转无线WiFi双路RS485/RS232串口透传 RMS7688A集多功能为一体的智能WiFi模块,能跑Li ...
- Linux下使用Quagga(Zebra)搭建路由器记录
预习知识 在进行路由器的搭建之前,需要了解一些基本的知识.下面将会一一道来. 1.什么是路由表,路由表产生的类型有哪些? 答:路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网 ...
- Linux下使用Quagga(Zebra)搭建路由器记录(转)
写在前面 从22号中午开始琢磨zebra/quagga的用法,一直到晚上11点多都没有什么头绪.各种Google,百度,几近崩溃.由于网上关于zebra/quagga的配置方法都是在真实的若干台电脑上 ...
- openwrt搭建微信认证服务器,一种基于Openwrt路由器的Portal认证的方法技术
本发明专利技术公开了一种基于Openwrt路由器的Portal认证的方法,包括:步骤一,在Openwrt路由器上部署Wifidog协议,实现用户访问数据的拦截.重定向和在线状态保持的功能:步骤二,利用 ...
- [Openwrt 项目开发笔记]:Openwrt平台搭建(一)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...
- 路由器搭建ftp服务器
前言 写这篇博客的原因主要是给我所在的实验室路由器写一个配置参考文档,因为是作为实验室公共使,有不少不太懂配置的学弟学妹恐怕操作起来困难,毕竟马上就要走出学校开始工作了,所以以后的主要还是他们使用. ...
- 闪讯利用openwrt路由器拨号教程(二)
2.制作openwrt闪讯插件的前奏--搭建openwrt简易交叉编译环境 在此特别感谢https://github.com/miao1007,提供相关源码. (1)搭建linux虚拟机(Ubuntu ...
最新文章
- 谈谈我对sku的理解(3)----页面效果
- Linux系统抓包回放,Linux下24小时持续网络抓包(TCPDUMP)
- 使用JAnnocessor生成Java代码
- 《Python爬虫开发与项目实战》——1.6 小结
- mysql5.6.39编译安装_源码编译安装MySQL-5.6/mysql-5.6.39------踩了无数坑,重装了十几次服务器才会的,不容易啊!...
- 商城前后端原型、商城prd文档、商城后台管理系统、商城app文档、电商需求文档、限时秒杀、电商平台、促销助力、拼团抽奖、电商文档、prd文档、电商前后端原型、电商原型、Axure电商系统、rp原型
- 为什么下载的时候是php文件,求助 为什么编的下载文件代码,打开后下的全是php文件...
- 【图像融合】简单认识图像融合
- 当前版本的Android Gradle插件不支持按需配置
- Jetpack来了:走近Google标准应用架构
- Java对正则表达式的支持(二)
- 转:请对照这二十四条逻辑谬误自行打脸
- app上架因为副标题被App Store残忍拒绝!
- hdu1107+武林+模拟
- 十、生产者消费者问题
- 【转】什么是数据敏感度?
- MySQL查看数据库状态命令详解
- Photoshop从入门到精通所有视频教程(43G)以及素材资料免费拿
- Tableau:如何自定义形状
- 人大听讲座感想---星空,宇宙,我们太渺小了!