手机版 收藏 导航

使用 Node.js 获取 IPv4 和 IPv6 地址的方法_如何在 Node.js 中判断 IP 地址是 IPv4 还是 IPv6

原创   www.link114.cn   2023-12-16 10:29:15

使用 Node.js 获取 IPv4 和 IPv6 地址的方法_如何在 Node.js 中判断 IP 地址是 IPv4 还是 IPv6

在使用 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 地址的类型。这些技能在网络编程中非常有用。