linux下wifi的sta和ap操作

2023-11-03

前言

在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】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux下wifi的sta和ap操作 的相关文章

随机推荐

  • Xcode工程依赖

    我使用的Xcode版本 3 2 6 通过Xcode设置工程依赖之后 Xcode会先编译被依赖工程 最后编译有依赖工程 达到控制编译顺序的目的 但是设置依赖这种办法 只适用于所有的工程拥有相同的配置 Debug与Release 这种情况下 如
  • Linux 命令 ps aux 命令解析

    一 简介 PS 是 Linux 系统命令之一 在 Linux 中是查看进程的命令 查看正处于 Running 的进程 linux 上进程有 5 种状态 运行 正在运行或在运行队列中等待 中断 休眠中 受阻 在等待某个条件的形成或接收到信号
  • 菜鸟学四轴控制器之6:刀具半径补偿算法

    为什么要有刀具补偿 想象一下 如果我们的刀具可以理想到半径无穷小 倒是不需要考虑半径的补偿 但是实际上我们用到的是刀具的边沿在雕刻物体 如下图 简单来看 好像是直接平行于轮廓进行移动就可以了 其实不然 单条直线的雕刻是平行 但是直线和直线
  • /etc/rc.d/rc.sysinit脚本分析

    bin bash etc rc d rc sysinit run once at boot time Rerun ourselves through initlog 通过 sbin initlog 命令重新运行自己 if z IN INIT
  • 【Jenkins】安装提示: this account either does not have the privilege logon as a service

    错误详情 安装 Jenkins 时系统提示如下错误 this account either does not have the privilege logon as a service 1 解决方案 2 选择 本地安全策略 按下Win R组
  • C++11之用户自定义字面量(ClassType operator““_C(param...))

    系列文章 C 11之正则表达式 regex match regex search regex replace C 11之线程库 Thread Mutex atomic lock guard 同步 C 11之智能指针 unique ptr s
  • QT开发错误集

    1 error multiple definition of QWidget 在项目 pro中 SOURCES 处添加的 h和 cpp文件有重复添加 将重复的去掉就可以了 2 VS2010 QT 很多代码下面会出现红色波浪线 项目 属性 v
  • Python员工信息作业

    作业简介 根据用户输入 来实现增删改查 处理员工信息数据 1 信息格式 2 文本数据 1 Alex Li 22 13651054608 IT 2013 04 01 2 Jack Wang 28 13451024608 HR 2015 01
  • c++ 等待子线程结束_第3篇 Linux系统编程--线程生命周期与状态

    在上一篇中 我们已经通过知道如何创建多个线程 本篇会谈论到线程的生命周期 在此之前应该了解一下线程在一个进程中的内存布局 主线程和线程栈 每个栈都是一个独立的虚拟内存分配 可以将其放置在任意位置 重要的是要注意 栈的大小通常是有限的 操作系
  • 了解 sourceMap 配置

    Devtool 此选项控制是否生成 以及如何生成 source map 选择一种 source map 格式来增强调试过程 不同的值会明显影响到构建 build 和重新构建 rebuild 的速度 配置很多 分别有以下几种 eval 每个模
  • 一些常见数学问题的算法

    代码来源 晴神 算法笔记 一 最大公约数 int gcd int a int b if b 0 return a else return gcd b a b 二 最小公倍数 lcm a b ab d ab有可能溢出 因此更恰当的写法是a d
  • IDEA的这几个调试的骚操作,用了都说爽!

    来源 https dwz cn zMaNp9Kf 一 条件断点 循环中经常用到这个技巧 比如 遍历1个大List的过程中 想让断点停在某个特定值 参考上图 在断点的位置 右击断点旁边的小红点 会出来一个界面 在Condition这里填入断点
  • Linux设置自定义命令

    哪个用户使用 就在哪个用户的目录下进行下面操作即可 例如我的用户名是cgk 1 首先进入到cgk的目录下 2 打开bashrc文件 3 将想要添加的自定义命令写入后保存即可 例 alias jup jupyter lab port 8889
  • exception is java.sql.SQLDataException: Unsupported conversion from TIMESTAMP to java.lang.Long

    org springframework dao DataIntegrityViolationException Error attempting to get column operate time from result set Caus
  • [Spring Boot]05 国内Java开发者必备的两个提速神器:Maven的国内镜像、Spring的国内脚手架

    目录 一 Maven的国内镜像 二 Spring的国内脚手架 给 Java 开发者推荐两个提速神器 一 Maven的国内镜像 Maven的国内镜像 官网地址 http maven aliyun com 配置方法很简单 只需要找到 Maven
  • Python+selenium学习

    maximize window 最大化浏览器和刷新当前页面refresh from selenium import webdriver driver webdriver Firefox driver get https www baidu
  • WordPress使用【前端投稿】功能时为用户怎么添加插入文章标签

    在使用Wordpress做前端投稿功能的时候 可能需要用户填写文章标签 在插入文章的时候很多人不知道怎么把这些标签插入进去 下面这篇文章来为大家带来WordPress使用前端投稿功能时插入文章标签方法 在Wordpress里 wp inse
  • [力扣] 剑指 Offer 07. 重建二叉树-----Java

    题目 剑指 Offer 07 重建二叉树 例子 preorder 3 9 20 15 7 inorder 9 3 15 20 7 分析 1 我们知道前序遍历 那么前序遍历的第一个数一定是根结点 也就是 3 一定是根结点 2 我们可以找到中序
  • 【JS逆向】破解xx志愿headers中u-sign加密参数

    注意 文章内容仅用于学习和技术交流 如有侵权请联系我删除 学者应洁身自好 切勿做出违法的事情 旨在提供逆向思路 aHR0cHM6Ly93d3cueW91enkuY24vdHp5L3NlYXJjaC9jb2xsZWdlcy9jb2xsZWdl
  • linux下wifi的sta和ap操作

    前言 在linux开发中wifi是很常见的一个工作 wifi有STA模式和AP模式 今天分享下如何使用工具在Linux中控制wifi 作者 良知犹存 转载授权以及围观 欢迎关注微信公众号 羽林君 或者添加作者个人微信 become me 介