-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathlinux.js
More file actions
100 lines (81 loc) · 2.52 KB
/
Copy pathlinux.js
File metadata and controls
100 lines (81 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
"use strict";
var os = require('os'),
exec = require('child_process').exec,
async = require('async');
function trim_exec(cmd, cb) {
exec(cmd, function(err, out) {
if (out && out.toString() != '')
cb(null, out.toString().trim())
else
cb(err)
})
}
// If no wifi, then there is no error but cbed get's a null in second param.
exports.get_active_network_interface_name = function(cb) {
var cmd = "netstat -rn | grep UG | awk '{print $NF}'";
exec(cmd, function(err, stdout) {
if (err) return cb(err);
var raw = stdout.toString().trim().split('\n');
if (raw.length === 0 || raw === [''])
return cb(new Error('No active network interface found.'));
cb(null, raw[0]);
});
};
exports.interface_type_for = function(nic_name, cb) {
exec('cat /proc/net/wireless | grep ' + nic_name, function(err, out) {
return cb(null, err ? 'Wired' : 'Wireless')
})
};
exports.mac_address_for = function(nic_name, cb) {
var cmd = 'cat /sys/class/net/' + nic_name + '/address';
trim_exec(cmd, cb);
};
exports.gateway_ip_for = function(nic_name, cb) {
trim_exec("ip r | grep " + nic_name + " | grep default | cut -d ' ' -f 3 | head -n1", cb);
};
exports.netmask_for = function(nic_name, cb) {
var cmd = "ifconfig " + nic_name + " 2> /dev/null | egrep 'netmask|Mask:' | awk '{print $4}' | sed 's/Mask://'";
trim_exec(cmd, cb);
};
exports.get_network_interfaces_list = function(cb) {
var count = 0,
list = [],
nics = os.networkInterfaces();
function append_data(obj) {
async.parallel([
function(cb) {
exports.mac_address_for(obj.name, cb)
},
function(cb) {
exports.gateway_ip_for(obj.name, cb)
},
function(cb) {
exports.netmask_for(obj.name, cb)
},
function(cb) {
exports.interface_type_for(obj.name, cb)
}
], function(err, results) {
if (results[0]) obj.mac_address = results[0];
if (results[1]) obj.gateway_ip = results[1];
if (results[2]) obj.netmask = results[2];
if (results[3]) obj.type = results[3];
list.push(obj);
--count || cb(null, list);
})
}
for (var key in nics) {
if (key != 'lo0' && key != 'lo' && !key.match(/^tun/)) {
count++;
var obj = { name: key };
nics[key].forEach(function(type) {
if (type.family == 'IPv4' || type.family == 4) {
obj.ip_address = type.address;
}
});
append_data(obj);
}
}
if (count == 0)
cb(new Error('No interfaces found.'))
}