Получить локальный IP-адрес в node.js - PullRequest
269 голосов
/ 06 сентября 2010

На моем компьютере запущена простая программа node.js, и я хочу получить локальный IP-адрес ПК, на котором запущена моя программа. Как мне получить его с помощью node.js?

Ответы [ 36 ]

1 голос
/ 23 июля 2013

Вот версия ответа Джурлимана для нескольких ip:

function getIPAddresses() {

    var ipAddresses = [];

    var interfaces = require('os').networkInterfaces();
    for (var devName in interfaces) {
        var iface = interfaces[devName];
        for (var i = 0; i < iface.length; i++) {
            var alias = iface[i];
            if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
                ipAddresses.push(alias.address);
            }
        }
    }

    return ipAddresses;
}
1 голос
/ 23 августа 2018

Я смог сделать это, используя только узел js

как узел 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);

В качестве скрипта bash (необходим установленный узел js)

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);
    """
}
0 голосов
/ 31 мая 2016

Принятый ответ асинхронный, я хотел синхронную версию, надеюсь, это кому-нибудь поможет.

var os = require('os');
var ifaces = os.networkInterfaces();

console.log(JSON.stringify(ifaces, null, 4));

for (var iface in ifaces) {
  var iface = ifaces[iface];
  for (var alias in iface) {
    var alias = iface[alias];

    console.log(JSON.stringify(alias, null, 4));

    if ('IPv4' !== alias.family || alias.internal !== false) {
      debug("skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses");
      continue;
    }
    console.log("Found ipaddress: " + alias.address);
    return alias.address;
  }
}
return false;
0 голосов
/ 07 марта 2018

Если вы не хотите устанавливать зависимости и используете систему * nix, вы можете сделать:

hostname -I

И вы получите все адреса для хоста, вы можете использовать эту строку в узле:

const exec = require('child_process').exec;
let cmd = "hostname -I";
exec(cmd, function(error, stdout, stderr)
{
  console.log(stdout + error + stderr);
});

Это одна строка, и вам не нужны другие библиотеки, такие как 'os' или 'node-ip', которые могут добавить случайную сложность вашему коду.

hostname -h

Isтакже ваш друг; -)

Надеюсь, это поможет!

0 голосов
/ 14 апреля 2016

Большой вопрос: «Почему?»

Если вам нужно знать сервер, на котором слушает ваш NODE, вы можете использовать req.hostname.

0 голосов
/ 17 февраля 2014

Вот вариант, который позволяет вам получить локальный IP-адрес (проверено на Mac и Win):


var
    // Local ip address that we're trying to calculate
    address
    // Provides a few basic operating-system related utility functions (built-in)
    ,os = require('os')
    // Network interfaces
    ,ifaces = os.networkInterfaces();


// Iterate over interfaces ...
for (var dev in ifaces) {

    // ... and find the one that matches the criteria
    var iface = ifaces[dev].filter(function(details) {
        return details.family === 'IPv4' && details.internal === false;
    });

    if(iface.length > 0) address = iface[0].address;
}

// Print the result
console.log(address); // 10.25.10.147
...