获取node.js中的wpa_supplicant接口列表

时间:2016-05-13 12:40:49

标签: node.js wpa wpa-supplicant

我的最终目标是创建一个模块,告诉我为什么无线连接设置失败。

目前我正在尝试使用node-dbus模块访问wlan0接口。因为它代表wpa_supplicant告诉我它不知道wlan0

  

' wpa_supplicant对此界面一无所知。'

非常感谢任何帮助或建议。

代码:

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来研究Interfaces属性,发现属性本身是null。

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)

1 个答案:

答案 0 :(得分:1)

我设法通过使用promises重写上面的代码来解决我的问题。 同样重要的是要注意上面的GetInterface只返回wpa_supplicant适配器。

需要使用GetInterface对此对象进行额外调用才能获得实际的wlan0接口。

如果有人遇到错误&#39; wpa_supplicant无法抓住此界面&#39;尝试删除wlan0文件:/ run / wpa_supplicant / wlan0(如果有的话)