Closed X1aomu closed 7 years ago
根据 MiniEAP 现在的报文处理方式走一遍,可以发现你抓包的第二个字段长度不正确:
0010 01 08 03 02 01 08 00 00 13 11 00 00 00 00 13 11 ................ 0020 00 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .I.............. 0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
但是在 0x49 个字节过后并没有新的 00 00 13 11 的 magic 出现,因此解析过程不会继续,也就找不到后面 00 00 13 11 01 00 ff ff 37 77 ... 这里的心跳 key.
不清楚为什么会出现这种情况,或许是我对 0x00 这个类型的字段理解还是不对。
可以尝试把 0x00 类型的解析方式改为与需要忽略长度信息、主动探测长度的 0x01 一致:
diff --git a/packet_plugin/rjv3/packet_plugin_rjv3_prop.c b/packet_plugin/rjv3/packet_plugin_rjv3_prop.c
index 32a6c28..3829629 100644
--- a/packet_plugin/rjv3/packet_plugin_rjv3_prop.c
+++ b/packet_plugin/rjv3/packet_plugin_rjv3_prop.c
@@ -174,11 +174,10 @@ RESULT parse_rjv3_buf_to_prop_list(LIST_ELEMENT** list, uint8_t* buf, int buflen
if (memcmp(_tmp_prop->header2.magic, _magic, sizeof(_magic)) == 0) {
/* Valid */
- if (_tmp_prop->header2.type == 0) {
- /* 0x0 prop's len does not include HEADER2 */
- _content_len = _tmp_prop->header2.len;
- } else if (_tmp_prop->header2.type == 1) {
- /* Type 0x1 means there is no length info, we have to search for next 00 00 13 11 */
+ if (_tmp_prop->header2.type == 0 || _tmp_prop->header2.type == 1) {
+ /* Type 0x0 and 0x1 means there is no accurate length info,
+ * we have to search for next 00 00 13 11
+ */
uint8_t* _next_magic = find_byte_pattern(_magic, sizeof(_magic),
buf + _read_len, buflen - _read_len);
_content_len = _next_magic ? (_next_magic - (buf + _read_len)) : buflen - _read_len;
结果如下
[2017/9/8 13:59:13][I] ========================
[2017/9/8 13:59:13][I] MiniEAP 0.91已启动
[2017/9/8 13:59:13][I] 正在查找认证服务器
[2017/9/8 13:59:13][W] 第二 DNS 地址获取错误。若认证失败,请用 --fake-dns2 指定第二 DNS 地址
[2017/9/8 13:59:13][E] 无法从 /etc/mtab 获取根分区挂载设备信息,请使用 --fake-serial 选项手动指定硬盘序列号: Inappropriate ioctl for device (25)
[2017/9/8 13:59:18][I] 正在查找认证服务器
[2017/9/8 13:59:18][W] 第二 DNS 地址获取错误。若认证失败,请用 --fake-dns2 指定第二 DNS 地址
[2017/9/8 13:59:18][E] 无法从 /etc/mtab 获取根分区挂载设备信息,请使用 --fake-serial 选项手动指定硬盘序列号: Inappropriate ioctl for device (25)
[2017/9/8 13:59:20][I] 计费通知:
[2017/9/8 13:59:20][I] 您当前使用的服务为有线1x上网;
[2017/9/8 13:59:20][I] 正定时发送 Keep-Alive 报文以保持在线……
[2017/9/8 13:59:20][I] 认证成功
顺注:我看到你在 MentoHUST 那边提到 MAC 地址问题,这个已经在其他 issue 里有过讨论了。MiniEAP 支持自动获取并填充 MAC 地址,如果给其他人认证仍然提示 MAC 地址被修改,可能是字段标识有变化,还是得看看包。
@updateing 照你说的改果真心跳没有问题了:)
另外,MAC 我这边在极少样本测试下还没有出现问题,提出问题的是这位 @shanzhaozhen
我这边MAC没有问题了,主要是我漏看了一个地方还需要替换MAC地址,现在我这是不能访问外网 @Xiaomu0
@X1aomu 我也有不能心跳的问题,能否帮我解决下?
我修改过一个适用我学校的 mentohust,现在想试试 minieap,几经探索,修改字段后现在 minieap 已经可以认证成功,但心跳包那里出了问题,
以上是一次成功后被掉线后再第二次认证的日志。 但是我用 Mentohust 的时候,心跳包是没有问题的,而用 minieap 出现以上错误且心跳包没有发出去。 这是用 minieap 认证时服务器发回的 success 包:
这是用 mentohust 认证时服务器发回的 success 包:
对比了下,基本是相似的,而且 00003111 字段也都存在,那么问题出在哪?