作者:良知犹存
在linux开发中wifi是很常见的一个工作,wifi有STA模式和AP模式,今天分享下如何使用工具在Linux中控制wifi。
介绍
今天介绍的是AP和STA的wifi模式控制,AP热点模式使用到了hostapd和轻量级的udhcpd服务端,STA客户端模式用到了wpa_supplicant和轻量级的udhcpd客户端。
AP模式设置
hostapd介绍
hostapd是一个用于创建和管理无线局域网(WLAN)的软件。它允许将计算机或设备转换为独立的无线接入点,使用户可以连接到该接入点并与局域网中的其他设备进行通信。
hostapd的主要功能包括:
1.网络身份验证:hostapd支持各种网络身份验证方法,如预共享密钥(PSK)、扩展认证协议(EAP)等。这些方法可用于验证连接到无线接入点的客户端设备,并确保只有经过身份验证的设备可以访问网络。
2.加密和安全性:hostapd提供了多种加密选项,例如WPA(Wi-Fi Protected Access)和WPA2,用于保护无线网络通信的安全性。它还支持RADIUS服务器进行身份验证和账户管理,增强了网络的安全性。
3.频道选择和管理:hostapd允许管理员选择无线频道以避免干扰,并允许配置其他无线参数,如传输速率、功率控制等。这些功能有助于优化无线网络的性能和稳定性。
4.MAC地址过滤:hostapd支持MAC地址过滤,管理员可以设置允许或禁止特定设备连接到无线网络。这有助于增加网络的安全性,并允许管理员限制网络访问。
5.日志和监控:hostapd可以生成详细的日志记录,以便管理员可以监视无线网络的活动。这些日志可用于故障排除、性能优化和安全审计等目的。
总体而言,hostapd是一个功能强大的软件,适用于构建和管理各种类型的无线网络,包括家庭网络、企业网络和公共场所的无线热点。它提供了广泛的配置选项和安全功能,使管理员能够定制和保护他们的无线网络。
udhcpd
udhcpd(Micro Dynamic Host Configuration Protocol daemon)是一个轻量级的DHCP服务器软件,用于在Linux系统上提供动态主机配置协议(DHCP)服务。它允许管理员将Linux设备配置为DHCP服务器,为连接到网络的客户端分配IP地址和其他网络配置信息。
udhcpd的主要功能包括:
1.IP地址分配:udhcpd负责从预定义的IP地址池中分配可用的IP地址给客户端设备。它可以根据配置的子网掩码和租约时间等参数生成并管理IP地址。
2.DHCP选项:udhcpd支持在DHCP响应中提供各种可选的DHCP选项,包括子网掩码、默认网关、DNS服务器、NTP服务器和其他自定义选项。这些选项可以通过udhcpd的配置文件进行设置。
3.租约管理:udhcpd跟踪每个分配给客户端的IP地址租约,并处理租约的续约、释放和过期。它确保客户端在租约到期之前更新租约或释放IP地址。
4.简单配置:udhcpd具有简单的配置,以便快速设置基本的DHCP服务器功能。配置文件包含了一些必要的参数,如IP地址池范围、子网掩码、租约时间等。
5.日志记录:udhcpd可以生成日志,记录与DHCP分配相关的事件和错误信息。这些日志对于故障排除和监视DHCP服务器的操作非常有用。
要使用udhcpd,你需要在Linux系统上安装包含udhcpd二进制文件的软件包(通常称为"busybox")。然后,可以通过编辑udhcpd的配置文件(通常是/etc/udhcpd.conf)来进行必要的设置,例如定义IP地址池、子网掩码、默认网关和DNS服务器等。
hostapd使用:
这里做一个简单示例验证
hostapd.conf配置文件
interface=wlan0
#driver=nl80211
ssid=test_lyn
hw_mode=a
channel=72
auth_algs=1
wpa=3
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
其中hw_mode是wifi制式,a代表是5g,g代表2.4g,如下2.4G我可以这么写:
hw_mode=g
channel=3
详细配置细节可以看这里:
- https://wireless.wiki.kernel.org/en/users/documentation/hostapd#wireless_interfacehttps://blog.51cto.com/laoding/1697015
hostapd使用配置文件启一个热点:
hostapd -B hostapd.conf
执行情况如下:
root@root:~# hostapd -B hostapd.conf
Configuration file: hostapd.conf
Using interface wlan0 with hwaddr 60:60:1f:00:0c:f0 and ssid "test_lyn"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
这时候我们就可以用手机或者频谱仪看到对应频段有名称为test_lyn的wifi出现,不过我们还需要dhcp工具进行分配IP,不然wifi能看到但是无法分配IP,需要一个dhcp服务端配合使用。
udhcpd使用:
udhcpd.conf配置文件
start 192.168.1.20
end 192.168.1.50
interface wlan0
max_leases 30
option subnet 255.255.255.0
option router 192.168.1.1
option dns 8.8.8.8
option lease 8
logfile /var/log/udhcpd.log
option lease 86400 # 指定租约时间(单位:秒)
#remaining yes
详细配置细节可以看这里:https://codeantenna.com/a/vquDiKMjJM
udhcpd使用配置文件启动:udhcpd -f udhcpd.conf
或者使用log输出启动udhcpd -fS udhcpd.conf
完整的启动流程:
ifconfig wlan0 down
hostapd -B hostapd.conf
udhcpd -f udhcpd.conf
ifconfig wlan0 192.168.1.1
ifconfig wlan0 up
对应的客户端连接该wifi之后:
STA模式
wpa_supplicant
wpa_supplicant是一个开源的Wi-Fi客户端软件,用于在Linux系统上实现WPA(Wi-Fi Protected Access)和WPA2协议的认证和加密功能。它允许用户连接到受保护的无线网络,并提供了与各种认证和加密方法的兼容性。
wpa_supplicant的主要功能包括:
1.Wi-Fi认证:wpa_supplicant支持多种Wi-Fi认证方法,如WPA-PSK(预共享密钥)、WPA-EAP(扩展认证协议)和IEEE 802.1X。这些认证方法允许用户通过密码、证书或其他身份验证凭据连接到受保护的Wi-Fi网络。
2.加密:wpa_supplicant提供了对WPA和WPA2加密协议的支持,包括TKIP(Temporal Key Integrity Protocol)和CCMP(Counter Mode with Cipher Block Chaining Message Authentication Code Protocol)。这些协议用于确保无线数据传输的安全性和机密性。
3.配置文件管理:wpa_supplicant使用配置文件来定义要连接的无线网络以及相关的认证和加密设置。配置文件包含网络名称(SSID)、密码、安全协议和其他网络参数。管理员可以编辑配置文件以配置所需的无线网络连接。
4.动态网络选择:wpa_supplicant支持动态选择可用的无线网络。它可以扫描周围的Wi-Fi网络,并根据事先定义的优先级列表选择一个可用的网络进行连接。
5.与其他网络管理工具集成:wpa_supplicant可以与Linux系统中的其他网络管理工具集成,如NetworkManager或systemd-networkd。这样,它可以与这些工具共享网络配置信息,并通过这些工具提供的界面进行无线网络连接管理。
udhcpc
udhcpc是一个用于在Linux系统上获取和管理动态主机配置协议(DHCP)客户端的小型工具。它用于从DHCP服务器自动获取IP地址、子网掩码、默认网关和DNS服务器等网络配置信息,以便将Linux设备连接到网络并使其能够进行通信。
udhcpc的主要功能包括:
1.DHCP客户端:udhcpc作为一个轻量级的DHCP客户端,可以与DHCP服务器进行通信,并请求分配给它的网络配置信息。
2.IP地址和配置管理:udhcpc负责接收从DHCP服务器分配的IP地址、子网掩码、默认网关和DNS服务器等网络设置,并将这些配置应用于Linux设备的网络接口。
3.租约管理:udhcpc可以处理租约的续订和释放。租约是DHCP服务器提供的一段时间内的IP地址使用权限,udhcpc负责确保在租约到期之前更新租约或释放IP地址。
4.脚本支持:udhcpc具有与外部脚本交互的功能,允许管理员编写自定义脚本来处理接收到的网络配置信息。这些脚本可以根据需要执行各种操作,如配置其他网络参数、启动服务等。
5.日志记录:udhcpc可以生成日志,记录与DHCP过程相关的事件和错误信息。这对于故障排除和监视DHCP客户端的操作非常有用。
要使用udhcpc,你需要在Linux系统上安装包含udhcpc二进制文件的软件包(通常称为"busybox")。然后,可以使用命令行界面执行udhcpc来启动DHCP客户端并获取网络配置信息。
wpa_supplicant使用:
wpa_supplicant.conf配置文件
network={
scan_ssid=1
key_mgmt=WPA-PSK
proto=RSN WPA
pairwise=CCMP TKIP
ssid="test_lyn"
psk="12345678"
}
详细配置细节可以看这里:https://blog.csdn.net/qq_22716879/article/details/51416322
wpa_supplicant进行连接wifi:
wpa_supplicant -B -D nl80211 -i wlan0 -c wpa_supplicant.conf
执行
$ wpa_supplicant -B -D nl80211 -i wlan0 -c wpa_supplicant.conf
root@root:~# [ 3982.710000] wlan0: authenticate with 60:60:1f:00:0c:f0
[ 3982.720000] wlan0: send auth to 60:60:1f:00:0c:f0 (try 1/3)
[ 3982.730000] wlan0: authenticated
[ 3982.730000] ath9k ar934x_wmac wlan0: disabling HT as WMM/QoS is not supported by the AP
[ 3982.740000] ath9k ar934x_wmac wlan0: disabling VHT as WMM/QoS is not supported by the AP
[ 3982.760000] wlan0: associate with 60:60:1f:00:0c:f0 (try 1/3)
[ 3982.760000] wlan0: RX AssocResp from 60:60:1f:00:0c:f0 (capab=0x411 status=0 aid=1)
[ 3982.770000] wlan0: associated
udhcpc 使用
udhcpc -b -i wlan0 -t 1 -T 1 -A 1 -R -H lyn_111
该命令是针对嵌入式Linux系统中的网络配置工具udhcpc的使用。下面是各个选项的解释:
-b: 在后台运行udhcpc,以守护进程的方式工作。
-i wlan0: 指定接口为wlan0,即无线网络接口。
-t 1: 设置超时时间为1秒。如果在指定时间内无法获取IP地址,则停止尝试。
-T 1: 设置重试间隔为1秒。在每次尝试之间等待指定的时间。
-A 1: 启用ARP检查。在获取IP地址之前,先通过发送ARP请求来检查该地址是否已被使用。
-R: 使用服务器提供的IP地址。通常情况下,udhcpc会根据DHCP服务器提供的IP地址进行配置,而不是使用静态IP地址。
-H lyn_111: 设置主机名为"lyn_111"。主机名是在网络中用于标识设备的名称。
综上所述,该命令将以守护进程方式在后台运行udhcpc,并使用wlan0接口进行网络配置。它将在1秒内尝试获取IP地址,每次尝试之间等待1秒。在获取IP地址之前会进行ARP检查,并使用DHCP服务器提供的IP地址进行配置。此外,还设置了主机名为"lyn_111"。
dhcpd 、dhcpc 和 udhcpd 、udhcpc对比介绍
udhcpd和dhcpd是两种不同的DHCP服务器软件,udhcpc和dhcpc是两种不同的DHCP客户端软件。
udhcpd、udhcpc:udhcpd是一个轻量级的DHCP服务器,udhcpc是一个轻量级的DHCP客户端,通常与udhcpd服务器一起使用。它通常在嵌入式系统和小型网络中使用。它由BusyBox项目提供,并且具有简单的配置和较少的功能。它适用于资源受限的设备或需要简单DHCP服务的环境。udhcpc适用于嵌入式系统和小型网络环境,可以请求并获取IP地址、子网掩码、默认网关和其他相关的DHCP选项。
dhcpd、dhcpc:dhcpd(ISC DHCP)是Internet Systems Consortium开发和维护的标准DHCP服务器软件,dhcpc是一种更通用的DHCP客户端,也称为ISC DHCP客户端,也称为ISC DHCP客户端。它是一个功能强大且广泛使用的DHCP服务器,支持复杂的网络环境和功能。它可以在大型企业网络、ISP和其他需要全面DHCP支持的场景中使用。
它支持从DHCP服务器获取IP地址、配置DNS服务器、设置主机名等。
如果你只需要一个基本的DHCP服务器和客户端,并且希望保持系统资源的最小利用,那么udhcpd和udhcpc可能是一个不错的选择。但如果需要更高级的功能、灵活性和可扩展性,那么dhcpd和dhcpc可能更适合。
配合网络管理的iw和iwinfo工具
iw:
iw是一个Linux上的强大工具,用于配置和监视无线设备及其连接。它提供了广泛的功能,包括:
- 查看和设置接口的基本信息,如SSID、频率、信号强度等。扫描可用的无线网络,并显示每个网络的详细信息。连接到受保护的无线网络(例如WPA/WPA2认证)并进行身份验证。配置连接参数,如加密类型、传输速率等。监视当前连接的性能指标,如数据传输速率、信号质量等。运行高级操作,如创建虚拟接口、设置功率和频率等。
使用iw时,你需要指定要操作的无线接口名称(例如wlan0)。然后,可以通过执行各种子命令和选项来完成特定的任务。例如,以下是一些常用的iw命令示例:
iw dev wlan0 scan: 扫描无线网络并列出可用的网络信息。
iw dev wlan0 connect <SSID>: 连接到指定SSID的无线网络。
iw dev wlan0 disconnect: 断开当前的无线连接。
iw dev wlan0 link: 显示当前无线连接的详细信息。
iw dev wlan0 set power_save on: 启用电源管理以延长电池寿命。
基本使用
查看频点 iw list
扫描wifi iw dev wlan0 scan | grep SSID:
查看国家码 iw reg get
设置国家码 iw reg set JM
查看连接状态iw dev wlan0 link
root@root:~# iw dev wlan0 link
Connected to 60:60:1f:00:0c:f0 (on wlan0)
SSID: test_lyn
freq: 2422
RX: 326369 bytes (4465 packets)
TX: 15993 bytes (255 packets)
signal: -29 dBm
tx bitrate: 48.0 MBit/s
bss flags: short-slot-time
dtim period: 0
beacon int: 100
- 断开WIFI连接 iw wlan0 disconnect
root@root:~# iw wlan0 disconnect
[ 3835.080000] wlan0: deauthenticating from 60:60:1f:00:0c:f0 by local choice (Reason: 3=DEAUTH_LEAVING)
-
- 连接无密码的无线路由 iw dev wlan0 connect test_lyn
- 可惜iw只能处理WEP加密,要连接WPA需要 wpasupplicant
iwinfo:
iwinfo是一个用于获取无线网络接口信息的工具,它提供了与硬件驱动程序交互的接口。与iw相比,iwinfo的功能较为有限,但它对于快速查看和监视无线接口状态非常有用。
使用iwinfo时,你需要指定要查询的无线接口名称(例如wlan0)。以下是一些常见的iwinfo命令示例:
iwinfo wlan0 info: 显示无线接口的基本信息,如SSID、频道、信号强度等。
iwinfo wlan0 scan: 扫描可用的无线网络并列出详细信息。
iwinfo wlan0 assoclist: 显示当前连接到该接口的关联设备列表。
iwinfo wlan0 txpower <power>: 设置无线接口的传输功率。
我iwinfo工具命令
root@root:~# iwinfo wlan0
Usage:
iwinfo <device> info
iwinfo <device> scan
iwinfo <device> txpowerlist
iwinfo <device> freqlist
iwinfo <device> assoclist
iwinfo <device> countrylist
查看连接 iwinfo wlan0 assoclist
查看设置的频点 iwinfo wlan0 freq
查看功率 iwinfo wlan0 txpowerlist
查看扫描到的wifi iwinfo wlan0 scan | grep ESSID
此外还有些查看设备连接的一些命令arp -a
或者cat /proc/net/arp
结语
这就是我自己在linux wifi操作的分享。如果大家有更好的想法,也欢迎大家加我好友交流分享哈。
作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。