Fork me on GitHub

mentohust v4版本编译及ipv6的配置教程

一直以来,锐捷都是各大高校主要的上网认证软件。但是,其没有路由器版本,导致许多有wifi需求的同学只能用开电脑用wifi分享软件来建立和使用wifi。这种方式建立的wifi不稳定且费电,而且要自己控制开关机。

由华中科技大学hustmoon开发的mentohust提供了一套上网认证方案,可以完全代替锐捷进行上网认证,同时还支持断线重连等功能。hustmoon开发了windows版本和linux版本的mentohust,同时开源了软件代码(https://github.com/liuqun/mentohust )。代码的开源使得mentohust在路由器上使用成为了可能。但是hustmoon毕业之后,mentohust不再更新,最新的mentohust版本为0.3.4,仅支持锐捷v3加密算法,而最新的锐捷上网认证软件将加密算法升级到了v4。这使得很多升级了锐捷加密算法的学校无法再用mentohust进行认证。同为华科的hyrathb开发了支持v4算法的mentohust,同时也开源了代码(https://github.com/hyrathb/mentohust )。

本文给出作者在ubuntu 16.04上交叉编译hyrathb的mentohust源码,生成用在斐讯K2上的mentohust版本的详细流程。主要参考一篇编译原生mentohust的文章,感谢该文章作者(http://blog.csdn.net/warriorpaw/article/details/7990226 )。同时感谢两位代码提供者。
希望所有从本文获取编译方法的朋友都能尊重开源协议
以下先解释交叉编译的意义,再提供交叉编译的具体步骤
本文所有文件都在文末附件中

交叉编译是什么 ?

我们知道机器只能执行二进制代码而不能执行源代码,所有的源代码都需要转化成二进制可执行文件后机器方可执行。编译就是从源代码(C,C++,JAVA代码)生成机器可执行文件的过程,真正执行这个过程的东西叫编译器。因为不同的机器有着不同的CPU指令集,他们也有着不同的编译器。这些编译器将同一段源代码生成对应机器的二进制可执行文件。

一般情况下编译器是和操作系统绑定在一起的,比如Linux中的gcc,g++等。但是某些机器有空间和性能限制,无法把编译器装在里面,比如路由器。我们可以在PC机上用路由器的编译器对源代码进行编译,生成可以用在路由器上的可执行文件。这种在A机器上生成B机器上的可执行文件的方式就叫交叉编译。作者就是在ubuntu上交叉编译路由器上的openwrt系统可用的mentohustV4版本。

mentohustV4编译准备

完成mentohust的编译需要准备以下硬件和软件:

1
2
3
4
5
6
7
8
9
10
11
12
13
a. 一个装有openwrt系统的且剩余空间超过1MB的路由器(本文使用斐讯K2,刷openwrt教程见上一篇blog)
b. 一台装有linux的电脑(本文为ubuntu16.04)
c. openwrt对应的编译器
(因为K2是remips+mt7620的cpu,所以对应的编译器下载地址为https://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7620/OpenWrt-SDK-15.05.1-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2)
[解压命令tar jxvf OpenWrt-SDK-15.05.1-ramips-mt7620_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2。我嫌名字太长改成了Openwrt-SDK-rampips-mt7620 ]
d. libpcap,这个软件要在编译的过程用到(http://www.tcpdump.org/release/libpcap-1.7.4.tar.gz)
[解压命令tar zxvf libpcap-1.7.4.tar.gz ]
e. mentohust-master.zip(https://github.com/hyrathb/mentohust)
[解压命令unzip mentohust-master.zip ]

(以上三个软件都下载并解压在/home/xxx/目录下)

mentohustV4的编译步骤

主要步骤分成编译环境的配置,libpcap的交叉编译,mentohust的交叉编译,mentohust的使用。

a. 编译环境的配置。这些命令为计算机指定接下来的工作要用到的编译器类型。
打开终端(ctrl+alt+T),输入以下命令(需联网):

1
2
3
4
5
6
7
8
9
10
11
12
sudo -i (这里要输入密码)
apt-get install build-essential bison flex zlib1g-dev libncurses5-dev subversion quilt intltool ruby fastjar unzip gawk autogen autopoint
export PATH=$PATH:/home/xxx/Openwrt-SDK-rampips-mt7620/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin
export CC=mipsel-openwrt-linux-gcc
export CPP=mipsel-openwrt-linux-cpp
export GCC=mipsel-openwrt-linux-gcc
export CXX=mipsel-openwrt-linux-g++
export RANLIB=mipsel-openwrt-linux-uclibc-ranlib
export ac_cv_linux_vers=2.6.24
export LDFLAGS="-static"
export CFLAGS="-Os -s"
export STAGING_DIR=/home/xxx/Openwrt-SDK-rampips-mt7620/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/

b. libpcap的交叉编译:

1
2
3
cd /home/xxx/libpcap-1.7.4
./configure --host=mipsel-linux --with-pcap=linux
make

c. Mentohust的编译:

1
2
3
4
cd /home/xxx/mentohust-master/
sh autogen.sh
./configure --host=mipsel-linux --disable-encodepass --disable-notify --with-pcap=/home/xxx/libpcap-1.7.4/libpcap.a
make

此时交叉编译已完成,mentohust在/home/xxx/mentohust-master/src文件夹中。将电脑和路由用网线连上,把mentohust传到路由上

1
scp /home/xxx/mentohust-master/src/mentohust root@192.168.1.1:/root

d. 启动mentohust:
ssh root@192.168.1.1 登录路由
sudo ./mentohust -u*** -p*** -a1 -d2 -b3 -neth0.2 (参数请参考./mentohust -h)
至此完成编译的应用。
如果出现dhclient无法取得ip,请在路由中输入ipconfig查看网卡。我因为网卡用的eth0(即-neth0.2写成了-neth0)一直没连上。
e. 实现mentohust的开机启动
在/etc/init.d下添加文件launchMento并输入以下内容,保存

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh /etc/rc.common
# /init.d/launchMento
START = 50
start()
{
/root/mentohust -uM201172379 -p******** -a1 -b0 -d2 -neth0.2
}
stop()
{
/root/mentohust -k &
}

修改launchMento权限为755
chmod 755 launchMento
建立链接

1
ln -s /etc/init.d/launchMento /etc/rc.d/S97launchMento

f. 为路由lan配置ipv6。这一方法适用于路由自动获得ipv6地址,通过认证获得ipv4地址的情况。换言之,你要在路由中可以ping通ipv6.google.com

  1. 登录路由。把network中global network options中的ipv6 ULA-Prefix清空
  2. 修改/etc/config/dhcp为
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    config dhcp 'lan'
    option interface 'lan'
    option start '100'
    option limit '150'
    option leasetime '12h'
    option ra 'hybrid'
    option dhcpv6 'hybrid'
    option ndp 'hybrid'
    option ra_management '1'
    config dhcp 'wan6'
    option interface 'wan'
    option dhcpv6 'hybrid'
    option ra 'hybrid'
    option ndp 'hybrid'
    option master '1'

重启路由你就得到了一个开机自启动mentohust的K2路由。

附件链接:http://pan.baidu.com/s/1c2fopWk 密码:t142

No pain, No gain