updateing / minieap

可扩展的 802.1x 客户端,带有锐捷 v3 (v4) 算法插件支持
GNU General Public License v3.0
514 stars 93 forks source link

交叉编译,成功运行后提示Segmentation fault #39

Open WeiMXi opened 5 years ago

WeiMXi commented 5 years ago

我们学校是锐捷4.99,我使用这里的源码在centos 7 x64上交叉编译了minieap, 再上传到我的路由器(WNDR3800 安装openwrt 18),minieap成功运行,

root@OpenWrt:~# ./minieap -u myname -p myps -n eth1 --module rjv3 --if-impl libpcap --fake-serial AABBCCDDEEFFGG --fake-dns2 10.8.4.4
MiniEAP 0.92.1
Hamster Tian, 2016

[2018/8/16 8:27:55][E] 无法打开配置文件: No such file or directory (2)
[2018/8/16 8:27:55][W] 配置文件解析出错,请注意命令行参数是否完整
[2018/8/16 8:27:55][I]
RJv3 for MiniEAP 0.92.1
V3 校验算法来自 hyrathb@GitHub
Hamster Tian, 2016

[2018/8/16 8:27:55][I] ========================
[2018/8/16 8:27:55][I] MiniEAP 0.92.1已启动
[2018/8/16 8:27:55][I] 正在查找认证服务器
[2018/8/16 8:27:55][I] 正在回应用户名请求
[2018/8/16 8:27:55][I] 正在回应密码请求
[2018/8/16 8:27:55][I] 服务器通知:
Segmentation fault

由于之前的错误输出,我指定了DNS2与序列号,但这似乎无济于事。另外我若不使用rjv3时,则无这样Segmentation fault的输出,仅会回复认证失败。 这似乎是和libpcap相关的问题?

updateing commented 5 years ago

在这里 segfault 的话几乎可以断定是 OpenWrt 自带的 libiconv 有问题导致的。可以在 config.mk 里关闭 ENABLE_ICONV 并打开 ENABLE_GBCONV 再编译尝试。

WeiMXi commented 5 years ago

抱歉刚刚没有贴上config.mk,谢谢您能这么快回复,这是我现在修改后的config.mk文件,

#### Choose/Add your modules here ####
PLUGIN_MODULES := \
    packet_plugin_printer \
    packet_plugin_rjv3

# Linux
#PLUGIN_MODULES += if_impl_sockraw

# macOS / BSD
# PLUGIN_MODULES += if_impl_bpf

# Other OS
 PLUGIN_MODULES += if_impl_libpcap

# This implementation is not included in the code.
# If you need it, add it yourselves.
# PLUGIN_MODULES += ifaddrs

ENABLE_DEBUG  := false
ENABLE_ICONV  := false
ENABLE_GBCONV := true
STATIC_BUILD  := true

# If your platform has iconv_* integrated into libc, change to false
# Affects dynamic linking
LIBICONV_STANDALONE := false

CUSTOM_CFLAGS :=
CUSTOM_LDFLAGS :=
CUSTOM_LIBS +=/root/libpcap-1.8.1/libpcap.a
CC := mips-openwrt-linux-gcc
# Example for cross-compiling
# CC := arm-brcm-linux-uclibcgnueabi-gcc
# ENABLE_ICONV := true
# CUSTOM_CFLAGS += -I/home/me/libiconv-1.14/include
# CUSTOM_LIBS += /home/me/arm/libiconv.a
# PLUGIN_MODULES += ifaddrs
# STATIC_BUILD := true

编译后的文件似乎没有什么变化,输入./minieap -u myname -p myps -n eth1 --module rjv3 --if-impl libpcap --fake-serial AABBCCDDEEFFGG --fake-dns2 10.8.4.4 MiniEAP 0.92.1 依然会有与之前相同的错误输出。

WeiMXi commented 5 years ago

另外我也在编译了在Centos 7上运行的二进制文件,但是总是停留在寻找服务器的状态并退出。这与我曾经尝试的mentohust情况有点类似https://github.com/ivechan/mentohust-SYSU

nature2608 commented 5 years ago

@WeiMXi 你可以直接找sdk再加makelife直接编译,不用单个编译二进制。

updateing commented 5 years ago

OpenWrt 的环境比较复杂,libiconv 的情况也有挺多种,不好说什么配置是最好的。我当时为了避免麻烦,是用 CUSTOM_LIBS 链接了个手动编译的完整版 libliconv……

不确定编码转换这部分是不是仍然有问题,可以尝试把 ENABLE_ICONV 和 ENABLE_GBCONV 都改成 false,这样在打印服务器信息的时候就会不转码直接输出。可能会打印出乱码,但至少应该能用。如果这样仍然不行,可能得抓包分析了。


如果怀疑 libpcap 有问题,也可以考虑使用 sockraw,能用的话可以省掉一个依赖。不过我看你的 config 里把它关掉了,是一开始用它出了什么问题吗?

WeiMXi commented 5 years ago

关于这个我是参考了您在README中的建议,

目前提供 libpcap 和 Raw Socket 两种插件。前者兼容性好,但需链接 libpcap,体积较大;后者不需额外动态库,但只能在 Linux 上使用。可选择任意个模块参与编译,但运行时只能选取其中之一来使用。

_编辑 config.mk,选择所需要的模块。 在以 if_impl 开头的模块中,Linux 环境建议只选择 if_impl_sockraw 模块,其他平台建议只选择 if_impl_libpcap 模块。 在以 packet_plugin 开头的模块中,请按需要选择。 注:若选择 if_impllibpcap,将自动添加 -lpcap 选项。

如果openwrt18也能使用另一个模块的话,明天我会按照您说的依次尝试打开与关闭这些选项。另外刚刚未找到服务器是因为我网络把电脑的连接切换至有线……切换后我在上面提到的https://github.com/ivechan/mentohust-SYSU mentohust的SYSU版本已经能正常认证并上网了。谢谢您这么晚回复,我明天会再次依次尝试打开与关闭这些选项来交叉编译,无论如何现在该休息了,晚安。

updateing commented 5 years ago

OpenWrt 的内核也是 Linux 啊😂sockraw 也是适用的。

WeiMXi commented 5 years ago

我今天直接在我的虚拟机上尝试了一下:

[root@localhost minieap-0.92.1_test]# ./minieap -u myname -p myps -n ens38 --module rjv3 --fake-serial AABBCCDDEEFFS1
MiniEAP 0.92.1
Hamster Tian, 2016

[2019/3/23 10:23:52][E] 无法打开配置文件: No such file or directory (2)
[2019/3/23 10:23:52][W] 配置文件解析出错,请注意命令行参数是否完整
[2019/3/23 10:23:52][I]
RJv3 for MiniEAP 0.92.1
V3 校验算法来自 hyrathb@GitHub
Hamster Tian, 2016

[2019/3/23 10:23:52][I] ========================
[2019/3/23 10:23:52][I] MiniEAP 0.92.1已启动
[2019/3/23 10:23:52][I] 正在查找认证服务器
[2019/3/23 10:23:52][I] 正在回应用户名请求
[2019/3/23 10:23:52][I] 正在回应密码请求
[2019/3/23 10:23:52][I] 服务器通知:
[2019/3/23 10:23:52][I] 使用了非管理员指定的客户端!
[2019/3/23 10:23:52][W] 认证失败 1 次,将在 30 秒或服务器请求后重试……
[2019/3/23 10:24:02][I] 正在回应用户名请求
[2019/3/23 10:24:02][D] 字段格式错误,未发现特征值(偏移量 0xc)
[2019/3/23 10:24:02][W] 认证失败 2 次,将在 30 秒或服务器请求后重试……
[2019/3/23 10:24:05][I] 正在回应用户名请求
[2019/3/23 10:24:05][I] 正在回应密码请求
[2019/3/23 10:24:05][I] 服务器通知:
[2019/3/23 10:24:05][I] 使用了非管理员指定的客户端!
[2019/3/23 10:24:05][E] 认证失败 3 次,已达到指定次数,正在退出……
[2019/3/23 10:24:05][I] MiniEAP 已退出

看来这个minieap的版本不太适用于我们学校……看来暂时没必要研究minieap的交叉编译了……

OpenWrt 的内核也是 Linux 啊😂sockraw 也是适用的。

魔改版没敢试233,谢谢您啦ε=ε=ε=(~ ̄▽ ̄)~

nature2608 commented 5 years ago

这种情况可以把mentohust-sysu里面的客户端校验算法复制到minieap,就可以解决客户端校验问题。

Droid-MAX commented 5 years ago

然而你忽略了minieap的优势所在

WeiMXi commented 5 years ago

然而你忽略了minieap的优势所在

你说的对,我研究了一天交叉编译mentohust,它仍然不能在我的wndr 3800上运行...

WeiMXi commented 5 years ago

这种情况可以把mentohust-sysu里面的客户端校验算法复制到minieap,就可以解决客户端校验问题。

请问具体该如何做,复制那些文件到哪里,有需要删除的吗? 我不是很懂这两个项目中各个文件的作用,这对我很有难度……

nature2608 commented 5 years ago

checkv4.c里面array数组

WeiMXi commented 5 years ago

checkv4.c里面array数组

It works! 谢谢你,这太棒了,现在我该研究那恶心的交叉编译了……

[root@localhost minieap-0.92.1_test2]# ./minieap -u myname -p myps -n ens38 --module rjv3 --fake-serial AABBCCDDEEFFS1
MiniEAP 0.92.1
Hamster Tian, 2016

[2019/3/23 11:26:42][E] 无法打开配置文件: No such file or directory (2)
[2019/3/23 11:26:42][W] 配置文件解析出错,请注意命令行参数是否完整
[2019/3/23 11:26:42][I]
RJv3 for MiniEAP 0.92.1
V3 校验算法来自 hyrathb@GitHub
Hamster Tian, 2016

[2019/3/23 11:26:42][I] ========================
[2019/3/23 11:26:42][I] MiniEAP 0.92.1已启动
[2019/3/23 11:26:42][I] 正在查找认证服务器
[2019/3/23 11:26:42][I] 正在回应用户名请求
[2019/3/23 11:26:42][I] 正在回应密码请求
[2019/3/23 11:26:42][I] 服务器通知:
[2019/3/23 11:26:42][I] 帮助台服务电话:020-84036866(广州),0756-3668500(珠海);邮箱地址:helpdesk@mail.sysu.edu.cn
[2019/3/23 11:26:42][I] 正定时发送 Keep-Alive 报文以保持在线……
[2019/3/23 11:26:42][I] 认证成功
nature2608 commented 5 years ago

同样建议使用sdk加 ysc3839 的makefile进行编译 可以省去很多麻烦的步骤。

ysc3839 commented 5 years ago

建议使用这个 https://github.com/ysc3839/openwrt-minieap 此项目适配了 netifd 的 protocol,可以配合 https://github.com/ysc3839/luci-proto-minieap 在 luci 中配置。 在 Network 中新建一个接口,协议选择 MiniEAP,网络接口设为外网接口。

Droid-MAX commented 5 years ago

@ysc3839 已star!

WeiMXi commented 5 years ago

在这里 segfault 的话几乎可以断定是 OpenWrt 自带的 libiconv 有问题导致的。可以在 config.mk 里关闭 ENABLE_ICONV 并打开 ENABLE_GBCONV 再编译尝试。

OpenWrt 的内核也是 Linux 啊😂sockraw 也是适用的。

checkv4.c里面array数组

太感谢了,目前我更改了nature2608提到的数组,并按照updateing所说更改了config.mk文件,成功交叉编译后在我的WNDR 3800 + openwrt18 上已经完美运行:

root@OpenWrt:~# ./minieap -u myname -p myps -n eth1 --module rjv3 --fake-serial AABB
CCDDEEFFGG --fake-dns2 10.8.4.4
MiniEAP 0.92.1
Hamster Tian, 2016

[2018/8/16 7:53:52][E] 无法打开配置文件: No such file or directory (2)
[2018/8/16 7:53:52][W] 配置文件解析出错,请注意命令行参数是否完整
[2018/8/16 7:53:52][I]
RJv3 for MiniEAP 0.92.1
V3 校验算法来自 hyrathb@GitHub
Hamster Tian, 2016

[2018/8/16 7:53:52][I] ========================
[2018/8/16 7:53:52][I] MiniEAP 0.92.1已启动
[2018/8/16 7:53:52][I] 正在查找认证服务器
[2018/8/16 7:53:52][I] 正在回应用户名请求
[2018/8/16 7:53:52][I] 正在回应密码请求
[2018/8/16 7:53:52][I] 计费通知:
[2018/8/16 7:53:52][I] 您的网络使用费即将到期,请登录我的中大(http://my.sysu.edu.cn)查询具体过期日期。76fcf671
[2018/8/16 7:53:52][I] 正定时发送 Keep-Alive 报文以保持在线……
[2018/8/16 7:53:52][I] 认证成功
root@OpenWrt:~# ping www.baidu.com
PING www.baidu.com (163.177.151.109): 56 data bytes
64 bytes from 163.177.151.109: seq=0 ttl=51 time=4.896 ms
64 bytes from 163.177.151.109: seq=1 ttl=51 time=4.437 ms
64 bytes from 163.177.151.109: seq=2 ttl=51 time=4.523 ms
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 4.437/4.618/4.896 ms

这是我现在的config.mk文件:

#### Choose/Add your modules here ####
PLUGIN_MODULES := \
    packet_plugin_printer \
    packet_plugin_rjv3

# Linux
PLUGIN_MODULES += if_impl_sockraw

# macOS / BSD
# PLUGIN_MODULES += if_impl_bpf

# Other OS
# PLUGIN_MODULES += if_impl_libpcap

# This implementation is not included in the code.
# If you need it, add it yourselves.
# PLUGIN_MODULES += ifaddrs

ENABLE_DEBUG  := false
ENABLE_ICONV  := false
ENABLE_GBCONV := true
STATIC_BUILD  := true

# If your platform has iconv_* integrated into libc, change to false
# Affects dynamic linking
LIBICONV_STANDALONE := false

CUSTOM_CFLAGS :=
CUSTOM_LDFLAGS :=
CUSTOM_LIBS :=
CC := mips-openwrt-linux-gcc
# Example for cross-compiling
# CC := arm-brcm-linux-uclibcgnueabi-gcc
# ENABLE_ICONV := true
# CUSTOM_CFLAGS += -I/home/me/libiconv-1.14/include
# CUSTOM_LIBS += /home/me/arm/libiconv.a
# PLUGIN_MODULES += ifaddrs
# STATIC_BUILD := true

非常感谢大家的帮助! 接下来我想要尝试:

同样建议使用sdk加 ysc3839 的makefile进行编译 可以省去很多麻烦的步骤。

建议使用这个 https://github.com/ysc3839/openwrt-minieap 此项目适配了 netifd 的 protocol,可以配合 https://github.com/ysc3839/luci-proto-minieap 在 luci 中配置。 在 Network 中新建一个接口,协议选择 MiniEAP,网络接口设为外网接口。

以及创建虚拟端口多号多拨

WeiMXi commented 5 years ago

繁忙的一周终于结束了,终于有时间了, 我现在说下我目前的情况,

  1. 通过的@ysc3839 makefile编译的安装包安装后似乎不能正常运行,luci界面会提示“Program exited failed, please check system log”,具体系统日志我没看到相关信息,现在我已经卸载了这个软件包。
  2. 我通过macvlan创建了5个虚拟网卡,然后在luci界面中设置接口与跃点,并在rc.local中写入启动5个对应接口的命令,但是不知为何,写入rc.local的中关于启动minieap进行认证的命令不能执行,或者执行一段时间就会退出,后来我将启动minieap进行认证的命令单独写成一个sh脚本,再在rc.local中运行这个脚本,居然能成功运行,真不知道是什么原理。然后设置相应的负载均衡,我都网速成功翻了6倍!(py5个账号py疼
  3. 我根据https://github.com/daiaji/openwrt-ssr交叉编译openwrt的shadowsocksr安装包安装后不能正常运行,无论是IP路由还是GWF版本。而且安装dnsmasq-full也会报错。这似乎是一个BUGhttps://bugzilla.redhat.com/show_bug.cgi?id=1556888, 这两天打算试一下这个https://github.com/actg/openwrt-dnsforwarder/releases
  4. 今天我刚刚想用UPX压缩一下路由器里面的可执行文件,省省空间,手贱删了busybox,它现在对我而言是一块砖了(真tm快乐)
ysc3839 commented 5 years ago

@WeiMXi 安装后要重启,不然 netifd 不会加载这个协议。

jinchengll commented 3 years ago

@WeiMXi 麻烦打扰一下,请问可以发一份交叉编译好的minieap给我吗?(jinchengll@qq.com)我只是单纯想给路由器使用,交叉编译环境一直报找不到libmpc.so.2文件。

WeiMXi commented 3 years ago

@WeiMXi 麻烦打扰一下,请问可以发一份交叉编译好的minieap给我吗?(jinchengll@qq.com)我只是单纯想给路由器使用,交叉编译环境一直报找不到libmpc.so.2文件。

@jinchengll 我手上有wndr3800和newifi 3的二进制版本,你是什么路由器?不同的路由器可能不能混用,而且我这个改了一些代码以在sysu使用

Dark-Existed commented 3 years ago

@WeiMXi hi 冒昧打扰 我们学校换了新版的认证 我闲鱼看到卖路由器的说 sysu的锐捷认证路由器可以用在我们学校
在您的主页没看到开源出来 可以请求一份修改过的源码吗

jinchengll commented 3 years ago

@WeiMXi 你好,我的路由器是小米路由器mini,MT7620a平台,看了你之前的问题,更改完checkv4中数组的sysu版本应该就是我所需要,如果你手中有交叉编译好的二进制文件可以发一份给我吗?没有的话可以讲源码发送给我吗?非常感谢。jinchengll@qq.com

WeiMXi commented 3 years ago

@Dark-Existed @jinchengll 我先打包了一下以前的文件,简单创建了项目minieap-sysu,二进制文件在release里面,年代久远,可能有疏漏,闲下来会完善一下,你们可以先试试能不能用

Dark-Existed commented 3 years ago

@Dark-Existed @jinchengll 我先打包了一下以前的文件,简单创建了项目minieap-sysu,二进制文件在release里面,年代久远,可能有疏漏,闲下来会完善一下,你们可以先试试能不能用

感谢 麻烦你了

WeiMXi commented 3 years ago

@Dark-Existed @jinchengll 我刚刚更新了一下源码,上传了修改数组后的重新编译的二进制文件。我觉得你们可以先试试x86_linux版本的minieap能不能在你们学校认证成功,再尝试交叉编译到路由器上