- 论坛徽章:
- 0
|
老早前,通过反汇编Windows版的赛尔客户端,已经掌握了赛尔认证客户端的技术细节,当时就发布了个Linux版的认证客户端,经过一年多使用,大家反馈信息还是不错的.:-)
此后就开始在打路由器的主意了,想在路由器内部直接实现赛尔认证.不过先前都在有线路由器上琢磨.
得出的结论是,有线路由器FLASH和SDRAM都太小了,而且很难搞到开源的固件.只有一种变态方案:不改变有线路由器,用一块ARM板,克隆有线路由器的WLAN口的MAC值,ARM板上烧入认证软件,实现认证及echo包的定时刷新.这样有线路由器凭借MAC和IP值与ARM板一致,就可以上网了.此法如此之丑陋,权做大家笑料吧.
言归正传,从去年看到那款RMB108元的裸板,我就开始心动,等我行动,居然售空了.只好买了RMB138的那款裸板.
基本配置:200多M的CPU, 16M SDRAM, 4M FLASH. 店主发货时已经烧写好 DD-WRT mini USB V 2.4 SP2, 拿到板子,立马开始行动.
整个移植过程有下面几步:
1.准备交叉编译器和源码,以及辅助开发工具.
交叉编译工具:
http://www.dd-wrt.com/dd-wrtv2/downloads/others/sourcecode/toolchains/gcc-3.3.5-openwrt.tar.bz2
源码包,注意我指定的版本:
在
http://download.chinaunix.net/download/0006000/5943.shtml
页面上下载: libnet-1.1.2.1.tar.gz
下载
http://www.tcpdump.org/release/libpcap-0.9.3.tar.gz
Linux版认证程序mystar源码包, 在
http://newhost.byhh.net/f/Linux/1208259118/mystar-0.2.tar.gz
我用的Linux 操作系统是Debian Linux 4.0r5.
其它辅助开发工具有 easywebserver ,windows版的, 下载程序时使用.
2.安装交叉编译器gcc-3.3.5-openwrt.tar.bz2 ,其实就是解压到/opt目录下.
3,交叉编译libnet库和libpcap库.
由于mystar依赖 libnet和libpcap库, 因此要先把libnet和libpcap交叉编译,并安装到交叉编译器的目录下,给后面的mystar编译做好准备.
此处的编译步骤参考了这张网页:http://hno3cn.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=amonth%3d11%26ayear%3d2006
感谢这篇文章的原作者! 不过该文有毛病,我总结并修改如下:
一,解压
tar zxvf libnet.tar.gz
tar zxvf libpcap.tar.gz
二, libpcap :
根据你开发用的内核版本号设置以下环境变量ac_cv_linux_vers ,由于我是用2.4内核的所以设置为2.4
export ac_cv_linux_vers=2.4
运行以下命令对于不习惯多行写法的你,你可以直接复制,多行命令的写法是在每一个语句结尾加上 “ \ ”
./configure CFLAGS=-I/opt/openwrt/include LDFLAGS=-L/opt/openwrt/lib CC=/opt/openwrt/bin/mipsel-linux-gcc --host=mipsel-linux --prefix=/opt/openwrt/ --with-pcap=linux
然后开始编译,运行make
make
用sudo开始安装
sudo make install
三, libnet :
cd libnet
./configure CC=/opt/openwrt/bin/mipsel-linux-gcc --host=mipsel-linux prefix=/opt/openwrt
用vim 打开 源代码目录下的 include/libnet.h
搜索第117行 ( seek 117th line )
把#define 1 替换为 #define LIBNET_LIL_ENDIAN 1
由于mipsel是属于 LIL_ENDIAN的所以就设置为 LIBNET_LIL_ENDIAN,如果你是用 big endian 的cpu例如:powercpu
那么设置为 #define LIBNET_BIG_ENDIAN 1
开始编译
make
sudo make install
4,交叉编译Linux版的mystar, 此处要修改Makefile文件.改动如下:
CC=/opt/openwrt/bin/mipsel-linux-gcc
Flags=-O2 -static
#CFlags=`libnet-config --defines --libs --cflags`
其它地方不变.
此外,由于交叉编译器gcc-3.3.5-openwrt.tar.bz2内自带的libuclibc库版本低于0.9.28, 低版本的库是不带pselect函数,因此,必须要把mystar.c中用到pselect函数的地方改成select函数.
或者你如果有耐心,移植个高版本的libuclibc库.
改完之后,make得到静态编译版的mystar.
5, 下载并运行静态编译版的mystar.
在PC上运行easywebserver, 把mystar和mystar.conf文件丢到easywebserer的主目录下.
把PC与路由器的内网LAN口连起来,
telnet到 无线路由器上, 分别用
wget
http://PC
机IP/mystar
wget
http://PC
机IP/mystar
命令下载mystar mystar.conf到无线路由器上.
chmod 777 mystar 修改mystar属性为可执行.
./mystar 开始认证.
总结: 1.我现在只是把mystar 和 mystar.conf下载到无线路由器里存储在SDRAM里, 断电后需要重新下载. 如果我把程序下载到/jffs2目录下,一运行就报出"段错误", 真是郁闷.还没找到原因.
2. 重连比较频繁,虽然用起来,网一直是通的,但是监控数据包,发现mystar程序常常自动重连.这与在PC机上Linux系统中测试的结果相去甚远.
后记: 1.别指望用SVN把 DD-WRT官网上的源码下载下来,速度之慢,无法忍受.不用源码是可以的.
2.要找到合适的Linx版认证程序,再移植. 虽然EAP协议是标准化的, 但赛尔那帮人常常在协议上动点小手术,让你不能用标准的EAP认证程序.
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/27015/showart_1903446.html |
|