diff --git a/README.md b/README.md index 3b84853..9fa10d1 100644 --- a/README.md +++ b/README.md @@ -435,6 +435,7 @@ I also created a nice little command line tool called [mmon][mmon-github-url] ( | | [0].speed | X | | X | X | | speed in MBit / s | | | [0].carrierChanges | X | | | | | # changes up/down | | si.networkInterfaceDefault(cb) | : string | X | X | X | X | X | get name of default network interface | +| si.networkGatewayDefault(cb) | : string | X | X | X | X | X | get default network gateway | | si.networkStats(ifaces,cb) | [{...}] | X | X | X | X | | current network stats of given interfaces
iface list: space or comma separated
iface parameter is optional
defaults to first external network interface,
Pass '*' for all interfaces | | | [0].iface | X | X | X | X | | interface | | | [0].operstate | X | X | X | X | | up / down | diff --git a/docs/index.html b/docs/index.html index 536300b..ad733b3 100644 --- a/docs/index.html +++ b/docs/index.html @@ -191,7 +191,7 @@
-
9,371
+
9,445
Lines of code
diff --git a/docs/network.html b/docs/network.html index a55f65c..89865b7 100644 --- a/docs/network.html +++ b/docs/network.html @@ -215,6 +215,16 @@ X get name of default network interface + + si.networkGatewayDefault(cb) + : string + X + X + X + X + X + get default network gateway + si.networkStats(iface,cb) [{...}] diff --git a/lib/index.d.ts b/lib/index.d.ts index c4991bf..f7f5435 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -643,6 +643,7 @@ export function disksIO(cb?: (data: Systeminformation.DisksIoData) => any): Prom export function diskLayout(cb?: (data: Systeminformation.DiskLayoutData[]) => any): Promise; export function networkInterfaceDefault(cb?: (data: string) => any): Promise; +export function networkGatewayDefault(cb?: (data: string) => any): Promise; export function networkInterfaces(cb?: (data: Systeminformation.NetworkInterfacesData[]) => any): Promise; export function networkStats(ifaces?: string, cb?: (data: Systeminformation.NetworkStatsData[]) => any): Promise; diff --git a/lib/index.js b/lib/index.js index c2057be..07e62a0 100644 --- a/lib/index.js +++ b/lib/index.js @@ -347,6 +347,7 @@ exports.disksIO = filesystem.disksIO; exports.diskLayout = filesystem.diskLayout; exports.networkInterfaceDefault = network.networkInterfaceDefault; +exports.networkGatewayDefault = network.networkGatewayDefault; exports.networkInterfaces = network.networkInterfaces; exports.networkStats = network.networkStats; exports.networkConnections = network.networkConnections; diff --git a/lib/network.js b/lib/network.js index eb073f1..61afdb5 100644 --- a/lib/network.js +++ b/lib/network.js @@ -1002,3 +1002,73 @@ function networkConnections(callback) { } exports.networkConnections = networkConnections; + +function networkGatewayDefault(callback) { + + return new Promise((resolve) => { + process.nextTick(() => { + let result = ''; + if (_linux || _freebsd || _openbsd || _netbsd) { + let cmd = 'ip route get 1'; + try { + exec(cmd, { maxBuffer: 1024 * 20000 }, function (error, stdout) { + if (!error) { + let lines = stdout.toString().split('\n'); + const line = lines && lines[0] ? lines[0] : ''; + let parts = line.split(' via '); + if (parts && parts[1]) { + parts = parts[1].split(' '); + result = parts[0]; + } + if (callback) { + callback(result); + } + resolve(result); + } + }); + } catch (e) { + if (callback) { callback(result); } + resolve(result); + } + } + if (_darwin) { + let cmd = 'route -n get default'; + try { + exec(cmd, { maxBuffer: 1024 * 20000 }, function (error, stdout) { + if (!error) { + let lines = stdout.toString().split('\n').map(line => line.trim()); + result = util.getValue(lines, 'gateway'); + if (callback) { + callback(result); + } + resolve(result); + } + }); + } catch (e) { + if (callback) { callback(result); } + resolve(result); + } + } + if (_windows) { + try { + util.powerShell('Get-CimInstance -ClassName Win32_IP4RouteTable | Where-Object { $_.Destination -eq \'0.0.0.0\' -and $_.Mask -eq \'0.0.0.0\' }).InterfaceIndex') + .then(data => { + let lines = data.toString().split('\r\n'); + result = lines && lines[0] ? lines[0] : ''; + if (callback) { + callback(result); + } + resolve(result); + + }); + } catch (e) { + if (callback) { callback(result); } + resolve(result); + } + } + }); + }); +} + + +exports.networkGatewayDefault = networkGatewayDefault;