Skip to content

Commit

Permalink
Validate nic name under linux
Browse files Browse the repository at this point in the history
  • Loading branch information
tomas committed Jan 24, 2024
1 parent 4a19ccd commit 5599ed6
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion lib/linux.js
Expand Up @@ -13,12 +13,21 @@ function trim_exec(cmd, cb) {
})
}

function ensure_valid_nic(str) {
if (str.match(/[^\w]/))
throw new Error("Invalid nic name given: " + str);
}

// 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) {
exec(cmd, function(err, stdout, stderr) {
if (err) return cb(err);

if (stderr.toString().match('not found')) {
return cb(new Error('Command failed: ' + stderr.toString().trim()))
}

var raw = stdout.toString().trim().split('\n');
if (raw.length === 0 || raw === [''])
return cb(new Error('No active network interface found.'));
Expand All @@ -28,21 +37,25 @@ exports.get_active_network_interface_name = function(cb) {
};

exports.interface_type_for = function(nic_name, cb) {
ensure_valid_nic(nic_name);
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) {
ensure_valid_nic(nic_name);
var cmd = 'cat /sys/class/net/' + nic_name + '/address';
trim_exec(cmd, cb);
};

exports.gateway_ip_for = function(nic_name, cb) {
ensure_valid_nic(nic_name);
trim_exec("ip r | grep " + nic_name + " | grep default | cut -d ' ' -f 3 | head -n1", cb);
};

exports.netmask_for = function(nic_name, cb) {
ensure_valid_nic(nic_name);
var cmd = "ifconfig " + nic_name + " 2> /dev/null | egrep 'netmask|Mask:' | awk '{print $4}' | sed 's/Mask://'";
trim_exec(cmd, cb);
};
Expand Down

0 comments on commit 5599ed6

Please sign in to comment.