| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | 
							- 'use strict';
 
- const os = require('os');
 
- const defaultGateway = require('default-gateway');
 
- const ipaddr = require('ipaddr.js');
 
- function findIp(gateway) {
 
- 	const interfaces = os.networkInterfaces();
 
- 	const gatewayIp = ipaddr.parse(gateway);
 
- 	let ip;
 
- 	// Look for the matching interface in all local interfaces
 
- 	Object.keys(interfaces).some(name => {
 
- 		return interfaces[name].some(addr => {
 
- 			const prefix = ipaddr.parse(addr.netmask).prefixLengthFromSubnetMask();
 
- 			const net = ipaddr.parseCIDR(`${addr.address}/${prefix}`);
 
- 			if (net[0] && net[0].kind() === gatewayIp.kind() && gatewayIp.match(net)) {
 
- 				ip = net[0].toString();
 
- 			}
 
- 			return Boolean(ip);
 
- 		});
 
- 	});
 
- 	return ip;
 
- }
 
- function promise(family) {
 
- 	return defaultGateway[family]().then(result => {
 
- 		return findIp(result.gateway) || null;
 
- 	}).catch(() => null);
 
- }
 
- function sync(family) {
 
- 	try {
 
- 		const result = defaultGateway[family].sync();
 
- 		return findIp(result.gateway) || null;
 
- 	} catch (error) {
 
- 		return null;
 
- 	}
 
- }
 
- const internalIp = {};
 
- internalIp.v6 = () => promise('v6');
 
- internalIp.v4 = () => promise('v4');
 
- internalIp.v6.sync = () => sync('v6');
 
- internalIp.v4.sync = () => sync('v4');
 
- module.exports = internalIp;
 
- // TODO: Remove this for the next major release
 
- module.exports.default = internalIp;
 
 
  |