In this section you will learn how to get detailed information about network interfaces, network connections and statistics as well as some internet related information (latency, check availability of site):
For function reference and examples we assume, that we imported systeminformation as follows:
const si = require('systeminformation');
Network Interfaces, Network Stats, Network Connections
All functions in this section return a promise or can be called with a callback function (parameter cb in the function reference)
Function | Result object | Linux | BSD | Mac | Win | Sun | Comments |
---|---|---|---|---|---|---|---|
si.networkInterfaces(cb) | [{...}] | X | X | X | X | X | array of network interfaces (objects) |
[0].iface | X | X | X | X | X | interface | |
[0].ifaceName | X | X | X | X | X | interface name (differs on Windows) | |
[0].ip4 | X | X | X | X | X | ip4 address | |
[0].ip4subnet | X | X | X | X | X | ip4 subnet mask | |
[0].ip6 | X | X | X | X | X | ip6 address | |
[0].ip6subnet | X | X | X | X | X | ip6 subnet mask | |
[0].mac | X | X | X | X | X | MAC address | |
[0].internal | X | X | X | X | X | true if internal interface | |
[0].virtual | X | X | X | X | X | true if virtual interface | |
[0].operstate | X | X | X | up / down | |||
[0].type | X | X | X | wireless / wired | |||
[0].duplex | X | X | duplex (full/half) | ||||
[0].mtu | X | X | MUT maximum transmission unit | ||||
[0].speed | X | X | X | Speed in Mbit / s | |||
[0].dhcp | X | X | X | IP address obtained by DHCP | |||
[0].dnsSuffix | X | X | DNS suffix | ||||
[0].ieee8021xAuth | X | X | IEEE 802.1x Auth | ||||
[0].ieee8021xState | X | X | X | IEEE 802.1x State | |||
[0].carrierChanges | X | # changes up/down | |||||
Example
[ { iface: 'lo0', ifaceName: 'lo0', ip4: '127.0.0.1', ip4subnet: '255.0.0.0', ip6: '::1', ip6subnet: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', mac: '', internal: true, virtual: false, operstate: 'down', type: 'wired', duplex: 'full', mtu: 16384, speed: -1, dhcp: false, dnsSuffix: '', ieee8021xAuth: '', ieee8021xState: '', carrierChanges: 0 }, { iface: 'en0', ifaceName: 'en0', ip4: '192.168.0.27', ip4subnet: '255.255.255.0', ip6: 'fe80::134a:1e43:abc5:d413', ip6subnet: 'ffff:ffff:ffff:ffff::', mac: 'xx:xx:xx:xx:xx:xx', internal: false, virtual: false, operstate: 'up', type: 'wired', duplex: 'full', mtu: 1500, speed: 1000, dhcp: true, dnsSuffix: '', ieee8021xAuth: '', ieee8021xState: '', carrierChanges: 0 }, ... ] | |||||||
si.networkInterfaceDefault(cb) | : string | X | X | X | X | X | get name of default network interface |
Example
eth0 | |||||||
si.networkGatewayDefault(cb) | : string | X | X | X | X | X | get default network gateway |
Example
192.168.0.1 | |||||||
si.networkStats(iface,cb) | [{...}] | X | X | X | X | current network stats of given interfaces, iface list: 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 | ||
[0].rx_bytes | X | X | X | X | received bytes overall | ||
[0].rx_dropped | X | X | X | X | received dropped overall | ||
[0].rx_errors | X | X | X | X | received errors overall | ||
[0].tx_bytes | X | X | X | X | transferred bytes overall | ||
[0].tx_dropped | X | X | X | X | transferred dropped overall | ||
[0].tx_errors | X | X | X | X | transferred errors overall | ||
[0].rx_sec | X | X | X | X | received bytes / second (* see notes) | ||
[0].tx_sec | X | X | X | X | transferred bytes per second (* see notes) | ||
[0].ms | X | X | X | X | interval length (for per second values) | ||
Example
[ { // first call iface: 'en0', operstate: 'up', rx_bytes: 1752866207, rx_dropped: 0, rx_errors: 0, tx_bytes: 180934681, tx_dropped: 0, tx_errors: 0, rx_sec: -1, tx_sec: -1, ms: 0 } ] [ { // second call iface: 'en0', operstate: 'up', rx_bytes: 1752866822, rx_dropped: 0, rx_errors: 0, tx_bytes: 180939820, tx_dropped: 0, tx_errors: 0, rx_sec: 624.3654822335026, tx_sec: 5217.258883248731, ms: 985 } ]... | |||||||
si.networkConnections(cb) | [{...}] | X | X | X | X | current network network connections returns an array of all connections |
|
[0].protocol | X | X | X | X | tcp or udp | ||
[0].localaddress | X | X | X | X | local address | ||
[0].localport | X | X | X | X | local port | ||
[0].peeraddress | X | X | X | X | peer address | ||
[0].peerport | X | X | X | X | peer port | ||
[0].state | X | X | X | X | like ESTABLISHED, TIME_WAIT, ... | ||
[0].pid | X | X | X | X | process ID | ||
[0].process | X | X | process name | ||||
Example
[ { protocol: 'tcp4', localaddress: '192.168.0.27', localport: '55788', peeraddress: '163.128.xxx.xxx', peerport: '443', state: 'CLOSE_WAIT', pid: 702, process: '' }, { protocol: 'tcp4', localaddress: '192.168.0.27', localport: '55761', peeraddress: '148.253.xxx.xxx', peerport: '22', state: 'ESTABLISHED', pid: 7267, process: '' }, ... ] |
Site availability, Internet Latency
Function | Result object | Linux | BSD | Mac | Win | Sun | Comments |
---|---|---|---|---|---|---|---|
si.inetChecksite(url, cb) | {...} | X | X | X | X | X | response-time (ms) to fetch given URL |
url | X | X | X | X | X | given url | |
ok | X | X | X | X | X | status code OK (2xx, 3xx) | |
status | X | X | X | X | X | status code | |
ms | X | X | X | X | X | response time in ms | |
Example
{ url: 'google.com', ok: true, status: 301, ms: 82 } | |||||||
si.inetLatency(host, cb) | : number | X | X | X | X | X | response-time (ms) to external resource host parameter is optional (default 8.8.8.8) |
Example
13.484
11.291 |
Getting correct stats values
In networkStats() the results / sec. values (rx_sec, tx_sec, ...) are calculated correctly beginning with the second call of the function. It is determined by calculating the difference of transferred bytes / IOs divided by the time between two calls of the function.
The first time you are calling one of this functions, you will get -1 for transfer rates. The second time, you should then get statistics based on the time between the two calls ...
So basically, if you e.g. need a values for filesystem stats stats every second, your code should look like this:
const si = require('systeminformation');
setInterval(function() {
si.networkStats().then(data => {
console.log(data);
})
}, 1000)
Beginning with the second call, you get network transfer values per second.