[知识整理]Linux系统WIFI知识的一些整理
前段时间接触了wifi,主要是在linux系统下做预研、开发。本文根据个人收集资料及研究经验做了一些基本入门级别的引子,旨在对wifi有一个很基础的入门的认知,比如知道wifi模块硬件接口有哪些,了解wifi驱动,等等。如有需要,可以根据文中给出的术语、链接进行扩展的研究学习。
一、硬件接口
就笔者接触的资料,wifi接口有很多种,不同接口适应于不同场合。更多资料,可以直接到某宝上搜索了解。
USB
PCI
串口
使用AT指令进行操作。一般模块会带有单片机。许多年前,笔者的同学也曾研究过GSM模块,也是使用AT命令的——那时,“迟思堂工作室”正式成立。不过此类模块,对速率要求高的可以不用考虑了。
二、基本概念
wifi的基本概念比较多,网上资料一大把。这里只简单描述一下,有的直接拿人家写好的来用了。
wifi模式
AP模式:即Access Point,接入点。是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就是一个AP。
STA模式:即Station, 类似于无线终端,STA本身并不接受无线的接入,它可以连接到AP,一般无线网卡即工作在该模式。
Monitor模式:这种模式下,所有的数据包无过滤地传输到主机,此模式下主要查看网络中出了那些故障。在支持MAC80211的一般设备中,工作于Monitor模式下,可以有效地对整个网络进行监控,在此模式下,可以实现数据包的注入。
其它概念
SSID:SSID就是一个WiFi网络的网络名称。
频率:
1)IEEE 802.11b/g标准工作在2.4G频段,频率范围为2.400—2.4835GHz,共83.5M带宽
2)划分为14个子信道
3)每个子信道宽度为22MHz
4)相邻信道的中心频点间隔5MHz
5)相邻的多个信道存在频率重叠(如1信道与2、3、4、5信道有频率重叠)
6)整个频段内只有3个(1、6、11)互不干扰信道
国家码:不同国家使用的信道有不同,要根据实际需要设置,中国的国家码为CN,美国为US,等等。
对于5GHz而言,还有DFS。
三、linux相关驱动
linux下的无线网卡驱动,一般会结合ko和固件使用。固件一般不开源,但官方会提供二进制文件下载。固件放到linux系统的/lib/firmware目录下,在系统启动时会到对应目录查找。可以到https://wireless.wiki.kernel.org/en/users/Drivers上查看linux无线网卡驱动,上面有许多不同厂商的芯片驱动。对于一些特性,如是否支持AP模式、Monitor模式,等,都可以在上面找到信息。在研究无线网卡前,最好去查一下网卡是否被内核支持。
另外,内核层和用户层操作无线网卡的还涉及到mac80211、cfg80211、nl80211这些模块,还需要对内核进行配置(如iptables、bridge等),这些目前没有研究过,暂时不写。
四、linux相关系统应用
linux系统涉及wifi的模块、软件或服务程序十分之多,本节简单介绍笔者接触过的一些软件。注意,无线网卡也是网卡,一般名称为wlan0、wlan1,ifconfig、ethtool命令依然对其生效。另外网络设备命名规则同样生效,当同一主板变换无线网卡时,其名称会发生变化。关于此问题可以参考笔者个人主页上的文章,有详细描述。
如果单纯在linux系统中使用无线网卡作为上网之用,无需做太多的配置,像在Ubuntu系统中,直接点击桌面任务栏的WIFI图标,找到对应无线路由器名称,输入密码即可。但如果在linux中使用无线网卡搭建热点环境,则需要额外的工具,一般是使用hostapd,外加一个dhcp服务器。
lspci
如果无线网卡使用PCI接口,则可以使用lspci命令查看设备ID。上面提供
# lspci
03:00.0 Class 0280: Device 168c:003c
iw
查看、配置无线网卡命令。查看当前无线网卡信息,直接用iw list即可。关于这个命令本文不展开讨论。
hostapd
linux实现AP的服务程序。很多脚本都会使用这个程序。一般结合dhcp服务器组成软件AP。可以自己写脚本实现,也可以使用如ap-hostapd、create_ap这些著名的脚本。
ap-hostapd
一个脚本,利用hostapd、dnsmaq实现完整的软件AP功能。
rfkill
linux下可以使用rfkill命令打开、禁止无线电子设备,如蓝牙、WIFI。如果在系统中无法使用WIFI,则需要查一下是否被禁止了。下面是查看命令:
$ rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
可以看到我的WIFI是没有被阻止的,亦即可正常使用。要禁止(或阻止)WIFI,可以使用命令:rfkill block wifi。要激活,则使用命令:rfkill unblock wifi。具体信息rfkill –help查看。
五、个人研究计划
首先将WIFI网卡当成普通网卡使用,即station模式,能让linux连接无线路由器,正常上网。
然后研究AP模式,把linux系统做成热点,让手机、平板正常连接。
后续再看看minitor模式,主要想抓一下周围手机、平板的包(有些邪恶想法,不过还没实践)。
再后面有机会和时间,深入研究驱动。
当然,如有其它事务中断(比如中午你吃完饭正打算午休,领导叫你马上收拾电脑去机场到东北某省出差几天),以上的再议。
六、参考资源
CRDA:https://wireless.wiki.kernel.org/en/developers/Regulatory/CRDA
Linux下支持的wifi芯片列表:https://wireless.wiki.kernel.org/en/users/Devices
查看linux驱动是否支持AP模式:http://ubuntuhandbook.org/index.php/2014/09/wifi-hotspot-access-point-not-supported/
linux无线网卡驱动大本营:https://wireless.wiki.kernel.org/en/users/Drivers
hostapd官网:http://w1.fi/
WIFI基本知识点:http://blog.csdn.net/myarrow/article/details/7930131
WIFI从零开始学起:http://blog.csdn.net/perddy/article/details/9017977
转自:http://www.latelee.org/net-study/my-wifi-notes.html
[知识整理]Linux系统WIFI知识的一些整理的更多相关文章
- Linux系统基础知识整理
一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...
- Linux系统基础知识整理(一)
本文来自于: https://www.cnblogs.com/hafiz/p/6686187.html#4196989 一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰 ...
- Linux系统文件属性知识
---------------------------------------------------------------------------------------------------- ...
- 嵌入式4412开发板学习知识-Linux系统基础知识
1. 什么是Linux系统编程 Linux系统编程分为三个部分:系统调用.C库和C编译器. 系统调用系统编程的基础是系统调用,也结束于系统调用.在带有操作系统的嵌入式开发中,需要从操作系统申请一些服务 ...
- 八.linux系统文件属性知识
1.文件属性权限是12位,现在只看9位,其中每3个一组,为:属主权限.属组权限.其他权限,其中r可读,w可写,x可执行,如图: 2.文件属性之软硬链接 linux系统中有两种链接,为硬链接(ln) ...
- Linux系统小知识
换Linux系统快半年了,刚开始总是碰到各种各样的问题,虽然斗解决了,由于没有记录,过一段时间就忘了,故在这里记录一下. 选择国内镜像源: Manjaro有一个很好用的命令rankmirrors.ra ...
- find查找文件命令 - Linux系统中的常用技巧整理
“find”在Linux系统中是比较常用的文件查找命令,使用方法有很多,可以拥有查找文件.文件目录.文件更新时间.文件大小.文件权限及对比文件时间.下面是整理的“find”常用方法,方便以后需要的时候 ...
- 相关不同Linux系统的性能监控命令整理
Linux系统 查看系统版本情况: $uname -a 监控进程的CPU,MEM使用情况: $ps –aux 过滤方式命令:$ ps -aux|awk '{print $3,$4,$11}'|sort ...
- 05.Linux系统-WCP知识共享平台安装部署(旗舰版)
WCP知识共享平台部署 一.环境准备 操作系统:CentOS Linux release 7.5.1804 (Core) Java:jdk-7u79-linux-x64.tar.gz 中间件:apac ...
随机推荐
- 手游服务端框架之使用Guava构建缓存系统
缓存的作用与应用场景 缓存,在项目中的应用非常之广泛.诸如这样的场景,某些对象计算或者获取的代码比较昂贵,并且在程序里你不止一次要用到这些对象,那么,你就应该使用缓存. 缓存跟java的Coucurr ...
- java Map 的学习
一.常用API: clear() 从 Map 中删除所有映射 remove(Object key) 从 Map 中删除键和关联的值 put(Object key, Object value) 将指定值 ...
- 打开U盘时出现“使用驱动器 X:中的光盘之前需要将其格式化。”字样
今天打开U盘时出现如下情况,吓死宝宝了,格式化!!!里面还有好多数据嘞,幸好最终找到方法解决了这个问题. 解决方法: 1.下载DiskGenius软件 2.工具->搜索已丢失分区(重建分区):不 ...
- windows cmd 命令行 —— 进程与服务
1. 进程查看与操作 tasklist tskill pid 2. 服务查看与操作 net start net stop
- 获取SQL Server数据库表的列名
SELECT syscolumns.name,systypes.name,syscolumns.isnullable,syscolumns.length FROM syscolumns, systyp ...
- Python递归输出字典所有不同深度的路径
应用场景 假设有这样一个字典结构test_dict = {'a':{'b':{'c':1}},'d':2},test_dict其实可以看作是一种树状结构,其中每个叶子节点深度不一定相同,如果我们希望输 ...
- threejs 世界坐标与屏幕坐标相互转换
屏幕坐标转世界坐标: let pX = (screenPoint.x / this.scene.renderer.domElement.clientWidth) * 2 - 1; let pY = - ...
- BZOJ1816 Cqoi2010 扑克牌【二分答案】
BZOJ1816 Cqoi2010 扑克牌 Description 你有n种牌,第i种牌的数目为ci.另外有一种特殊的牌:joker,它的数目是m.你可以用每种牌各一张来组成一套牌,也可以用一张jok ...
- BZOJ2653 middle 【主席树】【二分】*
BZOJ2653 middle Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整.给你一个长度为n的序列s.回答Q个这样 ...
- C++ sort 函数用法
MSDN中的定义: template<class RanIt>void sort(RanIt first, RanIt last); //--> 1)template<clas ...