Wireless tools for Node.js
npm install @loofkid/wireless-toolsiw, the interface for nl80211 interfaces`` javascript
var hostapd = require('wireless-tools/hostapd');
var options = {
channel: 6,
driver: 'rtl871xdrv',
hw_mode: 'g',
interface: 'wlan0',
ssid: 'RaspberryPi',
wpa: 2,
wpa_passphrase: 'raspberry'
};
hostapd.enable(options, function(err) {
// the access point was created
});
`
` javascript
var hostapd = require('wireless-tools/hostapd');
hostapd.disable('wlan0', function(err) {
// no longer hosting the access point
});
`
` javascript
var ifconfig = require('wireless-tools/ifconfig');
ifconfig.status(function(err, status) {
console.log(status);
});
// =>
[
{
interface: 'eth0',
link: 'ethernet',
address: 'b8:27:eb:da:52:ad',
ipv4_address: '192.168.1.2',
ipv4_broadcast: '192.168.1.255',
ipv4_subnet_mask: '255.255.255.0',
up: true,
broadcast: true,
running: true,
multicast: true
},
{
interface: 'lo',
link: 'local',
ipv4_address: '127.0.0.1',
ipv4_subnet_mask: '255.0.0.0',
up: true,
running: true,
loopback: true
},
{
interface: 'wlan0',
link: 'ethernet',
address: '00:0b:81:95:12:21',
ipv4_address: '192.168.10.1',
ipv4_broadcast: '192.168.10.255',
ipv4_subnet_mask: '255.255.255.0',
up: true,
broadcast: true,
multicast: true
}
]
`
` javascript
var ifconfig = require('wireless-tools/ifconfig');
ifconfig.status('eth0', function(err, status) {
console.log(status);
});
// =>
{
interface: 'eth0',
link: 'ethernet',
address: 'b8:27:eb:da:52:ad',
ipv4_address: '192.168.1.2',
ipv4_broadcast: '192.168.1.255',
ipv4_subnet_mask: '255.255.255.0',
up: true,
broadcast: true,
running: true,
multicast: true
}
`
` javascript
var ifconfig = require('wireless-tools/ifconfig');
ifconfig.down('wlan0', function(err) {
// the interface is down
});
`
` javascript
var ifconfig = require('wireless-tools/ifconfig');
var options = {
interface: 'wlan0',
ipv4_address: '192.168.10.1',
ipv4_broadcast: '192.168.10.255',
ipv4_subnet_mask: '255.255.255.0'
};
ifconfig.up(options, function(err) {
// the interface is up
});
`
` javascript
var iwconfig = require('wireless-tools/iwconfig');
iwconfig.status(function(err, status) {
console.log(status);
});
// =>
[
{
interface: 'wlan0',
access_point: '00:0b:81:95:12:21',
frequency: 2.437,
ieee: '802.11bg',
mode: 'master',
noise: 0,
quality: 77,
sensitivity: 0,
signal: 50,
ssid: 'RaspberryPi'
},
{
interface: 'wlan1',
frequency: 2.412,
mode: 'auto',
noise: 0,
quality: 0,
sensitivity: 0,
signal: 0,
unassociated: true
}
]
`
` javascript
var iwconfig = require('wireless-tools/iwconfig');
iwconfig.status('wlan0', function(err, status) {
console.log(status);
});
// =>
{
interface: 'wlan0',
access_point: '00:0b:81:95:12:21',
frequency: 2.437,
ieee: '802.11bg',
mode: 'master',
noise: 0,
quality: 77,
sensitivity: 0,
signal: 50,
ssid: 'RaspberryPi'
}
`
` javascript
var iwlist = require('wireless-tools/iwlist');
iwlist.scan('wlan0', function(err, networks) {
console.log(networks);
});
iwlist.scan({ iface : 'wlan0', show_hidden : true }, function(err, networks) {
console.log(networks);
});
// =>
[
{
address: '00:0b:81:ab:14:22',
ssid: 'BlueberryPi',
mode: 'master',
frequency: 2.437,
channel: 6,
security: 'wpa',
quality: 48,
signal: 87
},
{
address: '00:0b:81:95:12:21',
ssid: 'RaspberryPi',
mode: 'master',
frequency: 2.437,
channel: 6,
security: 'wpa2',
quality: 58,
signal: 83
},
{
address: '00:0b:81:cd:f2:04',
ssid: 'BlackberryPi',
mode: 'master',
frequency: 2.437,
channel: 6,
security: 'wep',
quality: 48,
signal: 80
},
{
address: '00:0b:81:fd:42:14',
ssid: 'CranberryPi',
mode: 'master',
frequency: 2.437,
channel: 6,
security: 'open',
quality: 32,
signal: 71
}
]
[
{
address: '00:0b:81:ab:14:22',
ssid: 'BlueberryPi',
mode: 'master',
frequency: 2.437,
channel: 6,
security: 'wpa',
quality: 48,
signal: 87
},
{
address: '00:0b:81:95:12:21',
ssid: 'RaspberryPi',
mode: 'master',
frequency: 2.437,
channel: 6,
security: 'wpa2',
quality: 58,
signal: 83
},
{
address: '00:0b:81:cd:f2:04',
ssid: 'BlackberryPi',
mode: 'master',
frequency: 2.437,
channel: 6,
security: 'wep',
quality: 48,
signal: 80
},
{
address: '00:0b:81:fd:42:14',
ssid: 'CranberryPi',
mode: 'master',
frequency: 2.437,
channel: 6,
security: 'open',
quality: 32,
signal: 71
},
{
address: '2c:c5:d3:02:ae:4c',
channel: 100,
frequency: 5.5,
mode: 'master',
quality: 66,
signal: -44,
security: 'wpa2'
}
]
`
` javascript
var udhcpc = require('wireless-tools/udhcpc');
var options = {
interface: 'wlan0'
};
udhcpc.enable(options, function(err) {
// the dhcp client was started
});
`
` javascript
var udhcpc = require('wireless-tools/udhcpc');
udhcpc.disable('wlan0', function(err) {
// the dhcp client was stopped
});
`
` javascript
var udhcpd = require('wireless-tools/udhcpd');
var options = {
interface: 'wlan0',
start: '192.168.10.100',
end: '192.168.10.200',
option: {
router: '192.168.10.1',
subnet: '255.255.255.0',
dns: [ '4.4.4.4', '8.8.8.8' ]
}
};
udhcpd.enable(options, function(err) {
// the dhcp server was started
});
`
` javascript
var udhcpd = require('wireless-tools/udhcpd');
udhcpd.disable('wlan0', function(err) {
// the dhcp server was stopped
});
`
Most of wpa_cli commands return either 'OK' or 'FAIL' (and the exit status is
always 0). Because of this, all 'FAIL' responses will return and callback with an error.
Responses containing an 'OK' result only means than wpa_supplicant had received
the command. You must poll wpa_supplicant (or other commands like iwconfig) to be sure that the command was actually applied by wpa_supplicant.
` javascript
var wpa_cli = require('wireless-tools/wpa_cli');
wpa_cli.status('wlan0', function(err, status) {
console.dir(status);
});
`
` javascript`
// =>
{
bssid: '2c:f5:d3:02:ea:d9',
frequency: 2412,
mode: 'station',
key_mgmt: 'wpa2-psk',
ssid: 'Fake-Wifi',
pairwise_cipher: 'CCMP',
group_cipher: 'CCMP',
p2p_device_address: 'e4:28:9c:a8:53:72',
wpa_state: 'COMPLETED',
ip: '10.34.141.168',
mac: 'e4:28:9c:a8:53:72',
uuid: 'e1cda789-8c88-53e8-ffff-31c304580c1e',
id: 0
}wpa_cli.bssid(interface, ap, ssid, callback)
The wpa_cli bssid command is used to set the preferred access points for an specific ssid on a specific network interface.
` javascript
var wpa_cli = require('wireless-tools/wpa_cli');
wpa_cli.bssid('wlan0', '2c:f5:d3:02:ea:dd', 'Fake-Wifi', function(err, data){
// this is correct usage
console.dir(data);
});
`wpa_cli.reassociate(interface, callback)
The wpa_cli reassociate command is used to instruct wpa_supplicant to reassociate to access points for an SSID on a specific network interface.
` javascript
var wpa_cli = require('wireless-tools/wpa_cli');
wpa_cli.bssid('wlan0', 'Fake-Wifi', '2c:f5:d3:02:ea:dd', function(err, data){
// our usage is wrong so an error is triggered
if (err) {
console.dir(err);
// attempt to reassociate
wpa_cli.reassociate('wlan0', function(err, data) {
console.dir(data);
});
}
});
`wpa_cli.set(interface, variable, value, callback)
The wpa_cli set command is used to set wpa_supplicant parameters to a value on a specific network interface.
` javascript
var wpa_cli = require('wireless-tools/wpa_cli');
wpa_cli.select_network('wlan0', 0, function(err, data){
if (err) {
// most likely the set values for the specified id are wrong
console.dir(err);
} else {
// successfully connected to the new network
console.dir(data);
}
});
`wpa_cli.scan(interface, callback)
The wpa_cli scan is used to request a new BSS scan on a specific network interface.
javascript
var wpa_cli = require('wireless-tools/wpa_cli');
wpa_cli.scan('wlan0', function(err, data){
wpa_cli.scan_results('wlan0', function(err, data) {
// returns the results of the BSS scan once it completes
console.dir(data);
}
});
`` javascript
=>
[
{
bssid: '2c:f5:d3:02:ea:d9',
frequency: 2472,
signalLevel: -31,
flags: '[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS]',
ssid: 'FakeWifi'
},
{
bssid: '2c:f5:d3:02:ea:d9',
frequency: 2472,
signalLevel: -31,
flags: '[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS]',
ssid: 'FakeWifi2'
}
]
`wpa_cli.save_config(interface, callback)
The wpa_cli save_config command is used to save the current wpa_cli configuration for the specific network interface.` javascript
var wpa_cli = require('wireless-tools/wpa_cli');
wpa_cli.save_config('wlan0', function(err, data){
// current wpa_cli configuration is saved
});
`wpa_supplicant
The wpa_supplicant command is used to configure a wireless network connection for a network interface.wpa_supplicant.enable(options, callback)
The wpa_supplicant enable command is used to join a wireless network on a specific network interface.` javascript
var wpa_supplicant = require('wireless-tools/wpa_supplicant');var options = {
interface: 'wlan0',
ssid: 'RaspberryPi',
passphrase: 'raspberry',
driver: 'wext'
};
wpa_supplicant.enable(options, function(err) {
// connected to the wireless network
});
`wpa_supplicant.disable(interface, callback)
The wpa_supplicant disable command is used to disconnect from a wireless network on a specific network interface.` javascript
var wpa_supplicant = require('wireless-tools/wpa_supplicant');wpa_supplicant.disable('wlan0', function(err) {
// disconnected from wireless network
});
`wpa_supplicant.manual(options, callback)
The wpa_supplicant manual command is used to launch wpa_supplicant on a specific network interface.` javascript
var wpa_supplicant = require('wireless-tools/wpa_supplicant');var options = {
interface: 'wlan0',
drivers: [ 'nl80211', 'wext' ]
};
wpa_supplicant.manual(options, function(err) {
// wpa_supplicant launched on wlan0 interface (can be setup using wpa_cli)
});
`iw
The iw command is used to get and set detailed information from an nl80211 wireless interface.iw.scan(interface, callback)
The iw scan command is used to scan for wireless networks visible to a wireless interface. For convenience, the networks are sorted by signal strength.` javascript
var iw = require('wireless-tools/iw');iw.scan('wlan0', function(err, networks) {
console.log(networks);
});
iw.scan({ iface : 'wlan0', show_hidden : true }, function(err, networks) {
console.log(networks);
});
// =>
[
{
address: '00:0b:81:ab:14:22',
frequency: 2422,
signal: -80,
lastSeenMs: 0,
ssid: 'BlueberryPi',
channel: 3,
security: 'wpa'
},
{
address: '00:0b:81:95:12:21',
frequency: 5825,
signal: -83,
lastSeenMs: 2031,
ssid: 'RaspberryPi',
channel: 165,
security: 'wpa2'
},
{
address: '00:0b:81:cd:f2:04',
frequency: 2437,
signal: -88,
lastSeenMs: 0,
ssid: 'BlackberryPi',
channel: 6,
security: 'wep'
},
{
address: '00:0b:81:fd:42:14',
frequency: 2412,
signal: -92,
lastSeenMs: 0,
ssid: 'CranberryPi',
channel: 1,
security: 'open'
}
]
[
{
address: '00:0b:81:ab:14:22',
frequency: 2422,
signal: -80,
lastSeenMs: 0,
ssid: 'BlueberryPi',
channel: 3,
security: 'wpa'
},
{
address: '00:0b:81:95:12:21',
frequency: 5825,
signal: -83,
lastSeenMs: 2031,
ssid: 'RaspberryPi',
channel: 165,
security: 'wpa2'
},
{
address: '00:0b:81:cd:f2:04',
frequency: 2437,
signal: -88,
lastSeenMs: 0,
ssid: 'BlackberryPi',
channel: 6,
security: 'wep'
},
{
address: '00:0b:81:fd:42:14',
frequency: 2412,
signal: -92,
lastSeenMs: 0,
ssid: 'CranberryPi',
channel: 1,
security: 'open'
},
{
address: '00:0b:81:fd:42:01',
frequency: 2412,
signal: -94,
lastSeenMs: 1069,
channel: 1,
security: 'open'
}
]
``