编写外部程序以与wpa_supplicant接口

维克多·戈洛瓦年科(Victor Golovanenko)

我需要直接与Python中的wpa_supplicant进行交互。据我了解,可以使用Unix套接字和wpa_supplicant控制界面(https://w1.fi/wpa_supplicant/devel/ctrl_iface_page.html连接到wpa_supplicant 我编写了一个简单的程序来发送PING命令:

import socket

CTRL_SOCKETS = "/home/victor/Research/wpa_supplicant_python/supplicant_conf"
INTERFACE = "wlx84c9b281aa80"
SOCKETFILE = "{}/{}".format(CTRL_SOCKETS, INTERFACE)

s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
s.connect(SOCKETFILE)
s.send(b'PING')
while 1:
    data = s.recv(1024)
    if data:
        print(repr(data))

但是当我运行它时,wpa_supplicant报告一个错误:

wlx84c9b281aa80:ctrl_iface发送到失败:107-传输端点未连接

有人可以提供一个例子,说明如何进行“扫描”然后打印“ scan_results”。

安东·伯纳茨基(Anton Bernatskiy)

显然,wpa_supplicant使用的套接字类型(UNIX数据报)无法为服务器提供任何答复方式。几种解决方法特别是wpa_supplicant似乎通过单独的套接字(在每个消息末尾附加的路径中找到)支持回复。

奇怪的是,这在Linux中似乎是一种相对普遍的做法:/ dev / log似乎以相同的方式工作

这是一个满足您要求的程序:

import socket, os
from time import sleep

def sendAndReceive(outmsg, csock, ssock_filename):
  '''Sends outmsg to wpa_supplicant and returns the reply'''

  # the return socket object can be used to send the data
  # as long as the address is provided
  csock.sendto(str.encode(outmsg), ssock_filename)

  (bytes, address) = csock.recvfrom(4096)
  inmsg = bytes.decode('utf-8')

  return inmsg

wpasock_file = '/var/run/wpa_supplicant/wlp3s0'
retsock_file = '/tmp/return_socket'

if os.path.exists(retsock_file):
  os.remove(retsock_file)
retsock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
retsock.bind(retsock_file)

replyToScan = sendAndReceive('SCAN', retsock, wpasock_file)
print(f'SCAN: {replyToScan}')

sleep(5)

replyToScanResults = sendAndReceive('SCAN_RESULTS', retsock, wpasock_file)
print(f'SCAN_RESULTS: {replyToScanResults}')

retsock.close()
os.remove(retsock_file)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

wpa_supplicant噩梦

来自分类Dev

NetworkManager与wpa_supplicant

来自分类Dev

通过dbus接口使用wpa_supplicant创建访问点

来自分类Dev

WiFi错误wpa_supplicant

来自分类Dev

帮助设置wpa_supplicant

来自分类Dev

需要重启网络接口并杀死wpa_supplicant,如何解决?

来自分类Dev

需要重启网络接口并杀死wpa_supplicant,如何解决?

来自分类Dev

无法使用wpa_supplicant连接

来自分类Dev

阻止/停止wpa_supplicant启动

来自分类Dev

wpa_supplicant下的driver(-D)选项

来自分类Dev

无法使用wpa_supplicant连接

来自分类Dev

阻止/停止wpa_supplicant启动

来自分类Dev

跳过wpa_supplicant中的扫描

来自分类Dev

如何自动应用wpa_supplicant配置?

来自分类Dev

wpa_supplicant不会自动更改AP

来自分类Dev

wpa_supplicant说网络被禁用

来自分类Dev

使用wpa_supplicant选择访问点

来自分类Dev

与之关联的Querry wpa_supplicant

来自分类Dev

带有wpa_supplicant的AP模式

来自分类Dev

wpa_supplicant不再连接到eduroam

来自分类Dev

wpa_supplicant 正在加载日志

来自分类Dev

使用wpa_supplicant设置WPA2 Personal的问题

来自分类Dev

WPA2 / wpa_supplicant无线热点日志

来自分类Dev

无法在日志中初始化控制接口 /run/wpa_supplicant 但 wlan 仍然有效

来自分类Dev

wpa_supplicant-在/ run / wpa_supplicant下未生成控制界面

来自分类Dev

如何在Ubuntu 10.04上使用wpa_supplicant连接

来自分类Dev

无法连接到wpa_supplicant:wlan0-重试

来自分类Dev

如何理解wpa_supplicant的不同信号电平输出?

来自分类Dev

如何配置我的wpa_supplicant来匹配它们?