这是一个实现了标准 EAP-MD5-Challenge 算法的 EAP 客户端,支持通过插件来修改标准数据包以通过特殊服务端的认证。目前带有一个实现锐捷 v3 (v4) 算法的插件。本插件的认证算法来自 Hu Yunrui 的 MentoHUST 项目,在此表示感谢!
模块化设计
可在 config.mk
中直观选择所需模块。如需添加模块,直接复制一份现有的 minieap.mk
并按需修改即可。
网络帧收发由插件模块完成
可根据平台差异使用不同的插件。目前提供 libpcap
和 Raw Socket 两种插件。前者兼容性好,但需链接 libpcap
,体积较大;后者不需额外动态库,但只能在 Linux 上使用。可选择任意个模块参与编译,但运行时只能选取其中之一来使用。
数据包修改同样由插件完成
可以在不修改主要认证流程的情况下适配各种环境。可以启用多个插件,也可将一个插件启用多次。程序会让标准 EAP 算法生成的数据包按照命令行中 --module
参数的顺序让数据包流经这些插件。目前提供一个锐捷 v3 认证算法插件和一个打印流经的数据包大小的示例插件。
所有数据包生成逻辑均采用结构体对缓冲区进行读写,拒绝 magic number 从我做起!
编辑 config.mk
,选择所需要的模块。
在以 if_impl
开头的模块中,Linux 环境建议只选择 if_impl_sockraw
模块,其他平台建议只选择 if_impl_libpcap
模块。
在以 packet_plugin
开头的模块中,请按需要选择。
注:若选择 if_impl_libpcap
,将自动添加 -lpcap
选项。
本程序需要使用 getifaddrs
。
如果您的平台没有提供此函数,可自行寻找需要的实现,并在 include/
中添加 ifaddrs.h
,在 util/ifaddrs/
目录中添加必要的 C 文件,最后在 config.mk
中选中 ifaddrs
模块即可。
如果服务器消息乱码,可将 config.mk
中的 ENABLE_ICONV
置为 1.
若平台未提供iconv相关函数,需手动链接 libiconv
库。
执行 make
即可在根目录下编译出可执行文件。
注1:如需要交叉编译,可参考 config.mk
中的示例。
注2:如需要链接外部库,请在 COMMON_CFLAGS
、COMMON_LDFLAGS
、LIBS
中加入合适的 -I -L -l
等选项。
具体选项请参阅 minieap -h
的输出。这里列出必需的几个选项。
-u 用户名
-p 密码
-n 网卡名
默认的网络帧收发模块是 if_impl_sockraw
。如果要使用其他模块,如 libpcap
,则必须指定 --if-impl libpcap
。
默认不使用任何数据包修改器,将只会发送单纯的标准 EAP 数据包。 如需使用锐捷认证,则必须指定 --module rjv3
。 可以指定多个 --module
参数,程序会按参数的顺序让数据包流经这些插件。
参数格式支持如下几种:
-u myname
--username myname
注意:暂不支持 -umyname
这种形式,这在插件的命令行解析中将带来错误。
示例:在 en0 上使用锐捷认证,以 libpcap
作为网络帧收发模块,并且在数据包流经锐捷认证插件前后都打印出数据包的大小:
minieap -u 201000000 -p 15000000000 -n en0 --module printer --module rjv3 --module printer --if-impl libpcap
本项目刚成立不久,虽然有过测试,但无法保证高可靠性。欢迎大家提出意见,谢谢!
非常感谢 HustMoon 工作室以及 Hu Yunrui 同学对这个领域做出的贡献!