Articles of WiFi

使用Ruby和ioctl以编程方式获取wifi BSSID

在ruby中使用通过ioctl获取essid作为模板我想获得BSSID而不是ESSID。 但是,不是一个C开发人员,有一些我不明白的东西。 我到目前为止没有工作:( … 注意我有点困惑,因为根据wireless.h中的一些意见,我认为部分BSSID只能通过ioctl来设置 。 然而,ioctl 得到存在。 随着我几乎完全不了解更多的中间C型主义(结构,工会和东西),我只是不知道。 def _get_bssid(interface) # Copied from wireless.h # supposing a 16 byte address and 32 byte buffer but I'm totally # guessing here. iwreq = [interface, '' * 48,0].pack('a*pI') sock = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0) # from wireless.h # SIOCGIWAP 0x8B15 /* get access point MAC addresses */ […]

数据包嗅探在Linux中的频道跳频

我想在b / g接口上扫描WiFi,并且我想在每个通道上花费100 ms来在每个通道上嗅探数据包。 我的最大的要求之一是不要存储我得到的数据包(因为磁盘空间较less),我的应用程序将parsing数据包,检索Tx MAC和RSSI,并构build列表(MAC,平均RSSI,#logging)在每一分钟的结尾,然后清除这个清单,重新开始。 我已经想出了两种在linux上执行channel hop的方法: 选项1 :在C中使用wi_set_channel(struct wif *,channel number)系统调用,并将代码写入C以嗅探所有的数据包 选项2 :使用linux命令iw dev wlan0设置通道4 ,并使用任何语言如python + scapy或C来嗅探数据包 我想知道哪一个更有效率,如果有的话,那么延迟/等待WiFi接口切换到不同的频道是最小的。 我怀疑,这种延迟意味着丢包,而切换到不同的频道发生,是这样的情况? 我也想知道一些其他的方法来解决这个问题在Linux中。

如何获得一个Linux AP中的RSSI(iw站转储不起作用)

我正在尝试测量连接到运行OpenWRT的AP的站点的RSSI。 我知道通过使用iw wlan0站转储或iw wlan0站得到[MAC] ,我应该能够看到它。 虽然由于某种原因,它不显示我的AP上的RSSI。 这是我得到的输出: ~# iw wlan0 station get 40:b0:fa:c1:75:41 Station 40:b0:fa:c1:75:41 (on wlan0) inactive time: 75 ms rx bytes: 17588 rx packets: 134 tx bytes: 10771 tx packets: 76 tx retries: 3 tx failed: 0 tx bitrate: 6.0 MBit/s rx bitrate: 6.0 MBit/s authorized: yes authenticated: yes preamble: short WMM/WME: yes […]

连接到特定无线networking时运行命令

在我的大学里,有一个为学生和员工开放的无线networking。 然而,要使用它,必须首先使用您自己的用户名和密码通过网站login。 这也可以通过向正确的POST数据提交一个http请求到同一个网站来完成。 我已经有一个shell脚本,但我仍然好奇,是否有可能让这个脚本自动运行,每当我的计算机连接到大学无线局域网。 是否有可能以一种简单的方式做到这一点?

iwlist扫描输出格式

我必须编写一个工具来从iwlist扫描中获取encryptiontypes。 我似乎无法find是否有标准输出。 谷歌search看起来像人们发布略有不同的格式,但我不知道他们是否复制/粘贴错误或什么。 具体来说,在Encryption key: On , On / Off字母总是大写? IE: IEEE 802.11i/WPA2 Version 1如何? encryption总是先于IEEE 802.11i/ ? 我希望这里可以问一下。

使用Python获取Wi-Fi AP信息

如何获取Wi-Fi AP的无线信息? (SSID,信道,Tx功率,RSSI,…) 我目前正在parsingiwconfig输出,但是我想以“正确的方式”来完成。

绑定与Linux中的WiFi接口

我正在一个基于Linux的系统,同时具有LAN和WIFI接口。 但是我必须将我的套接字绑定到wifi接口上。 有没有什么一般的方法来找出哪个接口是WiFi,所以我可以把我的套接字与它? 如果没有,反正我可以绑定和接收来自两个接口的请求吗? 目前,我正在使用INADDR_ANY进行绑定。 我知道如何与特定的接口,如eth0绑定,但我无法find任何方式来确定如果eth0是WiFi接口; 在INADDR_ANY中,我将接收发送到任何接口的数据包,但是我的发送可能尝试通过LAN接口发送数据包; 这不是我想要的。

Linux WiFI AP:刷新`iw dev wlan0 station dump`输出(无效时间)

我有一个充当WiFi AP的Linux(3.14.36)embedded式主板。 WiFi芯片组不支持监听模式。 我的笔记本电脑(客户端)通过WiFi连接到这个主板 WiFi AP充当到另一台计算机的networking桥接,并且不向客户端提供IP地址(WiFi AP仅具有客户端的MAC地址) 我想监视连接WiFi AP < – > Client的信号强度,并能够触发信号强度值的“刷新”。 做: iw dev wlan0 station dump给我: Station xx:xx:xx:xx:xx:xx (on wlan0) inactive time: 123820 ms // <– The problem rx bytes: 10291 rx packets: 60 … signal: -65 dBm // What I want to refresh … 我了解到每次有networking活动时都会更新信号强度。 (所以,在上面的例子中,它已经刷新了123s前)。 我如何强制刷新这个值? (通过强制AP向客户端发送“东西”)知道板/ WiFi驱动器/ WiFi设备不支持诸如iwconfig之类的工具

SIOCGIWFREQ ioctl返回错误22 EINVAL – 无效的参数,为什么?

我正努力使用以下Qt/C++方法使用Wireless Extension Tools for Linux库来读取Wifi卡的当前频道: const UeTypeCurrentFrequencyChannel& UeNetworkManager::ueCurrentFrequencyChannel(const QString& interfaceName) { static UeTypeCurrentFrequencyChannel result=UeTypeCurrentFrequencyChannel(); iwreq wrq; iw_range range; int kernelSocket=iw_sockets_open(); if(iw_get_range_info(kernelSocket, interfaceName.toLocal8Bit().constData(), &range)>=0) { if(iw_get_ext(kernelSocket, interfaceName.toLocal8Bit().constData(), SIOCGIWFREQ, &wrq)>=0) { //BUG current frequency and channel is not read, it might be becuase of nonroot credentials – it returns error 22 (EINVAL – Invalid argument), why? result.first=iw_freq2float(&(wrq.u.freq)); […]

wpa_supplicant是否支持WiFi Direct?

我需要访问wifi直接频道,以获得更多的有关组前ex:RSSI出租车我们通过使用wpa_supplicant这样做?