UNPKG

local-lan-ipv4-address

Version:

local lan ipv4 address 本地局域网 ipv4 地址

108 lines (104 loc) 3.22 kB
const os = require('os') /* * os.networkInterfaces() * 本地服务器 windows 7 * { WLAN: * [ { address: 'fe80::c8d2:16fb:65bd:8b7e', * netmask: 'ffff:ffff:ffff:ffff::', * family: 'IPv6', * mac: 'a4:34:d9:48:5a:e4', * scopeid: 12, * internal: false, * cidr: 'fe80::c8d2:16fb:65bd:8b7e/64' }, * { address: '192.168.1.3', * netmask: '255.255.255.0', * family: 'IPv4', * mac: 'a4:34:d9:48:5a:e4', * internal: false, * cidr: '192.168.1.3/24' } ], * 'Loopback Pseudo-Interface 1': * [ { address: '::1', * netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', * family: 'IPv6', * mac: '00:00:00:00:00:00', * scopeid: 0, * internal: true, * cidr: '::1/128' }, * { address: '127.0.0.1', * netmask: '255.0.0.0', * family: 'IPv4', * mac: '00:00:00:00:00:00', * internal: true, * cidr: '127.0.0.1/8' } ], * '本地连接* 12': * [ { address: '2001:0:9d38:6ab8:286c:11a7:3f57:fefc', * netmask: 'ffff:ffff:ffff:ffff::', * family: 'IPv6', * mac: '00:00:00:00:00:00', * scopeid: 0, * internal: false, * cidr: '2001:0:9d38:6ab8:286c:11a7:3f57:fefc/64' }, * { address: 'fe80::286c:11a7:3f57:fefc', * netmask: 'ffff:ffff:ffff:ffff::', * family: 'IPv6', * mac: '00:00:00:00:00:00', * scopeid: 17, * internal: false, * cidr: 'fe80::286c:11a7:3f57:fefc/64' } ] } * * 测试服务器 * { lo: * [ { address: '127.0.0.1', * netmask: '255.0.0.0', * family: 'IPv4', * mac: '00:00:00:00:00:00', * internal: true } ], * eth0: * [ { address: '172.17.160.219', * netmask: '255.255.240.0', * family: 'IPv4', * mac: '00:00:00:00:00:00', * internal: false } ] } * * 云负载均衡服务器 * { lo: * [ { address: '127.0.0.1', * netmask: '255.0.0.0', * family: 'IPv4', * mac: '00:00:00:00:00:00', * internal: true } ], * eth0: * [ { address: '10.253.115.220', * netmask: '255.255.252.0', * family: 'IPv4', * mac: '00:00:00:00:00:00', * internal: false } ], * eth1: * [ { address: '116.62.74.16', * netmask: '255.255.252.0', * family: 'IPv4', * mac: '00:00:00:00:00:00', * internal: false } ] } */ const regex = /^(?:192\.168|10|172\.(?:1[6-9]|2[0-9]|3[01]))\./ /** * 在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下: * A类地址:10.0.0.0~10.255.255.255 * B类地址:172.16.0.0~172.31.255.255 * C类地址:192.168.0.0~192.168.255.255 * 这些IP是私有地址,是在内部网的地址,不是外部网的地址 * @returns {String} */ module.exports = function localLANIPv4Address () { let address = '127.0.0.1' const eths = os.networkInterfaces() Object.values(eths).some(networks => { return networks.some(item => { if (!item.internal && item.family === 'IPv4' && regex.test(item.address)) { address = item.address return true } }) }) return address }