获取 node.js 中的 wpa_supplicant 接口列表
getting list of wpa_supplicant interfaces in node.js
我的最终目标是创建一个模块,可以告诉我无线连接设置失败的原因。
目前我正在尝试使用 node-dbus 模块访问 wlan0 接口。就目前而言 wpa_supplicant 告诉我它不知道 wlan0
'wpa_supplicant knows nothing about this interface.'
非常感谢任何帮助或建议。
代码:
var dbus = require('dbus-native');
var util = require('util');
var bus = dbus.systemBus();
var wpas = bus.getService('fi.w1.wpa_supplicant1');
var wpai = wpas.getInterface('/fi/w1/wpa_supplicant1'
, 'fi.w1.wpa_supplicant1', function (err, iface) {
//console.log(err, iface);
iface.on('PropertiesChanged', function(dict) {
console.log('interface properties have changed!');
console.log(dict);
});
iface.on('InterfaceAdded', function(path, dict) {
console.log('interface has been added!');
console.log(path, dict);
});
iface.on('InterfaceRemoved', function(path) {
console.log('interface has been removed!');
console.log(path);
});
iface.GetInterface('wlan0', function (err, iface2) {
console.log(err, iface2);
});
console.log(util.inspect(iface, true, 3));
});
更新 1:
我使用 DBus 属性 api 调查接口属性,发现 属性 本身为空。
wpas.getInterface('/fi/w1/wpa_supplicant1', 'org.freedesktop.DBus.Properties', function(err, device) {
device.GetAll('fi.w1.wpa_supplicant1', function(err, prop) {
var props = arrToMap(prop);
console.log(err,props);
});
});
function arrToMap(arr) {
var output = {};
for (var i = 0; i < arr.length; i++) {
output[arr[i][0]] = arr[i][1][1][0];
}
return output;
}
我唯一的结论是 wpa_supplicant 从不向 dbus 注册任何新接口。
(我已确保使用 wpa_supplicant 使用终端命令设置我的 wlan0)
我通过使用 promises 重写上面的代码设法解决了我的问题。
还有一点要注意,上面的GetInterface只是returns wpa_supplicant适配器。
需要使用 GetInterface 对此对象进行额外调用,以获取实际的 wlan0 接口。
如果有人 运行 遇到错误 'wpa_supplicant cannot grab this interface',请尝试删除位于以下位置的 wlan0 文件:/run/wpa_supplicant/wlan0(如果有)
我的最终目标是创建一个模块,可以告诉我无线连接设置失败的原因。
目前我正在尝试使用 node-dbus 模块访问 wlan0 接口。就目前而言 wpa_supplicant 告诉我它不知道 wlan0
'wpa_supplicant knows nothing about this interface.'
非常感谢任何帮助或建议。
代码:
var dbus = require('dbus-native');
var util = require('util');
var bus = dbus.systemBus();
var wpas = bus.getService('fi.w1.wpa_supplicant1');
var wpai = wpas.getInterface('/fi/w1/wpa_supplicant1'
, 'fi.w1.wpa_supplicant1', function (err, iface) {
//console.log(err, iface);
iface.on('PropertiesChanged', function(dict) {
console.log('interface properties have changed!');
console.log(dict);
});
iface.on('InterfaceAdded', function(path, dict) {
console.log('interface has been added!');
console.log(path, dict);
});
iface.on('InterfaceRemoved', function(path) {
console.log('interface has been removed!');
console.log(path);
});
iface.GetInterface('wlan0', function (err, iface2) {
console.log(err, iface2);
});
console.log(util.inspect(iface, true, 3));
});
更新 1:
我使用 DBus 属性 api 调查接口属性,发现 属性 本身为空。
wpas.getInterface('/fi/w1/wpa_supplicant1', 'org.freedesktop.DBus.Properties', function(err, device) {
device.GetAll('fi.w1.wpa_supplicant1', function(err, prop) {
var props = arrToMap(prop);
console.log(err,props);
});
});
function arrToMap(arr) {
var output = {};
for (var i = 0; i < arr.length; i++) {
output[arr[i][0]] = arr[i][1][1][0];
}
return output;
}
我唯一的结论是 wpa_supplicant 从不向 dbus 注册任何新接口。
(我已确保使用 wpa_supplicant 使用终端命令设置我的 wlan0)
我通过使用 promises 重写上面的代码设法解决了我的问题。 还有一点要注意,上面的GetInterface只是returns wpa_supplicant适配器。
需要使用 GetInterface 对此对象进行额外调用,以获取实际的 wlan0 接口。
如果有人 运行 遇到错误 'wpa_supplicant cannot grab this interface',请尝试删除位于以下位置的 wlan0 文件:/run/wpa_supplicant/wlan0(如果有)