2016-05-13 4 views
1

Моя конечная цель - создать модуль, который может объяснить мне, почему установка беспроводного соединения не удалась.Получение списка интерфейсов wpa_supplicant в node.js

В настоящее время я пытаюсь получить доступ к интерфейсу wlan0 с помощью модуля node-dbus. Как говорится, 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)); 

    }); 

Update 1:

Я использовал свойство апите DBus исследовать свойства Интерфейсов и обнаружил, что само свойство было нулевым.

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.

(я гарантировал, что я создал мой wlan0 с помощью wpa_supplicant с помощью терминальных команд)

ответ

1

мне удалось исправить мою проблему путем переписывания кода выше, используя обещания. Важно также отметить, что вышеупомянутый GetInterface возвращает только адаптер wpa_supplicant.

Дополнительный вызов этого объекта с помощью GetInterface необходим для получения фактического интерфейса wlan0.

Если кто-нибудь запустить в ошибку «wpa_supplicant не может захватить этот интерфейс» попробуйте удалить файл wlan0 по адресу:/выполнения/wpa_supplicant/wlan0 (если таковые имеются)