'民工技术' Category

  • ZDClient升级到0.4,完善DHCP模式的认证

    May 21, 2009

    神州数码客户端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位的包了!

  • 神州数码客户端ZDClient升级到0.3,支持武汉大学的校园网

    May 20, 2009

    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/

  • 神州数码客户端ZDClient升级到0.2

    May 19, 2009

    今天对比了官方拨号器的报文,改进了一下包分析流程。广州大学的方案似乎做很少校验,有些东西乱填都照样能过。同时也把协议版本修改到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/

  • 神州数码802.1x认证的C语言版客户端

    May 18, 2009

    一直以来在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,不是我不想睡,而是有问题晾在那里没解决就睡觉的话,就只会整晚失眠了。逃了一天课,终于大功告成,本来还想实现配置文件的功能,不过想想还是算了,很容易就能用脚本来记录。

  • 完美主义的Coder

    May 16, 2009

    今年年初的时候加入了iptux的项目,这是个Unix平台下的“飞鸽传书”,虽然一开始只是关心一下,后来给它写了英文版文档、整理了资料,以及对软件界面的一些调整,原来的作者Jally居然把我也设成Project Owner之一了。 据说程序员总有完美主义的倾向,一开始我还没给iptux写多少行代码,Jally就在邮件里面给我大说代码风格代码风格,很郁闷,我很想对他说,我是看你的代码风格那么乱,我才用了“乱风格”的。iptux是使用C++为架构,但是使用基于C的GTK为底层库,C和C++的代码风格是相当不同的,两者一旦混合起来就很难说什么固定风格了(不然人家基于C++的gtkmm要来干吗),不过我也在邮件里面给他挑骨头,几番下来他说代码先交给我来写了。不过两个月下来我也没再怎么给iptux写过多少行代码,上星期iptux的邮件列表突然热闹了一下,想到之前要实现“URL识别并可点击”的功能,就用了一个晚上加入了400多行代码来实现,惊叹的是原来实现鼠标指到一个链接变成手势那样的事情居然那么复杂,不过还好,gtk-demo里面有现成的例子,这400多行代码有不少是从demo里面抄的。 说程序员是完美主义者,且看看Gtk的邮件列表的人,我发邮件去问了一个关于Glib的链表内存释放的问题,却引来一堆回复,后面的人针对有的人表达得的不完美批一通,毫不客气的说,比之前我和jally的邮件有过之余无不及: 我的问题Why there's still ONE element left after g_slist_free () ?已经很完善的解释:我的总结:围观的群众:English Lession

  • 数据库课程作业:图书管理系统

    May 16, 2009

    上学期混混沌沌学完《数据库原理》,感觉除了会写几条SQL外没什么收获,至于DBMS的工作原理那些,在《操作系统》完全都有,但教数据库的老师不仅不知道这些联系,一丁点数据库技术前沿的信息也没“透露”过。这个学期的数据库课程设计,我用了一个通宵把基本要求的一个“图书管理系统”做完,用了pygtk作为界面和SQLite作为数据源。不过课程设计是需要搞文档的,一个字,很烦,在Google上面用“数据库课程 学生作品”搜出来了某某学校网页上面的作品,把别人的文档重新组合一下,配上我程序的插图,yeah,完工。 Python虽然在这几年逐渐流行,但是它很历史悠久(1990),一直以简洁和功能强大著称,比如内建对SQLite的支持。SQLite是“文件式数据库系统”,也是近年来发展很快的数据库系统之一,比如Firefox等软件都使用其作为后台数据的管理。SQLite秉承了Python弱类型的特点(呃,其实Python和SQLite没什么关系的,说不上秉承...),创建表的时候那些类型你可以天花龙凤地写,插入数据时更是“没王管”。这个LibiaryManager很可能是大家能在Google上能找到的技术最潮的数据库设计作业了。 为了给老师验收,pygtk在Windows下运行的环境也要设置下,不过还好,在pygtk的FTP上可以找到很新的win32版本(主页上面的链接很旧...),而且pygtk、pygobject、pycairo是单独打包的,缺一无法运行(= .=)。 程序中基本使用Treeview来处理输入和显示,不过后来感觉Treeview对录入数据很不方便。 当然啦,这次作业来自网络,当然还要回到网络中去,不保留任何版权,从这里下载:http://code.google.com/p/ptcoding/source/browse/trunk/LIBManager/

  • 错误生涯:Warning: unable to set property `editable' of type `gboolean' from value of type `gchararray'

    May 4, 2009

    Warning: unable to set property `editable' of type `gboolean' from value of type `gchararray' 做GTK编程的时候,使用TreeView控件时出现这个警告,也就是无法使单元格变为“editable”,原因出在这里: column = gtk.TreeViewColumn(columName[columnNum], renderer, editable=True) 原理解TreeViewColumn的构造函数接受的参数里面可以接受设置Cellrenderer的属性,就直接给editable设True,于是就得到以上警告。 换用add_attribute、set_attributes,均是如此。 Google上搜到同样错误警告,但是他的原因是设错值类型,我明明设了True啊…… 自己观察pygtk-demo的代码和手册,突然发现在构造函数里面给出的属性设置值不应该是直接的值,而是对应Model里面的相应column的值!看手册的描述: Zero or more attribute=column pairs may be added to specify from which tree model column to retrieve the attribute value. 呃,果然是看手册时候大意了,这么多年来还是让英语介词搞的晕头转向。如果在构造函数里面设True这个值,就会被解析为1,去对应Model里面第二栏的类型,是字符串的gchararray,当然对不上了。 解决办法是renderer.set_property("editable", True),调用继承自GObject的set_property方法来设置对象属性。

  • 无损转换ext3到ext4,with Ubuntu Jaunty 9.04

    April 29, 2009

    Ubuntu Jaunty 9.04开始正式支持ext4文件系统,关于ext4,其优点应该早有听闻,对任何用户而言都具有难以拒绝的诱惑:对一般用户而言,有更好的磁盘性能,快速的预分配、删除,更可靠的日志,更迅速的磁盘检查(不会像ext3可能花几分钟来check,ext4经常是瞬间完成的)……更专业的描述可以看看IBM文库的这篇《Migrating to ext4》。 从Ubuntu 8.10升级到9.04,一定程度上是看上其对ext4的支持,不过如果为此重新格式化分区重装系统,对于使用积累较多的系统来说代价太高了点(PT现在用的系统是去年的8.04,后来升级8.10,再到现在的9.04……),不过根据《Migrating to ext4》的说法,从ext3到ext4的无损转换是可能的,而且并不耗时间,就如Kernel Wiki里面的Ext4 Howto提到转换所用的命令,其实也很简单: tune2fs -O extents,uninit_bg,dir_index /dev/DEVe2fsck -fD /dev/DEV 查了下tune2fs的man页,uninit_bg是支持快速check的特性,dir_index则是创建二叉树散列的目录查找,至于extents在man页没提到,Kernel Wiki里面说是ext4专有的特性,完成后用e2fsck check一次,这样就完成ext4的转换了,整个过程的耗时并不多。 不过这样转换出来的分区有点不完美的地方是,原本存放在分区内的文件结构还是ext3的结构,由ext4的机制透明兼容,以后存放的文件才是ext4的格式。本来影响不大的,不过相信会影响众多完美主义者的精神状态,所以很多人宁愿把文件全复制出来,格式化了分区再复回去。 IBM的文章内提到,因为ext4支持了在线的碎片整理,对于转换的ext4,使用e4defrag整理一遍,就是纯种的ext4了,不过到目前为止,e4defrag并未完全可用。不过相信不久的将来,转换到纯种ext4完全可以一气呵成的。 最近有谣言说/boot不能是ext4,不然grub引导不了。事实上Ubuntu 9.04已经完全支持ext4,不然此前怎么会有ext4系统的9.04 21秒引导系统的新闻?不过对于升级过来的9.04,安装在/boot/grub里面的程序还是旧版的,没有自动升级,因此可能出现引导问题,相信这也是谣言的出处,所以升级过来的同学要注意了。可以使用grub-install来重新安装一次grub的文件,就如《Upgrade Ubuntu 8.10 to Ubuntu 9.04 and ext3 to ext4 in 10 Minutes》那样。不过grub-install有点要注意,grub-install复制的文件是以/为起始位置的(特别是使用了--root-directory=DIR参数的),如果boot单独分区,同时在livecd里面单独挂载了出来,很可能新复制过去的文件会多了一层boot目录,变成新旧版的引导文件共存以致没法引导grub……(我也感觉我说得一塌糊涂了……总之boot独立分区的同学使用grub-install注意它究竟安装到什么地方去了,看看相应文件的修改时间)。 对于从ext3升级到ext4的系统,还有重要的一点就是fstab,完成上述的操作后,先运行blkid查看分区的新UUID,用编辑器打开/etc/fstab,替换转换了的分区的UUID,当然还有挂载类型改成ext4。

Page optimized by WP Minify WordPress Plugin

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org