2012-05-25 43 views
55

我不是指如何获取Node.js中的本地IP地址?

127.0.0.1

反倒是其他计算机将使用例如访问本机的一个

192.168.1.6

+1

您是否搜索谷歌? http://forum.webfaction.com/viewtopic.php?id=4500 – Nick

+0

http://stackoverflow.com/a/3654601/1202784 – lfergon

+0

[在node.js中获取本地IP地址](http:// stackoverflow.com/questions/3653065/get-local-ip-address-in-node-js) – alessioalex

回答

95

http://nodejs.org/api/os.html#os_os_networkinterfaces

var os = require('os'); 

var interfaces = os.networkInterfaces(); 
var addresses = []; 
for (var k in interfaces) { 
    for (var k2 in interfaces[k]) { 
     var address = interfaces[k][k2]; 
     if (address.family === 'IPv4' && !address.internal) { 
      addresses.push(address.address); 
     } 
    } 
} 

console.log(addresses); 
+6

对于那些搜索interwebz的人来说,这个通常被称为网络IP。 – jonathanberi

+2

我采用了这种技术,并将其封装到称为接口地址的模块中。看看这里https://github.com/nisaacson/interface-addresses – Noah

+1

只是为了理解,为什么有多个IP地址?当我用gulp运行它时,得到:'en0','vnic0','vnic01'。 'en0'是一个浏览器同步显示给我的。 –

82

https://github.com/indutny/node-ip

var ip = require("ip"); 
console.dir (ip.address()); 
+3

我希望我可以再次upvote ... – theonlygusti

+1

这是最短的解决方案 –

+8

事实上,如果你只需要IP,这个解决方案比接受的长度大380线,因为你需要包含'node-ip' – wacko

8
$ npm install --save quick-local-ip 

通过

follwed
var myip = require('quick-local-ip'); 

//getting ip4 network address of local system 
myip.getLocalIP4(); 

//getting ip6 network address of local system 
myip.getLocalIP6(); 
5

我的版本,这需要一个紧凑和单个文件的脚本,希望能对他人有用:

var ifs = require('os').networkInterfaces(); 
var result = Object.keys(ifs) 
    .map(x => [x, ifs[x].filter(x => x.family === 'IPv4')[0]]) 
    .filter(x => x[1]) 
    .map(x => x[1].address); 

或回答原来的问题:

var ifs = require('os').networkInterfaces(); 
var result = Object.keys(ifs) 
    .map(x => ifs[x].filter(x => x.family === 'IPv4' && !x.internal)[0]) 
    .filter(x => x)[0].address; 
+0

那些loooooong 1-liners正在杀死我。宁愿它多行&缩进。性感的解决方案。 –

+1

没问题。完成:) –