+ -
当前位置:首页 → 问答吧 → Linux中艰难的802.1x上网历程

Linux中艰难的802.1x上网历程

时间:2007-07-27

来源:互联网

  上网对我来说向来不太容易,由于赶在分到新校区,网络设施还没有部署齐全。而且我买的电脑也很早,于是就在寝室里用201卡上网。我的电脑是那种杂牌的笔记本。在RH9中声卡和内置猫都驱不起来,oss和alsld都试过还是不行,没办法后来只好用Windows上网,在vmware中运行linux了。后来大一下学期网络中心招人,而且据说还会有工作室。当时教学楼里的网络设施已经部署好了,每个教室都可以上网。于是我马上跑过去应聘。当时老师已经准备不招新人了,不过我是辅导员推荐过去的,加上老师对我的印象不错,于是我就被录用了。

  终于能上网了,而且还是固定IP。不过因为声卡的问题我还是在用Windows。虚拟机上的系统变成了fedora。有了足够的带宽,我可以在网上下载iso了。

  暑假的留在了学校做ldap目录。恰逢fedora 7出炉,我下载来是一是居然认出我的声卡了。于是我毫不犹豫就把整个硬盘格了只装f7。

  大二的上学期寝室里开始通网络了,802.1x认证,锐捷的设备。我到锐捷的网站上翻了个遍也没有找到linux下的客户端下载。后来网络中心的负责网络设施的王老师给我一个包的程序,现在想来应该是网上留传的所有的锐捷客户端的集合了吧?

  那些程序我看了就讨厌,都是一个官方不知道什么时间发布的客户端的各种版本。而且那种一步步的提示方式看起来很像我们C++课程设计的时候大家写的小程序。我试了试不成功就给老师说不能用了!后来听说别的校区的同学认证成功了,不过很不稳定总是断线。我也不管了,当时我在网络中心可以用很多机器,开始在一台2003下用CCProxy.后来装了FC用squid。这样保证我在寝室也可以上网。有时嫌麻烦了干脆在,服务器上装了gaim。用ssh把X定向到我的桌面上来聊天。前不久在网上查资料时候然看到锐捷linux客户端掉线是因为检测代理服务器的功能误报的原因。我当时嗤之以鼻:程序本来的功能还没写完呢,限制做的倒完整!

  大二的那个暑假我决定退出网络中心了。从今以后就只能在寝室上网了,而且不能使用网络中心的代理。当时我的系统已经从Fedora换成了FreeBSD半年多了。我不想换回来,又不能使用代理,也就只好自己想办法了。

  上网搜搜发现发现网上涌现的很多的小程序。都是各个平台用来实现兼容锐捷认证的。但是功能都不是很完整,而且都不是很稳定。有的不开放源代码,有的只linux平台。我想起以前曾经到过的open1x的网站。那时候已经了解了锐捷的认证和802.1x协议之间的微妙关系。于是我决定自己修改客户端给自己认证。

  当时我已经放暑假在家了,发行版本的xsupplicant还不支持FreeBSD平台。我花了很长时间读代码,同时尝试用网上一个帖子中在FreeBSD下认证的代码来为xsupplicant添加FreeBSD的支持。同时参考的还有Ivan Voras的patch,他为一个稍老版本的xsupplicant添加了补丁但是这个补丁只能在FreeBSD 5.1中才能编译。这项工作对我来说过于艰巨,我花了半个月的时间没有成效,于是我向Ivan Voras发email求助,他很快给了答复。回信中说Fernando Schapachnik已经将它的代码修改并添加到官方的CVS中。这样一来我可以不用担心移植的问题了。我从官方的cvs中获取了代码,果然能够顺利编译。但同锐捷的兼容工作只能回到学校再继续进行。而我继续读了几天xsupplicant的代码后就去研究kademlia去了。

  开学回到学校,我开始进行客户端的兼容工作,我在同学的机器上截了很多的包来分析,得到了发包的地址。在xsupplicant的配置文件中填入,于是日志中有了很多的纪录。xsupplicant发的包锐捷的包少了部分内容,而且比较有规律。于是我把截获的数据中分析出来的数据加在了xsupplicant的发送md5 hash过的密码的数据包之后。终于认证成功了,但是没办法保持连接,连接30秒钟之后就会断线。

  我到网上找到mystar的代码,这也是一个学生写认证程序。分析他的代码后开始把认证后发送echo包以保持连接的功能添加到xsupplicant中。中间出现了一次插曲,我突然发现我的程序突然连认证都不能了,而且连认证请求都回应。日志中是不断的超时,我以为是多次认证尝试不成功交换机把我给屏蔽了。

  后来听说网络中心的同学说是升级了交换机,对非锐捷客户端的审查更加严格了。而且这时我看了mystar的代码发现我截包时漏掉了一个关键的包。于是我在xsupplicant中找定义标注组播地址的地方改成了锐捷私有的组播地址,并且把配置文件中的静态mac去掉。同时在其他的每个xsupplicant的回应包还有start-frame中都加上了锐捷的指纹。这样交换机,又有了回应,还是认证成功很快断线。我还到网络中心的同学那里看了认证系统的日志,上面写着“未使用锐捷客户端”的字样。

  我把mystar中的代码一点点地添加到xsupplicant中,由于标准根本没有定义类似的回应保持连接的机制,而是认证设备中可以根据需要向客户端发送需要认证的请求。所以需要改动较多的地方。还要获取从交换机回应的认证成功包中提取保持连接用的类似会话id的一组数字。正好xsupplicant按照标准完全实现了状态机,而且还有时钟机制1秒tick一次。所以只需要简单的代码就可以利用状态机触发echo包的函数了。

  经过数次的调试,终于在一次认证时候连接再也没有中断。我终于可以上网了!

作者: Bymaunte   发布时间: 2007-07-27

厉害,我就没有那么幸运了

作者: haoyue21   发布时间: 2011-01-19

我们用的华为的

作者: zhchi777   发布时间: 2011-01-19

嗯。。。。。。。。。。。。。。。

作者: corlos   发布时间: 2011-01-19