H3C Lite轻量级校园网认证Linux客户端(For SHNU)

2014年7月15日Update:
代码已完全重构,使用纯C编写。
项目主页:github.com/gmsj0001/h3clite

7月18日Update:
添加OpenWRT的UCI与LuCI控制界面(基于netifd,适用于AA及以上版本,不适用Backfire),如图。详情见github。

H3C_LuCI_20140718202919

—————————————————————————————————————————-

H3C Lite 轻量级H3C 802.1x校园网认证Linux客户端(SHNU 2013协议版本)

====特点====

轻量精简,单文件,源代码5K,编译后仅10K。使用原生RAW socket,无需安装python(YaH3C与OH3C)、libpcap(njit-client)等任何支持库。方便阅读,同时非常方便部署到路由器中。

用法:h3clite username password [interface]

本程序只负责认证,认证成功后请运行dhclient或udhcpc手动获取IP地址。

====编译====

桌面环境:
gcc h3clite.c -std=c99 -o h3clite

OpenWRT:
1、下载所需版本与硬件的交叉编译工具链(以版本12.09,硬件RG100A为例):http://downloads.openwrt.org/attitude_adjustment/12.09/brcm63xx/generic/OpenWrt-Toolchain-brcm63xx-for-mips-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2
2、./toolchain-mips_gcc-4.6-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-gcc h3clite.c -std=c99 -o h3clite

====定制====

本项目适用于SHNU 2013版协议。欢迎有技术基础的朋友fork项目以定制自己学校的版本。一些要点:
1、大部分情况只需修改文件末尾的eap_handle_XXX函数。对于不同版本的iNode,请用wireshark抓包得到新的数据替换eap_handle_identity中的base64字串。这部分的算法可参考njit-client。
2、如代码所示,SHNU的MD5 Challenge实际上只是个XOR,需要MD5算法的可从njit-client中粘一个过来。
3、使用多播方式触发EAPOL请将s_broadcast_addr修改为01-80-c2-00-00-03。
4、某些协议会使用其它的Request type,如用编号7的ALLOCATED代替MD5,需要修改authentication中间相应部分。

16 Replies to “H3C Lite轻量级校园网认证Linux客户端(For SHNU)”

  1. 你好, 我是 Wine 的开发者, 我想帮助国内大学生解决校园网认证的问题, 其中一种途径就是用wine来支持部分校园网客户端项目, 这里是目前的进展: http://code.google.com/p/wine-winpcap-wrapper/

    我从你的博客看到, 你们学校的校园网客户端是基于winpcap的, 正好是我要研究的类型, 请问可不可以发送一份windows版的校园网客户端给我学习研究? (最好是xp和win7都发送).

    我在 http://xxb.shnu.edu.cn/Default.aspx?tabid=397 搜到了下载链接, 但是非校园网无法下载.

    谢谢!

    1. 我们的校园网客户端为华为的H3C官方客户端,版本3.6。H3C官方客户端并非基于winpcap,其有自己的驱动。在Windows下开发第三方兼容客户端一般会用到winpcap,因为Windows不支持RAW SOCKET编程。你的项目似乎是打算将winpcap移植到linux上?我觉得你似乎没有必要进行这个研究,因为winpcap原本就是unix上的libpcap的Windows移植版。Linux支持RAW SOCKET编程,另外也可以使用libpcap进行校园网的802.1x认证。如果你对校园网感兴趣,可以下载我在文中提到的两个已经很成熟的项目代码研究。

  2. Hi gmsj0001,

    谢谢你的回复.

    先解释一下为什么需要把 winpcap 移植到 linux 上:
    1. winpcap 的packet.dll的导出函数是linux上的libpcap没有的
    2. 虽然winpcap的wpcap.dll的导出函数和libpcap的导出函数是一样的, 但是windows版的客户端无法在linux下运行.

    我的项目的目的就是让不懂反汇编不懂逆向协议的朋友也可以直接通过wine运行他们学校的windows版的校园网认证客户端.

    以 dr.com 为例, 这款校园网认证客户端有十几个变种, 在几百个学校中使用, 目前有的已经可以通过我的项目运行在wine上了. 而如果要一个个去分析协议, 恐怕花的人力更多, 并且一旦学校升级协议, 就不得不重新分析, 而wine的方案就不会担心协议变动的问题.

    你的项目很有价值, 加油!
    多多交流!

    1. 懂了,对付基于winpcap的dr.com系列客户端。
      由于我个人是linux小白(此项目是我迄今惟一的一次在linux下的程序),所以帮不上太大的忙。不过幸好winpcap是开源的,你大概需要读一遍Packet.dll的全部代码(wpcap.dll是调用packet.dll的),然后把Windows下交给驱动实现的部分改为由RAW SOCKET实现。如果dr.com没有直接调用Packet.dll而只调用了wpcap.dll那么只重新编译wpcap.dll即可。
      不好意思上面只是妄加猜测,毕竟linux移植这方面完全不懂,而我的项目是分析协议的(这方面是我的强项),估计对你的项目也没有很大帮助,顿时觉得比起你说的那些变种客户端,还算比较遵循802.1x标准的H3C客户端简直弱爆了

    2. 你的思路是对的, 我已经基本上完成winpcap的移植了, 不过我没有用RAW SOCKET实现, 而是直接用libpcap的api来模拟packet.dll的api (换句话说, 把windows上winpcap干的事情反过来干了).
      我现在最需要的是, 尽可能找到各种各样的基于winpcap的校园网客户端进行测试, 确保我的实现无误, 并顺便修复掉wine本身的bug, 最好能找到仍然在学校里的朋友帮忙测试. 我通过google快讯每天收集”linux校园网客户端”这组关键词, 发现了你的博客, 一开始以为你们学校的原版客户端就是基于winpcap的, 所以就在这里留言了.

      以后多多交流 😉

    3. Hi rAYz, 你好!

      谢谢你提供的信息, 闪迅也是我研究的对象, 不过闪迅比dr.com还麻烦, 正如你说的, 他需要安装一个sys文件, 这个文件是一个内核模块, 作用是提供pppoe认证协议, 要在wine下支持工作量非常大, 但是如果闪迅只是对用户名和密码动手脚, 但在协议层没有做改动, 那么我们可以在linux下用标准的pppoe拨号工具去模拟windows下的rasman.dll的api, 而用户密码的编码仍然交给闪迅客户端去做, 这样无须破解编码方式也能在linux下支持闪迅.

      我已经把你提供的信息收集追加到 http://code.google.com/p/wine-winpcap-wrapper/wiki/WinpcapBasedAuthClients , 非常感谢!

      希望和你保持联系, 多多交流!

      我的邮箱是 fracting AT gmail DOT com.

      搭车借博主的空间做个广告, 希望博主不介意 🙂
      如果有其他朋友通过google看到这篇文章, 并且有通过wine或通过reactos运行校园网客户端的需求, 欢迎和我联系, 共同学习交流!

      谢谢博主的文章, 哈哈 😉

    1. 哈哈,我最开始盯上的就是你的OH3C,结果我的wrt54g装不下python-mini,还在你那儿留个个言问怎么精简python-mini呢,后来把njit和yah3c的代码读了遍,发现也不是太难,就试着自己写了个。不过linux用的很烂,就这样将将就就用了。。。

    1. 我没打安装包 直接linux下编译的可执行文件上传到路由器上用的

  3. 您好,我是中山大学的菜鸟,我现在也在研究这个问题,(貌似我学校也是用这个的),最近在研究用winpcap完成这个东西,不知道您能否发一下您的源码?多谢多谢

  4. 在网上找SHNU H3C发现了这篇日志,请教一下lz在openwrt里H3C和ss可以一起使用吗?即校园网的流量再经过ss做转发?

    1. ss是嘛玩意?如果是在说shadowsocks,需求在外网通过校园网ip上cnki的话,那么理论上是可以的,而且也用不着上ss,直接下openssh-server通过ssh也行

Leave a Reply

Your email address will not be published. Required fields are marked *