networkInterfaces() added default property and parameter

This commit is contained in:
Sebastian Hildebrandt 2022-01-26 20:51:33 +01:00
parent fe0d9703a9
commit b4ae9c3ac0
6 changed files with 90 additions and 4 deletions

View File

@ -80,6 +80,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page.
| Version | Date | Comment |
| -------------- | -------------- | -------- |
| 5.11.0 | 2022-01-26 | `networkInterfaces()` added default property and parameter |
| 5.10.7 | 2022-01-21 | `processes()` reverted PR #560 (windows) |
| 5.10.6 | 2022-01-21 | `usb()` fix `users()` fix tty (windows) |
| 5.10.5 | 2022-01-19 | `processes()` fix calculation (windows) |

View File

@ -101,6 +101,7 @@ si.cpu()
(last 7 major and minor version releases)
- Version 5.11.0: `networkInterfaces()` added default property and default parameter
- Version 5.10.0: basic `android` support
- Version 5.9.0: `graphics()` added properties (macOS)
- Version 5.8.0: `disksIO()` added waitTime, waitPercent (linux)
@ -539,9 +540,10 @@ Full function reference with examples can be found at [https://systeminformation
| Function | Result object | Linux | BSD | Mac | Win | Sun | Comments |
| --------------- | ------------- | ----- | ------- | --- | --- | --- | -------- |
| si.networkInterfaces(cb) | [{...}] | X | X | X | X | X | array of network interfaces |
| si.networkInterfaces(cb) | [{...}] | X | X | X | X | X | array of network interfaces<br>With the 'default' parameter it returns<br>only the default interface |
| | [0].iface | X | X | X | X | X | interface |
| | [0].ifaceName | X | X | X | X | X | interface name (differs on Windows) |
| | [0].default | X | X | X | X | X | true if this is the default interface |
| | [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 |

View File

@ -57,6 +57,11 @@
</tr>
</thead>
<tbody>
<tr>
<th scope="row">5.11.0</th>
<td>2022-01-26</td>
<td><span class="code">networkInterfaces()</span> added default property and parameter</td>
</tr>
<tr>
<th scope="row">5.10.7</th>
<td>2022-01-21</td>

View File

@ -170,7 +170,7 @@
<img class="logo" src="assets/logo.png">
<div class="title">systeminformation</div>
<div class="subtitle"><span id="typed"></span>&nbsp;</div>
<div class="version">New Version: <span id="version">5.10.7</span></div>
<div class="version">New Version: <span id="version">5.11.0</span></div>
<button class="btn btn-light" onclick="location.href='https://github.com/sebhildebrandt/systeminformation'">View on Github <i class=" fab fa-github"></i></button>
</div>
<div class="down">
@ -206,7 +206,7 @@
</div>
<div class="row number-section">
<div class="col-xl-4 col-lg-4 col-md-4 col-12">
<div class="numbers">15,121</div>
<div class="numbers">15,185</div>
<div class="title">Lines of code</div>
</div>
<div class="col-xl-4 col-lg-4 col-md-4 col-12">

View File

@ -97,6 +97,16 @@
<td>X</td>
<td>interface name (differs on Windows)</td>
</tr>
<tr>
<td></td>
<td>[0].default</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>true if this is the default interface</td>
</tr>
<tr>
<td></td>
<td>[0].ip4</td>
@ -278,6 +288,7 @@ si.networkInterfaces().then(data => console.log(data));</code></pre class="examp
{
iface: 'lo0',
ifaceName: 'lo0',
default: false,
ip4: '127.0.0.1',
ip4subnet: '255.0.0.0',
ip6: '::1',
@ -299,6 +310,7 @@ si.networkInterfaces().then(data => console.log(data));</code></pre class="examp
{
iface: 'en0',
ifaceName: 'en0',
default: true,
ip4: '192.168.0.27',
ip4subnet: '255.255.255.0',
ip6: 'fe80::134a:1e43:abc5:d413',
@ -318,6 +330,33 @@ si.networkInterfaces().then(data => console.log(data));</code></pre class="examp
carrierChanges: 0
}, ...
]</pre>
<h5>Get Default Interface only</h5>
<p>&nbsp;&nbsp;With the 'default' parameter this function returns only the default interface</p>
<pre><code class="js">const si = require('systeminformation');
si.networkInterfaces('default').then(data => console.log(data));</code></pre class="example">
<pre class="example">
{
iface: 'en0',
ifaceName: 'en0',
default: true,
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
}</pre>
</tr>
<tr>
<td>si.networkInterfaceDefault(cb)</td>

View File

@ -692,17 +692,29 @@ function testVirtualNic(iface, ifaceName, mac) {
} else { return false; }
}
function networkInterfaces(callback, rescan) {
function networkInterfaces(callback, rescan, defaultString) {
if (typeof callback === 'string') {
defaultString = callback;
rescan = true;
callback = null;
}
if (typeof callback === 'boolean') {
rescan = callback;
callback = null;
defaultString = '';
}
if (typeof rescan === 'undefined') {
rescan = true;
}
defaultString = defaultString || '';
defaultString = '' + defaultString;
return new Promise((resolve) => {
process.nextTick(() => {
const defaultInterface = getDefaultNetworkInterface();
let ifaces = os.networkInterfaces();
let result = [];
@ -730,6 +742,7 @@ function networkInterfaces(callback, rescan) {
result.push({
iface: nic.iface,
ifaceName: nic.iface,
default: nic.iface === defaultInterface,
ip4: nic.ip4,
ip4subnet: nic.ip4subnet || '',
ip6: nic.ip6,
@ -750,6 +763,14 @@ function networkInterfaces(callback, rescan) {
});
});
_networkInterfaces = result;
if (defaultString.toLowerCase().indexOf('default') >= 0) {
result = result.filter(item => item.default);
if (result.length > 0) {
result = result[0];
} else {
result = [];
}
}
if (callback) { callback(result); }
resolve(result);
}
@ -863,6 +884,7 @@ function networkInterfaces(callback, rescan) {
result.push({
iface,
ifaceName,
default: iface === defaultInterface,
ip4,
ip4subnet,
ip6,
@ -884,6 +906,14 @@ function networkInterfaces(callback, rescan) {
}
}
_networkInterfaces = result;
if (defaultString.toLowerCase().indexOf('default') >= 0) {
result = result.filter(item => item.default);
if (result.length > 0) {
result = result[0];
} else {
result = [];
}
}
if (callback) { callback(result); }
resolve(result);
}
@ -990,6 +1020,7 @@ function networkInterfaces(callback, rescan) {
result.push({
iface,
ifaceName,
default: iface === defaultInterface,
ip4,
ip4subnet,
ip6,
@ -1011,6 +1042,14 @@ function networkInterfaces(callback, rescan) {
}
}
_networkInterfaces = result;
if (defaultString.toLowerCase().indexOf('default') >= 0) {
result = result.filter(item => item.default);
if (result.length > 0) {
result = result[0];
} else {
result = [];
}
}
if (callback) { callback(result); }
resolve(result);
});