domotz-remote-pawn
Version:
Domotz Agent
66 lines (60 loc) • 2.04 kB
JavaScript
var nmapVersionStringPattern = 'Nmap';
var libraryStringPattern = 'Compiled with:';
var nmapInfo = {};
var noOutput = {};
var q = require('q');
var childProcess = require('child_process');
const numericRegex = '\\d+\\.\\d+';
function parseStdOut(data) {
var libraryString;
var libraryName = '';
if (data) {
var lines = data.split(/\r?\n/g);
var versionStringFilter = lines.filter(function (line) {
if (line) {
return line.indexOf(nmapVersionStringPattern, 0) === 0;
}
});
if (versionStringFilter.length > 0) {
var versionString = versionStringFilter.toString();
var nmapVersion = versionString.match(numericRegex);
nmapInfo.nmap = nmapVersion.toString();
} else {
return noOutput;
}
var libraryStringFilter = lines.filter(function (line) {
if (line) {
return line.indexOf(libraryStringPattern, 0) === 0;
}
});
if (libraryStringFilter.length > 0) {
libraryString = libraryStringFilter[0].replace(libraryStringPattern, '').trim();
} else {
return noOutput;
}
var library = libraryString.split(' ');
library.forEach(function (line) {
var libraryVersion = line.split('-').pop();
libraryName = line.substring(0, line.lastIndexOf('-'));
if (!line.includes('-')) {
nmapInfo[line] = true;
} else {
nmapInfo[libraryName] = libraryVersion;
}
});
return nmapInfo;
}
return noOutput;
}
function getNmapInformation() {
var deferred = q.defer();
childProcess.exec('domotz_nmap --version', function (err, stdout, stderr) {
if (err || stderr) {
deferred.resolve({});
} else {
deferred.resolve(parseStdOut(stdout));
}
});
return deferred.promise;
}
module.exports.getNmapInformation = getNmapInformation;