最近在用python做802.1x的自动化测试,第一步是要完成802.1x拨号.
在编码的过程中遇到到了一个问题,思考了好几天还是没有解决.
问题描述:
在802.1x拨号过程中有一步是一个 MD5-challenge 过程,服务器会发送一个随机码给客户端,客户端要用这个随机码来加密密码然后回发给服务器,服务器再用随机码加密服务器上保存的用户密码加密后于客户端发回来的对比,一致则拨号成功.
例如服务器发过来的随机码是: 296BD6EB2CA90321BBEF5F5F4CFC10EC ,我用这个随机码跟密码进行MD5加密以后得到一个值: d1d5b11f89c390d7ebcb1ec723a9a0c0 ,然后我要将这个值回发给服务器.
疑问:
要从数据包中把这个随机码弄出来,例如包信息中随机码是: \x29\x6B\xD6\xEB\x2C\xA9\x03\x21\xBB\xEF\x5F\x5F\x4C\xFC\x10\xEC,我要提取成为 296BD6EB2CA90321BBEF5F5F4CFC10EC,现在没有好的办法只能通过字符串匹配来做这个事情.勉强的完成了这一步.
提取出来以后用随机码跟密码进行MD5加密后得到的值: d1d5b11f89c390d7ebcb1ec723a9a0c0 ,这个值我直接写成: \xd1\xd5\xb1\x1f\x89\xc3\x90\xd7\xeb\xcb\x1e\xc7\x23\xa9\xa0\xc0 ,然后发回去,结果服务器认为是错误的.
我直接用802.1x客户端拨号一次抓包来看,服务器发下来的随机码从包中看是 296BD6EB2CA90321BBEF5F5F4CFC10EC,但是客户端回发给服务器的并不是d1d5b11f89c390d7ebcb1ec723a9a0c0,这个是否是意味着我用这种方法去提取出来的随机码或者是我直接这样发送加密后的MD5值有问题了?
各位大侠,请帮我看看这个问题吧,这种编码转换让我很头疼,随机码是一个str,要怎么转换成字节码呢? 我读到一个字节码又怎么能转换成str呢? 网上有说 struct 这个库,但是我都只能把 int类型转换成为字节码.
另外我在发送:
ether = dpkt.ethernet.Ethernet(
dst = SERVERMAC,
src = LOCALMAC,
type = 0x888e,
data = '\x01\x00\x00\x23\x02%s\x00\x23\x04\x10\
\xA9\x3A\x77\x8B\x47\x25\x96\xB0\x13\xB7\xB1\xBD\x3E\x4F\x5E\xE4%s'%(p_id,aa))
报错:
Traceback (most recent call last):
File "E:\我的资料\我的代码\项目管理\test\send\802_1x.py", line 82, in
main()
File "E:\我的资料\我的代码\项目管理\test\send\802_1x.py", line 76, in main
\xA9\x3A\x77\x8B\x47\x25\x96\xB0\x13\xB7\xB1\xBD\x3E\x4F\x5E\xE4%s'%(p_id,aa))
ValueError: unsupported format character 'ヨ' (0xffffff96) at index 17
这里该怎么处理?
我是新人,积分不多,希望大家能帮忙解决一下.
2010年10月14日 15:24