"Получение локального IP-адреса в Node.js: программируем"

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для определения локального IP-адреса в Node.js мы можем использовать модуль os и его метод networkInterfaces(). Вот пример кода, который позволит найти IPv4, который не является внутренним:

JS
Скопировать код
const os = require('os');

const localIP = Object.values(os.networkInterfaces())
  .flat()
  .find(iface => iface.family === 'IPv4' && !iface.internal)
  ?.address;

console.log('Локальный IP-адрес:', localIP); // Вау, я нашел свой IP-адрес!

Выполните этот код в Node.js и ваш локальный IP-адрес будет отображен.

Кинга Идем в IT: пошаговый план для смены профессии

Детальный обзор метода

Ваш компьютер может обладать несколькими сетевыми интерфейсами (Ethernet, Wi-Fi и др.), и каждый из них может иметь несколько IP-адресов.

Метод networkInterfaces() возвращает информацию обо всех адресах, сгруппированных по интерфейсам. Каждый интерфейс в этом объекте представлен массивом адресов.

Учёт множества сетевых интерфейсов

Если в вашем распоряжении множество сетевых интерфейсов, вы можете модифицировать код следующим образом:

JS
Скопировать код
const os = require('os');

const getAllIPv4Addresses = () => {
  const interfaces = os.networkInterfaces();
  const allAddresses = [];
  for (const interface of Object.keys(interfaces)) {
    for (const iface of interfaces[interface]) {
      if (iface.family === 'IPv4' && !iface.internal) {
        allAddresses.push({interface, address: iface.address});
      }
    }
  }
  return allAddresses;
};

console.log('Все IPv4 адреса:', getAllIPv4Addresses()); // Как ни странно, все мои IPv4 адреса тут!

Этот скрипт формирует массив объектов с названиями сетевых интерфейсов и их внешними IPv4-адресами.

Публичный адрес: выход за рамки локальной сети

Для определения публичного IP-адреса можно использовать сторонние модули или возможности DNS-разрешения.

JS
Скопировать код
// Используя модуль dns
const dns = require('dns');
const os = require('os');

dns.lookup(os.hostname(), (err, address) => {
  if (err) throw err;
  console.log('Публичный IP-адрес:', address);
});

// Или используя пакет node-ip
const ip = require('ip');
 
console.log("Публичный IP-адрес: ", ip.address()); // Вот он, мой публичный IP-адрес!

Обратите внимание: с сетевыми операциями всегда связаны определенные ошибки, так что не забывайте про аккуратную обработку исключений!

Визуализация

Воспринимайте поиск локального IP-адреса в Node.js как великое приключение:

Стойкий рыцарь (🖥️): В поисках своего локального IP-адреса в Королевстве (🌐)
JS
Скопировать код
require('os').networkInterfaces(); // Изучаем карту королевства 🏰 в поисках своего замка 🏰
🖥️🧭🌐: Рыцарь обнаруживает свой замок [192\.168.1.5] (на пример)

Практические рекомендации и советы при возникновении сложностей

В процессе определения локального IP-адреса в Node.js вы можете столкнуться с некоторыми препятствиями:

Будьте осторожны с IPv6

Это руководство посвящено исключительно IPv4. Если ваши сетевые интерфейсы используют IPv6, не забудьте адаптировать код под нужную версию.

Не обращайте внимание на loopback-адреса и внутренние адреса

Убедитесь, что ваш код игнорирует loopback и внутренние адреса, чтобы получить доступ к адресу, доступному для внешней сети. В нашем коде мы используем !iface.internal для этого.

Учитывайте специфику различных операционных систем

Отображение сетевых интерфейсов может варьироваться в зависимости от операционной системы. Поэтому всегда тестируйте свои скрипты на всех целевых платформах.

Полезные материалы

  1. OS | Документация Node.js — Официальная документация Node.js по функции os.networkInterfaces.
  2. Определение локального IP-адреса в Node.js – Stack Overflow — Обсуждение на Stack Overflow о том, как получить локальный IP в Node.js.
  3. Понимание IP-адресов, подсетей и CIDR-нотации в сетевых технологиях | DigitalOcean — Инструкция по IP-адресам и подсетям от DigitalOcean.
  4. Как найти имя сетевого интерфейса с определенным IP в Node.js — Полезный Gist о том, как определить сетевой интерфейс в Node.js.
  5. Request — npm — Модуль npm Request для выполнения HTTP-запросов.
  6. Net | Документация Node.js — Документация модуля Net в Node.js для работы с сетевыми приложениями.