Network

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
    const si = require('systeminformation');
    si.networkInterfaces().then(data => console.log(data));
    [
      {
        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
    const si = require('systeminformation');
    si.networkInterfaceDefault().then(data => console.log(data));
    eth0
si.networkGatewayDefault(cb) | : string | X | X | X | X | X | get default network gateway
| ##### Example
    const si = require('systeminformation');
    si.networkGatewayDefault().then(data => console.log(data));
    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
    const si = require('systeminformation');
    setInterval(function() {
      si.networkStats().then(data => {
        console.log(data);
      })
    }, 1000)
    [
      {                                 // 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
    const si = require('systeminformation');
    si.networkConnections().then(data => console.log(data));
    [
      {
        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
    const si = require('systeminformation');
    si.inetChecksite('google.com').then(data => console.log(data));
    {
      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
    const si = require('systeminformation');
    si.inetLatency().then(data => console.log(data));
    13.484
    // Example with given host IP address
    const si = require('systeminformation');
    si.inetLatency('216.58.207.142').then(data => console.log(data));
    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.