改善DHCP模式下的认证IP处理方法:若程序能够从网卡获得IP,则使用网卡的真实IP只有获取不到IP时才使用伪IP 169.254.216.45 在使用伪IP的情况下,当接受到第一个REQUEST IDT KEEP ALIVE报文后,尝试再次获取网卡IP与MASK并写入RESPONSE数据帧缓冲区替换伪IP,之后发出的RESPONSE数据帧将包含真实IP 只有当用户同时指定了IP和MASK才使用用户设定值,否则由程序处理IP 修正一些stderr、stderr的滥用 使用起来应该没太大变化,只是让协议更接近官方客户端的过程。现在主页上同时有二进制包和源代码包下载。 项目主页:http://code.google.com/p/zdcclient/ 连续一个星期每天一个版本,= .=有点不可思议的说……
神州数码客户端ZDClient升级到0.4,完善DHCP模式的认证 经过跟武汉大学的michel同学不断的折腾和测试,终于搞清楚他们学校动态DHCP的流程了,“Windows启动后,提示本地连接受限”,到认证后才开始获取IP,这才是动态DHCP模式,所以使用ZDClient的dhcp后,需要运行系统的DHCP客户端重新获取一次IP(通常是dhclient),这一点功能在启动脚本dhcp_zdc_run.sh内已经包含。 现在在Google Code上面的项目已经正式启动,终于用上svn的服务器了,不用把桌面搞的一团糟。 大家可从项目主页下载最新的源码包:http://code.google.com/p/zdcclient/ 之前的网盘链接已经作废。 特别感谢一下刘群同学的关注,给我编译i386的binary,我似乎终于搞定在amd64使用32位的包了!
0.3更新-客户端默认版本号更新为3.5.04.1013fk-修正对SUCCESS数据包的识别-后台运行改为在认证成功后主程序返回-根据状态区分用户名、用户配置信息错误与密码错误的两种提示-在接收和发送Keep Alive报文时提示当前线程的pid-改善pcap的抓包过滤器,只抓发往本机的报文 在姚老大的群里面找到武汉大学的同学micheal帮忙测试了ZDClient,昨天晚上把他们的官方客户端的数据包抓了过来看,原来版本是3.5.04.1013fk,比我们的新!不过奇怪的是广州大学的认证服务器除了用户名密码别的似乎什么都不认证,我怎么乱填都能认证成功 = .= 顺便提醒一下武大的同学,记得在zdcrun里面加上--dhcp参数…… 大家可从项目主页下载最新的源码包:http://code.google.com/p/zdcclient/
今天对比了官方拨号器的报文,改进了一下包分析流程。广州大学的方案似乎做很少校验,有些东西乱填都照样能过。同时也把协议版本修改到3.5版本的,之前在Wiki页有武汉大学的同学求助说他们学校的神州数码因为3.5的版本校验没法使用姚琪的版本,在这里召唤武汉大学的同学来帮忙测试ZDClient了,哈哈。 0.2 更新-整理代码-进一步完善包解析、发送过程细节,加入遇到为止包时的提示-区分EAP_RESPONSE_IDENTITY和EAP_RESPONSE_IDENTITY_KEEP_ALIVE发送的包-加入自定义客户端版本号的功能参数--ver,并能校验版本号长度-默认版本号改成3.5.04.0324-修改--help内About ZDClient的文字-在认证是提示协议版本信息-增加可检测root权限的启动脚本 大家可从项目主页下载最新的源码包:http://code.google.com/p/zdcclient/
一直以来在Linux下要接入神州数码认证用的是姚琦开发的Java版认证工具,不过现在起,使用神码的同学可以把jvm抛弃啦!PT开发出了C语言版的神州数码802.1x客户端! 项目主页:http://code.google.com/p/zdcclient/ 开发手记 PT的客户端版本虽然是命令行的版本,但是功能和姚琦的Java版功能没多大差别,目前支持自定义接入网卡、支持DHCP、支持程序运行后自动fork到后台,用户名等通过参数传入程序。 Java版的软件虽然一般使用起来没太大区别,但是当系统中没有jvm虚拟机和软件依赖的库,而且电脑又不能上网的时候,这可是相当棘手的问题,我去年就为此在Ubuntu-cn的Wiki写了一篇教程,如何从源里面抓jvm的一堆包回来安装,再折腾一番才能用。况且Java程序占的资源颇大,就那个0.6.1版的客户端,常驻内存有50M! 姚琦的个人网站上面公布了他的客户端软件的源码,之前有下载回来,不过一直没看,早天兴起把文件重新放到Netbeans里面来编译一次,发现能编译却不能认证!好奇之下跟踪了其代码,把带界面的1500多行的程序删减到只剩400行的命令行程序,然后再根据抓数据包的对比,发现是这个版本获取本机地址的代码有问题,在Linux下获取本机IP是错的,这样组成的数据包去认证,当然不行了,具体在这里有人解释。 摸清楚认证过程的来龙去脉后,就打算自己用C来写一个客户端,虽然我有2G内存,但老被占着几十M也不舒服。Java里面用的jpcap,是Java用JNI对libpcap的封装,之前我弄过编译amd64版时候接触过,发现其功能很强大,使用也不复杂,于是对写个原生C语言版的客户端也有了信心。 为了弄清整个程序的工作流程,我进一步优化了Java版的代码,400多行最后剩下200多了,姚学长的编码好像有点太过那个,呃……而且姚学长好像连jpcap的toturial都没有读完,竟然使用一堆if来过滤抓到的数据包,怪不得之前内网传文件达10M速度的时候,客户端占的CPU狂飙了。为捕捉过程设置了驱动级别的过滤器,使用回呼方式抓包,对一些函数流程进行重构,最后这个版本运行的时候占内存不到10M,CPU占用率也低多了。 这两天对着一个libpcap的抓包示例,一步步地将包分析的功能改了出来,然后就是手动创建的报文,其中一个小插曲是用到的MD5算法,在Java中有个内建的digest功能,但C语言哪来这东西,上网找,连续下了几个版本,测试一下,有些算出来的值是错的,有些每次算出来都不一样,气死我了,看来是因为我现在用的是amd64版本的系统,算法里面的数据类型不兼容所致。最后在MD5 Homepage (unofficial)找到了L. Peter Deutsch's的版本才正常。 对着wireshark满是16进制数的窗口用笔划了两天框框彻底搞清楚了协议包的结构,然后在gvim里面倒腾了代码,终于程序完成了。不知为什么,写这个程序有很亢奋的感觉,昨天晚上是搞到3点钟才睡,然后早上7点多就爬了起来继续coding,不是我不想睡,而是有问题晾在那里没解决就睡觉的话,就只会整晚失眠了。逃了一天课,终于大功告成,本来还想实现配置文件的功能,不过想想还是算了,很容易就能用脚本来记录。
Page optimized by WP Minify WordPress Plugin