zRuijie4GZHU Google Code:http://code.google.com/p/zruijie4gzhu/
其实这个项目的目标不是非常明确,至少到目前为止,能在Linux下的使用的锐捷兼容客户端已经有mystar、 ruijieclient、mentoHust(还有很多,单纯Google Code上以“锐捷”为标签的就一堆了……),还有基于QT、pygtk开发的图形界面程序,可谓百花齐放,再开发一个版本出来理由似乎不太充分,只是为了一些美中不足:比如最有实力的mentoHust,其能支持到锐捷最新的3.7版本的协议,却不是开源方案;mystar则是年久失修,已经不能兼容现在的协议(不过其留下的代码让后来的开发者得到很大的指引,在此对作者Rijndael&byhh表示敬意);至于此前一直使用的Ruijieclient,其实也有点问题,一直掉线,查看上网明细,每次在线都只有1分29秒就被踢了,说明协议兼容问题。虽说Ruijieclient有“智能重连”功能,但是重连跟掉线是两回事,不能说会重连就说解决了掉线问题,花心思研究协议才是正道。
也许也就在于类似问题的出发点不同吧,虽然PT加入了Ruijieclient的项目,但一直没有参加过代码开发,毕竟一提出任何意见就互相反对的人之间很难合作,所以考完试后就花了一天时间,把锐捷协议移植到PT的“z-框架”下。虽然分析下来这个兼容问题是小事情,就是所谓的serial number的初始值以及success key的提取位不对,不过我实在不喜欢Ruijieclient的框架了,而且对自己熟悉的“z-框架”代码维护起来有快感的多。
“z-框架”是指PT依次开发神州数码、联想、锐捷几个客户端一直沿用下来的一些模式,所以zRuijie4GZHU的代码理论上跟其他锐捷相关程序是没什么相似的。除了从mystar里面沿用过来的两个数组照样copy外,PT把mystar开发时候通过反汇编得出来的Alog、Blog算法函数都重写了一次,比原来汇编式的代码的效率和可读性要高得多(分析过程中发现原来有几行的代码是多余的),两个函数摘抄在本文后面,希望对其他的锐捷开发者有用。
zRuijie4GZHU的目标应该跟Ruijieclient这些不同,Ruijieclient是面向通用的锐捷协议,要做到全球通用其实难度不小的,而zRuijie4GZHU,也正如其名,是为广州大学的锐捷而兼容的,如果能在其他学校使用,那估计是意外。
PT的开发理念是K.I.S.S,zRuijie4GZHU没有什么复杂概念,比如DHCP,只有是和不是DHCP模式,没有什么0、1、2、3模式,更没有配置文件,软件是执行文件和脚本的统一体,缺一不可。
OK,有需要的用户可以查看项目wiki的用户手册吧,下面是PT改写的锐捷Ablog和Blog算法函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /* * === FUNCTION ====================================================================== * Name: Alog * Description: revert bit order and converse each bit. * REWRITTEN BY PT. * ===================================================================================== */ uint8_t Alog(uint8_t val) { int i; u_char result = 0; for (i = 0; i < 8; ++i) result |= (((val << (7 - i)) & 0x80) >> i); return ~result; } /* * === FUNCTION ====================================================================== * Name: Blog * Description: Calculate circle check sum. * REWRITTEN BY PT. * ===================================================================================== */ void Blog(uint8_t circleCheck[2]) { if (!blogIsInitialized) return; uint8_t h_byte = 0, l_byte = 0; int i; for (i = 0; i < 0x15; ++i) { uint8_t index = h_byte ^ sCircleBase[i]; h_byte = Table[index * 2 + 1] ^ l_byte; l_byte = Table[index * 2]; } circleCheck[0] = h_byte; circleCheck[1] = l_byte; } |
膜拜……
Hi,你好!
你这博客的about上说全是用的免费资源。免费的co.cc域名和WordPress好找,但免费的好空间不好找啊,你这个速度还不错,用的哪里的啊?
E-mail:858387065#qq.com
其实这两个函数早在MentoHUST for Windows的2.0版中就已经简化了,跟你简化的差不多,在那个版本的帮助文件中有说明。
@失落星球
谢谢关注。
MentoHUST给我的感觉就是很少交流,比如没有项目页面,没有作者博客(有也是一个二进制文件下载链接),也许他们比较少挂在网上吧,现在说想找到完整的HUST似乎都有难度,别说帮助文件了,都被转载的一塌糊涂。
我的空间准确来说不算免费,是借了朋友的主机存放一下……所以……呵呵。