Ubuntu系统配置Hostapd以及CSI TOOL安装教程

迷你主机配置Hostapd,CSI TOOL

设备: 占美迷你主机(HT770,i7-4500U, Ubuntu 14.04.4 LTS),Intel Wifi Link 5300 。
在这里插入图片描述

实现效果:HT770使用hostapd实现AP的接入功能,手机可以稳定的连接AP,在AP端可以从手机发送来信号中获取CSI数据。

Ubuntu系统安装

1、下载Ubuntu

选择合适的Ubuntu系统,这里选择14.04.4,下载地址如下:

http://old-releases.ubuntu.com/releases/

由于CSI TOOL工具对系统版本的要求,Ubuntu系统只能选择12.04-14.04.4之间的版本。(因为在官网下载比较缓慢,可以选择到镜像网站下载,但是大部分镜像网站只有12.04.6和14.04.6两个版本,所以对于我们而言,要想下载14.04.4,我们只能在官网上下载,这里可以推荐使用迅雷下载,下载速度很快,将如下的下载连接复制,然后在迅雷中新建任务即可)。

在这里插入图片描述

2、刻录U盘

下载ISO to USB (科大信息化中心即可下载),将系统刻录到U盘,(使用前需要将U盘进行格式化)

3、安装Ubuntu

开机后按F11,进入BIOS启动界面,然后选择U盘安装即可,一路傻瓜操作即可。

执行完以上操作后,进入系统执行iw list,查看网卡是否支持AP模式,不出意外,不论你换什么网卡、亦或者是更换系统,都不会支持AP模式,因为你遗忘了一个最重要的一步,安装CSI TOOL。在安装CSI TOOL时,会对网卡驱动继续修改,修改之后,网卡才会支持AP模式,才能成功的开启hostapd。

CSI TOOL安装

(参照连接:http://dhalperi.github.io/linux-80211n-csitool/installation.html)

1、准备工作

安装开发头文件、工具等等:

sudo apt-get install gcc make linux-headers-$(uname -r) git-core

2、构建以及安装修改后的无线网卡驱动

下载CSI TOOL源码(里面包含了驱动修改)

1
2
3
4
5
sudo apt-get install git
CSITOOL_KERNEL_TAG=csitool-$(uname -r | cut -d . -f 1-2)
git clone https://github.com/dhalperi/linux-80211n-csitool.git
cd linux-80211n-csitool
git checkout ${CSITOOL_KERNEL_TAG}

将修改的网卡驱动在现在的内核中进行构建

1
2
3
4
make -C /lib/modules/$(uname -r)/build M=$(pwd)/drivers/net/wireless/iwlwifi modules
sudo make -C /lib/modules/$(uname -r)/build M=$(pwd)/drivers/net/wireless/iwlwifi INSTALL_MOD_DIR=updates \modules_install
sudo depmod
cd ..

3、安装固件

1
2
3
4
git clone https://github.com/dhalperi/linux-80211n-csitool-supplementary.git
for file in /lib/firmware/iwlwifi-5000-*.ucode; do sudo mv $file $file.orig; done
udo cp linux-80211n-csitool-supplementary/firmware/iwlwifi-5000-2.ucode.sigcomm2010 /lib/firmware/
sudo ln -s iwlwifi-5000-2.ucode.sigcomm2010 /lib/firmware/iwlwifi-5000-2.ucode

4、构建log_to_file,一个命令工具,可以将得到的CSI写入到一个文件

1
make -C linux-80211n-csitool-supplementary/netlink

Hostapd安装

1、下载hostapd源码

Hostapd目前最新的代码已经更新到2.9,这里使用2.0版本。下载地址:

http://w1.fi/releases/hostapd-2.0.tar.gz

将下载后的压缩包解压到Home目录下。

2、修改hostapd

对hostapd-2.0/hostapd/src/ap文件夹下的hw_features.c的ieee80211n_check_scan函数进行修改,讲下图红框部分修改为if(0){

在这里插入图片描述

此步骤的意义是实现下图蓝色框中的功能

在这里插入图片描述

3、编译hostapd

打开控制台,执行:

cd hostapd-2.0/hostapd

make clean'

打开hostapd-2.0/hostapd/deconfig文件,

取消CONFIG_DRIVER_NL80211=y的注释

取消CONFIG_IEEE80211N=y的注释(支持802.11n协议)

cp defconfig .config

make

**注意:**在make过程中可能会遇到错误:

fatal error: netlink/genl/genl.h: No such file or directory

执行指令sudo apt-get install libnl-dev

fatal error: openssl/ssl.h: No such file or directory

执行指令sudo apt-get install libssl-dev

4、配置hostapd

1)ifconfig命令查看本机的无线网卡接口名,一般为wlan0,查看hostapd.conf文件中的无线网卡接口是否与本机无线网卡接口名一致,不一致则要修改文件中无线网卡接口名

[

2)修改SSID,可以修改成任何自己想设置的名称

在这里插入图片描述

3)修改本机无线网卡ip地址,即所开启的热点的网关地址

在这里插入图片描述

4)因为要开5ghz的wifi,所以要设置hw_mode=a(如果要开2.4ghz的wifi,设置hw_mode=g)

在这里插入图片描述

5)设置country code

sudo iw reg get

sudo iw reg set US

也可以在文件中设置

在这里插入图片描述

6)设置信道为44信道。

使用sudo iw phy查看合法信道,并在文件中设置

在这里插入图片描述
7)设置使用802.11协议即设置ieee80211n=1

注意:如果ht_capab设置为HT40+,则支持的40M信道只能支持到36、44、52、60这四个信道。(见绿框)

在这里插入图片描述

5、修改/etc/NetworkManager文件夹下的NetworkManager.conf文件

设置managed=ture

注释掉dns=dnsmasq

6、 检查5G信道是否合法可用

使用iw phy查看合法信道,如果显示

在这里插入图片描述

则证明5G信道可以使用。如果出现:

在这里插入图片描述

则证明5G信道不能正常被使用。此时应该使用iwleeprom工具对网卡的EEPROM中的内容进行修改 使得网卡可以支持5G信道

首先下载iwleeprom工具包,

git clone https://github.com/FyHaHa/iwleeprom

将工具包解压并放入home目录下

cd iwleeprom

make clean

sudo make

sudo ./iwleeprom –h(查看各种操作的指令);

sudo ./iwleeprom –o test.b(将网卡eeprom中的内容转存到test.b文件中);

对eeprom进行修改,即可以在windows下使用uedit软件或者Sublime打开test.b文件将下面红框中的对应字段修改为6f0f。保存为test_change.b,具体修改如下:

在这里插入图片描述

执行指令sudo ./iwleeprom –i test_change.b对网卡进行重写。

执行结束后重新启动系统即可。执行完毕后,用iw list查看网卡的5G信道是否可用。

到此为止,安装过程结束,可以使用Hostapd开启热点,使用手机连接热点,然后使用CSI TOOL将CSI数据保存到文件中。


问题

1、更换网卡之后,网卡接口名称从wlan0变成了wlan1,如何将网卡接口名称修改为wlan0?

sudo cp /etc/udev/rules.d/70-persistent-net.rules 70-persistent-net.rules

在这里插入图片描述

打开刚刚复制到home目录下的70-persistent-net.rules,删除里面所有关于wlan的内容,保存退出。

sudo cp 70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules

重启系统即可。

2、错误信息如下:

rfkill: WLAN soft blocked

Could not set interface wlan0 flags (UP): Operation not possible due to RF-kill

rfkill 是一个启用/禁用无线设备的工具,也就是一个无线设备软开关。一般出现这种情况的原因是因为无线设备被关闭,使用rfkill list查看无线设备开关状态。这时候会显示:Soft blocked: yes,这表示无线设备被关闭了,需要通过rfkill unblock wlan来解锁,然后在使用rikill list查看无线设备开关状态。然后使用sudo ifconfig wlan0 up来开启wlan0。

在这里插入图片描述

3、NetworkManage问题总结

开AP时,会存在:

nl80211: Failed to set interface wlan0 into AP mode

nl80211 driver initialization failed.

这种问题很大程度上是因为网卡被内核托管,这时需要对NetworkManager进行修改:

/etc/NetworkManager/NetworkManager.conf文件中的[keyfile]字段之后添加内容为:

unmanaged-devices=mac:XX:XX:XX:XX:XX:XX

其中" XX:XX:XX:XX:XX:XX "为无线网卡MAC地址。这样就可以将网卡设为未托管状态。

**4、Error: failed to update rate sets in kernel module. Could not connect to kernel driver. **

一般来说这是因为内核驱动加载问题,首先查看是否有另外的hostapd尚未关闭,关闭其他的hostapd;如果不行,就直接重启。

如果以上方法不奏效,则拔掉外接的网卡即可。

5、Error: Failed to create interface mon.wlan0: -23 (Too many open files in system). Try to remove and re-create mon.wlan0

无线网卡转换成AP模式后,系统会建立监视接口(mon.wlan0)用来接受处理管理帧。这里错误的原因是因为你开启了多个hostapd, 导致多个监视接口重复建立,所以使用 ps –ef|grep hostapd 指令来查找有关hostapd的进程,然后将这些进行杀死。使用sudo kill PID(进程号)即可。