Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
WeiMXi opened this issue Mar 22, 2019 · 27 comments
Open

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

WeiMXi opened this issue Mar 22, 2019 · 27 comments

Comments

@WeiMXi
Copy link

WeiMXi commented Mar 22, 2019

我们学校是锐捷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
Copy link
Owner

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

@WeiMXi
Copy link
Author

WeiMXi commented Mar 22, 2019

抱歉刚刚没有贴上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
Copy link
Author

WeiMXi commented Mar 22, 2019

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

@nature2608
Copy link

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

@updateing
Copy link
Owner

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

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


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

@WeiMXi
Copy link
Author

WeiMXi commented Mar 22, 2019

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

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

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

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

@updateing
Copy link
Owner

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

@WeiMXi
Copy link
Author

WeiMXi commented Mar 23, 2019

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

[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
Copy link

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

@Droid-MAX
Copy link
Contributor

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

@WeiMXi
Copy link
Author

WeiMXi commented Mar 23, 2019

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

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

@WeiMXi
Copy link
Author

WeiMXi commented Mar 23, 2019

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

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

@nature2608
Copy link

checkv4.c里面array数组

@WeiMXi
Copy link
Author

WeiMXi commented Mar 23, 2019

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
Copy link

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

@ysc3839
Copy link
Contributor

ysc3839 commented Mar 23, 2019

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

@WeiMXi WeiMXi changed the title 交叉编译,成功运行后提示egmentation fault 交叉编译,成功运行后提示Segmentation fault Mar 23, 2019
@Droid-MAX
Copy link
Contributor

@ysc3839 已star!

@WeiMXi
Copy link
Author

WeiMXi commented Mar 23, 2019

在这里 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
Copy link
Author

WeiMXi commented Mar 29, 2019

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

  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
Copy link
Contributor

ysc3839 commented Mar 29, 2019

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

@jinchengll
Copy link

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

@WeiMXi
Copy link
Author

WeiMXi commented Mar 11, 2021

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

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

@Dark-Existed
Copy link

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

@jinchengll
Copy link

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

@WeiMXi
Copy link
Author

WeiMXi commented Mar 13, 2021

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

@Dark-Existed
Copy link

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

感谢 麻烦你了

@WeiMXi
Copy link
Author

WeiMXi commented Mar 13, 2021

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants