[*] Client: Start.

[1] Server: Request Notification!
[1] Client: Response Notification.
[2] Server: Request Identity!
[2] Client: Response Identity.
[3] Server: Request MD5-Challenge!
[3] Client: Response MD5-Challenge.
[4] Server: (H3C private data)
[4] Server: Success.

802.1x

目前国内很多大学的校园网安装了基于802.1X认证协议的设备,但是包括华为、实达、锐捷、中兴、星空急速等在内的几家公司全都不提供802.1X客户端的Linux版本,而且…



以上是Ubuntu中文wiki发现的坏消息,好在出现了同学们分析协议(iNode协议逆向研究初步入门by tsy),重写移植的客户端,方便了我们的学(zhe)习(teng)


伟大的802.1x开源客户端项目


1、 njit8021xclient
2、 H3C 802.1x Compatible Client


Openwrt



openwrt是嵌入式设备上运行的linux系统。 OpenWrt 的文件系统是可写的,开发者无需在每一次修改后重新编译,
令它更像一个小型的 Linux 电脑系统,也加快了开发速度。 你会发现无论是 ARM, PowerPC 或 MIPS 的处理器,都有很好的支持。 并且附带3000左右的软件包,用户可以方便的自定义功能来制作固件。 也可以方便的移植各类功能到openwrt下。



从源码编译


njit-client on openwrt


【详细教程】编译openwrt + njit-client 1.3,通过iNode认证


njit-client在Openwrt平台交叉编译安装傻瓜化步骤(图文)


H3C 802.1x Client For OpenWrt 用于OpenWrt的H3C 802.1x认证客户端


解决编译过程中的openssl动态链接库问题


刷固件


我有一个精简的hg255d固件,安装完后还有11.MB的空间,方便以后再折腾更多的软件。


lintel的u-boot,网线连接,清空浏览器缓存(防止自动跳转),按下复位键(Rest)再开机,稍等连上电脑出现连接图标,打开192.168.1.1便出现以下界面。


hg255


然后就按部就班选择固件,点升级,自动刷入重启,几分钟后就能重新连上。


hg255


默认密码登陆,按照提示设置好ssh密码,network>interface>WAN>Edit>Advance Setting>Override MAC address设置lan覆盖MAC


安装软件包


附件里有编译好的客户端luci-app-x3c8021xramips.ipk 和依赖包libpcap_1.5.3-1_ramips_24kec.ipk


以上软件包均仅支持ramips的cpu,hg255d的r302t在支持范围内。


使用WinSCP的SCP模式连接路由器,将两个软件包上传到/root/目录


802.1x


使用快捷键Crtl+P打开PuTTy,ssh登陆,然后使用以下命令按顺序安装软件。


opkg install libpcap_1.5.3-1_ramips_24kec.ipk
opkg install luci-app-x3c8021xramips.ipk

如果安装的时候出现提示架构不兼容的情况,按照以下配置使得opkg可以兼容安装。 编辑\etc\opkg.conf在文件末尾添加


arch all 100
arch ralink 200
arch ramips 300
arch ramips24kec 400

inode


至此安装完成,重启路由器,在network>x3c8021x便可打开设置页面,以下是我的配置,实际使用新版密钥,可以兼容inode 7.0


inode


实现连接日志查看


LuCI采用了MVC三层架构,同时其使用Lua脚本开发,所以开发LuCI的配置界面不需要编辑任何的Html代码,如果不需要修改视图(view),就不用涉及其他层面。


Luci的API文档


entry(path, target, title=nil, order=nil)

第一个参数是访问的路径,例如{“test”, “hehe”, “2333”}就可以在http://192.168.1.1/cgi-bin/luci/test/hehe/2333访问,在后台添加就需要类似{“admin”, “status”, “syslog”}的参数,在status->syslog里面显示菜单。


第二个参数是目标,有三种



  1. 直接制定函数,使用call(function)

  2. 访问指定的页面例如template(“myapp/index”)直接访问/usr/lib/lua/luci/view/myapp/index.html

  3. 调用模块,使用cbi(“myapp/index”)调用`/usr/lib/lua/luci/model/cbi/myapp/index.lua在这个模块再分发各种请求


其他两个参数显而易懂,一个显示名称,一个显示次序(非必需)。


照着葫芦画瓢,参考文档在控luci wiki制器/usr/lib/lua/luci/controller/admin/status.lua中尝试着添加这么一个一个入口.


function index()
entry({“admin”, “status”}, alias(“admin”, “status”, “overview”), (“Status”), 20).index = true
entry({“admin”, “status”, “overview”}, template(“adminstatus/index”), (“Overview”), 1)
entry({“admin”, “status”, “iptables”}, call(“actioniptables”), (“Firewall”), 2).leaf = true
entry({“admin”, “status”, “routes”}, template(“adminstatus/routes”), (“Routes”), 3)
entry({“admin”, “status”, “syslog”}, call(“actionsyslog”), (“System Log”), 4)
entry({“admin”, “status”, “dmesg”}, call(“actiondmesg”), (“Kernel Log”), 5)
entry({“admin”, “status”, “processes”}, cbi(“adminstatus/processes”), (“Processes”), 6)
entry({“admin”, “status”, “x3c8021x”}, call(“x3c8021xlog”), (“x3c8021x”), 7)

–[[entry({“admin”, “status”, “realtime”}, alias(“admin”, “status”, “realtime”, “load”), _(“Realtime Graphs”), 7)]]–

–[[省略一段代码,lua的行注释好像就是这么用吧]]–
end

call(function)引用声明的一个函数


function action_syslog()
local syslog = luci.sys.syslog()
luci.template.render(“admin_status/syslog”, {syslog=syslog})
end
–[[照着葫芦画瓢,exec(command)执行一段shell命令,并将命令输出的结果作为返回值返回,依此我们得到日志文件的内容啦,当然根据MVC思想,照样使用原来的视图模板]]–
function x3c8021x_log()
local x3clog=exec(“cat /tmp/log/x3c8021x.log”)
luci.template.render(“admin_status/syslog”, {syslog=x3clog})
end

因为Luci是随机启动的,接下来需要重启路由使得修改生效, 不过运行的时候出现了问题,这是一个空函数。


/usr/lib/lua/luci/dispatcher.lua:448: Failed to execute call dispatcher target for entry ‘/admin/status/x3c8021x’.
The called action terminated with an exception:
/usr/lib/lua/luci/controller/admin/status.lua:56: attempt to call global ‘exec’ (a nil value)
stack traceback:
[C]: in function ‘assert’
/usr/lib/lua/luci/dispatcher.lua:448: in function ‘dispatch’
/usr/lib/lua/luci/dispatcher.lua:195: in function </usr/lib/lua/luci/dispatcher.lua:194>

所以使用函数的时候需要加上模块名


local x3clog=luci.util.exec(“cat /tmp/log/x3c8021x.log”)

重启的时候正好出现不能启动连接的问题,在页面重启之后就看到了日志记录的过程


log


接下来要在X3C8021x的页面添加日志查看的链接\usr\lib\lua\luci\model\cbi\x3c8021x.lua照葫芦画瓢,添加一个分部,section是和配置文件映射的,所以只能继续沿用。


s = m:section(TypedSection, “adv_set”, translate(“Log”))
s.anonymous = true

l = s:option(Value, “log”, translate(“Auth Log”))
l.template = “x3c8012x”
l.nocreate = true

\usr\lib\lua\luci\view\添加一个x3c8012x.html视图模板, 视图模板也有执行脚本,所以模型(model)调用的时候也能处理显示数据


<div>

<pre>
…<%=luci.util.exec(“tail -n 20 /tmp/log/x3c8021x.log”) %>
<!– tail 是常用的linux命令, tail -n [num]显示文件指定倒数行数的文字 –>
</pre>
</div>
<a class=”cbi-button” href=””>Refresh</a>

从此页面可以显示刷新日志信息,关于什么json,实时显示什么的以后再完善吧


802.1x


更新


调整启动次序


重启路由器的时候,还没有获取到MAC就启动x3cilent就会出现问题。


log


/etc/init.d/x3c8021x 修改START=50START=99,这是启动脚本的优先级,不能超过100.


//////////////////////////////////


////////// 下载1:附件 //////////


////////// 下载2:附件 //////////


/////////////////////////////////