nodejs中獲取內網ip地址
阿新 • • 發佈:2019-01-02
今天同事有個需求,希望用nodejs裡的web伺服器的對應的站點可以支援內網訪問,後來發現修改express裡的hostname屬性為自己的內網ip就可以了。但是問題是,我們的機器都是自動獲取內網ip,那麼這次寫死的hostname下次基本上就不能用了,於是我們想到了在nodejs裡動態獲取內網ip,並且把值賦給express的open方法就可以了,於是我按照這個思路開工了。
我們先了解怎麼獲取內網ip,網上的通用方法我試了下,在我機器裡是無效的,除錯了下才發現了它這個不是完全通用的,於是我針對公司這邊的內網環境做了修改。
網上通用的寫法:
var os = require('os'); function getLocalIP() { var map = []; var ifaces = os.networkInterfaces(); console.log(ifaces); for (var dev in ifaces) { if (dev.indexOf('eth0') != -1) { var tokens = dev.split(':'); var dev2 = null; if (tokens.length == 2) { dev2 = 'eth1:' + tokens[1]; } else if (tokens.length == 1) { dev2 = 'eth1'; } if (null == ifaces[dev2]) { continue; } // 找到eth0和eth1分別的ip var ip = null, ip2 = null; ifaces[dev].forEach(function(details) { if (details.family == 'IPv4') { ip = details.address; } }); ifaces[dev2].forEach(function(details) { if (details.family == 'IPv4') { ip2 = details.address; } }); if (null == ip || null == ip2) { continue; } // 將記錄新增到map中去 if (ip.indexOf('10.') == 0 || ip.indexOf('172.') == 0 || ip.indexOf('192.') == 0) { map.push({"intranet_ip" : ip, "internet_ip" : ip2}); } else { map.push({"intranet_ip" : ip2, "internet_ip" : ip}); } } } return map; } console.log(getLocalIP());
修改後的(是不是簡單的多了,我只求能用就行,我這個可不一定適用於你哦,只不過給大家個思路而已)
var os = require('os'); //獲取內網ip function getLocalIp(){ var map = []; var ifaces = os.networkInterfaces(); for (var dev in ifaces) { if(ifaces[dev][1].address.indexOf('192.168') != -1) { return ifaces[dev][1].address; } } return map; } exports.getLocalIp=getLocalIp;
接下來修改Grunt的express模組的hostnam屬性
hostname: getLocalIP()
大功告成!