
在使用 Node.js 进行网络编程时,经常需要获取本机的 IP 地址信息。下面介绍如何在 Node.js 中获取 IPv4 和 IPv6 地址以及判断 IP 地址的类型。
要获取 IPv4 和 IPv6 地址,可以使用 Node.js 提供的
os
模块中的
networkInterfaces()
方法。该方法返回一个对象,其中包含当前系统上每个网络接口的详细信息。我们可以遍历这个对象来获取 IPv4 和 IPv6 地址。
const os = require('os');
const interfaces = os.networkInterfaces();
for (const name of Object.keys(interfaces)) {
for (const interface of interfaces[name]) {
if (interface.family === 'IPv4') {
console.log('IPv4 address:', interface.address);
}
if (interface.family === 'IPv6') {
console.log('IPv6 address:', interface.address);
}
}
}
要判断 IP 地址是 IPv4 还是 IPv6,可以使用正则表达式。下面是一个判断 IP 地址类型的示例函数:
function getIPVersion(ip) {
if (/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/.test(ip)) {
return 'IPv4';
} else if (/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/.test(ip)) {
return 'IPv6';
} else {
return 'Invalid IP address';
}
}
这个函数使用两个正则表达式来判断输入的 IP 地址是 IPv4 还是 IPv6。两个正则表达式都不匹配,则返回 "Invalid IP address"。
在 Node.js 中获取和判断 IP 地址类型的方法非常实用。通过使用
os.networkInterfaces()
方法和正则表达式,我们可以轻松地获取 IPv4 和 IPv6 地址,以及判断 IP 地址的类型。这些技能在网络编程中非常有用。