linux下wifi的sta和ap操作

前言

在linux开发中wifi是很常见的一个工作,wifi有STA模式和AP模式,今天分享下如何使用工具在Linux中控制wifi。

作者:良知犹存

转载授权以及围观:欢迎关注微信公众号:羽林君

或者添加作者个人微信:become_me


介绍

今天介绍的是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_interface
  • https://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 篮球。关注我,与我一起同行。

                              ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

推荐阅读

【1】jetson nano开发使用的基础详细分享

【2】Linux开发coredump文件分析实战分享

【3】CPU中的程序是怎么运行起来的 必读

【4】cartographer环境建立以及建图测试

【5】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比

本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。

posted @ 2023-07-13 22:05  良知犹存  阅读(531)  评论(0编辑  收藏  举报