You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							51 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
	
	
							51 lines
						
					
					
						
							1.3 KiB
						
					
					
				'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;
 | 
						|
 |