网卡选择
不同于windows上,大部分的网卡都支持软AP ,linux下的网卡需要支持mode master的才可以做软AP 。具体识别方法如下
1、iwconfig识别
1
2
3iwconfig wlxec888fbd5d61 mode master
Error for wireless request "Set Mode" (8B06) :
SET failed on device wlxec888fbd5d61 ; Invalid argument.
2、iw识别
上面的操作失败,证明不支持。再进行进一步的验证,有些新的网卡用的是mac80211 framework,对于这些网卡的话,用iwconfig来测试它是否支持master模式是行不通的。
因为他们是使用新的 nl80211接口在用户空间通信的。再使用iw命令进行测试:
1
2
3
4
5
6
7
8
9
10
11[root@localhost ~]$ sudo iw list
........略........................
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* monitor
* mesh point
* P2P-client
* P2P-GO
如果「Supported interface modes」中有「AP」的话,那么恭喜你,你的无线网卡可以架设虚拟AP 。如果没有则不支持。
3、驱动识别
1
2
3
4
5
6
7
8
9
10
11root@XuQi:~/proj/Private# ethtool -i wlxec888fbd5d61
driver: rtl8192cu
version: 4.15.0-60-generic
firmware-version: N/A
expansion-rom-version:
bus-info: 2-6:1.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
例如上面的示例中使用的驱动为rtl8192cu,通过http://wireless.kernel.org/en/users/Drivers AP模式支持的驱动列表里的查找AP项为yes,证明其支持。
即然如此,如何在未购买网卡前选择一款一定支持的网卡呢?wireless.kernel.org也给我们提供了一个方法 ,通过http://wireless.kernel.org/en/users/Devices 硬件列表
(该页按pci、usb、pcmcia接口类型做了区分,点开相应的类型即可查看具体的硬件)。当然,这个表里列出的并不完全,也并不能保证是最适合做软AP的硬件 。是否识合请参查看上面的三个方法。
编译hostapd
编译依赖libnl-3.2.25
编译依赖openssl
编译hostapd
hostapd-rtl871xdrv补丁1git clone http://www.github.com/pritambaral/hostapd-rtl871xdrv
1
2
3
4
5
6
7
8
9
10
11Configuration file: hostapd.conf
drv->ifindex=4
l2_sock_recv==l2_sock_xmit=0x0x1130410
ioctl[SIOCSIWMODE]: Invalid argument
Could not set interface to mode(3)!
Could not set interface to master mode!
rtl871xdrv driver initialization failed.
wlxec888fbd5d61: interface state UNINITIALIZED->DISABLED
wlxec888fbd5d61: AP-DISABLED
wlxec888fbd5d61: CTRL-EVENT-TERMINATING
hostapd_free_hapd_data: Interface wlxec888fbd5d61 wasn't started
这个问题的出现是由于你的kernel内核没有配置对wifi的master模式的支持(即对AP热点的支持),解决这个问题的办法就是用make menuconfig打开图形界面,然后选择IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)这个选项;这个选择的地址可以参考WG217 wifi模块RTL8811CU的移植(linux)这篇博客里面的第三部分:RTL8821CU驱动所需的支持中的第2小点:master的选项所在位置有详细的讲解。
编译wpa_supplicant
添加
1
2
3
4CFLAGS += -I/home/xuqi/hostadp/build/include/libnl3
LIBS += -L/home/xuqi/hostadp/build/lib
CFLAGS += -I/home/xuqi/hostadp/build/include/
编译错误,注释DBUS
1
2
3
4
5
6# Add support for new DBus control interface
# (fi.w1.hostap.wpa_supplicant1)
#CONFIG_CTRL_IFACE_DBUS_NEW=y
# Add introspection support for new DBus control interface
#CONFIG_CTRL_IFACE_DBUS_INTRO=y
启动:1sudo ./wpa_supplicant -i wlxec888fbd5d61 -c ./wpa_supplicant.conf -B
扫描:1
2
3sudo wpa_cli -i wlxec888fbd5d61 scan
sudo wpa_cli -i wlxec888fbd5d61 scan_result
sudo wpa_cli -i wlxec888fbd5d61 add_network
连接:
如果要连接加密方式是[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] (wpa加密),wifi名称是name,wifi密码是:psk。
1
2
3sudo wpa_cli -i wlxec888fbd5d61 set_network 0 ssid '"dev-xu"'
sudo wpa_cli -i wlxec888fbd5d61 set_network 0 psk '"xuqi9999"'
sudo wpa_cli -i wlxec888fbd5d61 enable_network 0
保存连接:1sudo wpa_cli -i wlxec888fbd5d61 save_config
断开连接:1sudo wpa_cli -i wlxec888fbd5d61 disable_network 0
分配IP:1udhcpc -i wlxec888fbd5d61 -s /etc/udhcpc.script -q
Soft-blocking
输出到sudo rfkill list显示您的网卡是”soft-blocked”。
当无线卡通过内核发信号通知switch-off时,可能会发生这种情况。
请尝试以下步骤:
在终端中运行:sudo rfkill unblock wifi; sudo rfkill unblock all
重新运行sudo rfkill list以确认该卡已被解除阻止。
重启
再次重新运行sudo rfkill list以确认已保留的解除阻塞。
重新运行sudo lshw -class network – 您现在应该看到内核已识别(或不识别)无线卡。
如果已识别无线内核模块(不应该说”unclaimed”),则网络管理器现在应该能够看到您的空闲区域中可用的无线网络。