我在我的电脑上运行了一个简单的Node.js程序,我想获取运行该程序的PC的本地IP地址。如何使用Node.js获取它?
我在我的电脑上运行了一个简单的Node.js程序,我想获取运行该程序的PC的本地IP地址。如何使用Node.js获取它?
无论是Underscore.js还是Lodash,正确的一行代码为:
var ip = require('underscore')
.chain(require('os').networkInterfaces())
.values()
.flatten()
.find({family: 'IPv4', internal: false})
.value()
.address;
.find({family: 'IPv4', internal: false})
来编写更短、更优雅的代码。 - dcohenb我可能对这个问题迟到了,但是如果有人想要一个ES6的一行解决方案来获取IP地址数组,那么这应该对你有所帮助:
Object.values(require("os").networkInterfaces())
.flat()
.filter(({ family, internal }) => family === "IPv4" && !internal)
.map(({ address }) => address)
作为
Object.values(require("os").networkInterfaces())
将返回一个数组的数组,因此使用flat()
将其展平为单个数组
.filter(({ family, internal }) => family === "IPv4" && !internal)
将数组过滤,只包括IPv4地址,并且如果它不是内部地址
最后
.map(({ address }) => address)
将仅返回过滤数组中的IPv4地址
因此结果将是[ '192.168.xx.xx' ]
如果需要,您可以获取该数组的第一个索引或更改过滤条件
操作系统
使用的是Windows
这里可能是没有依赖关系并且适用于所有平台的最干净、最简单的答案。
const { lookup } = require('dns').promises;
const { hostname } = require('os');
async function getMyIPAddress(options) {
return (await lookup(hostname(), options))
.address;
}
我知道的是我想要以192.168.
开头的IP地址。你可以使用以下代码来获取该地址:
function getLocalIp() {
const os = require('os');
for(let addresses of Object.values(os.networkInterfaces())) {
for(let add of addresses) {
if(add.address.startsWith('192.168.')) {
return add.address;
}
}
}
}
当然,如果你想寻找其他数字,你可以直接更改数字。
192.168
开头怎么办? - anufunction getServerIp() {
const os = require('os');
const ifaces = os.networkInterfaces();
let values = Object.keys(ifaces).map(function(name) {
return ifaces[name];
});
values = [].concat.apply([], values).filter(function(val){
return val.family == 'IPv4' && val.internal == false;
});
return values.length ? values[0].address : '0.0.0.0';
}
我可以仅使用Node.js完成这个任务。
var os = require( 'os' );
var networkInterfaces = Object.values(os.networkInterfaces())
.reduce((r,a) => {
r = r.concat(a)
return r;
}, [])
.filter(({family, address}) => {
return family.toLowerCase().indexOf('v4') >= 0 &&
address !== '127.0.0.1'
})
.map(({address}) => address);
var ipAddresses = networkInterfaces.join(', ')
console.log(ipAddresses);
function ifconfig2 ()
{
node -e """
var os = require( 'os' );
var networkInterfaces = Object.values(os.networkInterfaces())
.reduce((r,a)=>{
r = r.concat(a)
return r;
}, [])
.filter(({family, address}) => {
return family.toLowerCase().indexOf('v4') >= 0 &&
address !== '127.0.0.1'
})
.map(({address}) => address);
var ipAddresses = networkInterfaces.join(', ')
console.log(ipAddresses);
"""
}
对于Linux和macOS用户,如果您想通过同步方式获取您的IP地址,请尝试以下方法:
var ips = require('child_process').execSync("ifconfig | grep inet | grep -v inet6 | awk '{gsub(/addr:/,\"\");print $2}'").toString().trim().split("\n");
console.log(ips);
['192.168.3.2', '192.168.2.1']
os.networkInterfaces()
或主机名的DNS查找中选择接口更可靠。它可以忽略VMware虚拟接口、环回和VPN接口,并且在Windows、Linux、Mac OS和FreeBSD上都可以工作。在底层,它执行route.exe
或netstat
并解析输出。var localIpV4Address = require("local-ipv4-address");
localIpV4Address().then(function(ipAddress){
console.log("My IP address is " + ipAddress);
// My IP address is 10.4.4.137
});
在macOS上开发应用程序时,如果您想在手机上测试它并且需要您的应用程序自动选择本地主机IP地址,请使用以下代码:
require('os').networkInterfaces().en0.find(elm => elm.family=='IPv4').address
node
os.networkInterfaces().en0.find(elm => elm.family=='IPv4').address
对于对简洁性感兴趣的任何人,以下是一些“单行代码”,它们不需要插件/依赖项,这些依赖项不是标准Node.js安装的一部分:
eth0的公共IPv4和IPv6地址作为数组:
var ips = require('os').networkInterfaces().eth0.map(function(interface) {
return interface.address;
});
eth0的第一个公共IP地址(通常为IPv4)作为字符串:
var ip = require('os').networkInterfaces().eth0[0].address;
en0
和en1
。而在Windows上,则是本地连接
和无线网络连接
。 - xverges