Ik heb het niet over
127.0.0.1
Maar eerder degene die andere computers zouden gebruiken om toegang te krijgen tot de machine, bijvoorbeeld
192.168.1.6
Antwoord 1, autoriteit 100%
http://nodejs.org/api/os.html#os_os_networkinterfaces
var os = require('os');
var interfaces = os.networkInterfaces();
var addresses = [];
for (var k in interfaces) {
for (var k2 in interfaces[k]) {
var address = interfaces[k][k2];
if (address.family === 'IPv4' && !address.internal) {
addresses.push(address.address);
}
}
}
console.log(addresses);
Antwoord 2, autoriteit 85%
https://github.com/indutny/node-ip
var ip = require("ip");
console.dir ( ip.address() );
Antwoord 3, autoriteit 8%
Mijn versie die nodig was voor een compact script met één bestand, hoop nuttig te zijn voor anderen:
var ifs = require('os').networkInterfaces();
var result = Object.keys(ifs)
.map(x => [x, ifs[x].filter(x => x.family === 'IPv4')[0]])
.filter(x => x[1])
.map(x => x[1].address);
Of om de oorspronkelijke vraag te beantwoorden:
var ifs = require('os').networkInterfaces();
var result = Object.keys(ifs)
.map(x => ifs[x].filter(x => x.family === 'IPv4' && !x.internal)[0])
.filter(x => x)[0].address;
Antwoord 4, autoriteit 7%
$ npm install --save quick-local-ip
gevolgd door
var myip = require('quick-local-ip');
//getting ip4 network address of local system
myip.getLocalIP4();
//getting ip6 network address of local system
myip.getLocalIP6();
Antwoord 5, autoriteit 4%
https://github.com/dominictarr/my-local-ip
$ npm install -g my-local-ip
$ my-local-ip
of
$ npm install --save my-local-ip
$ node
> console.log(require('my-local-ip')())
Een zeer kleine module die precies dit doet.
Antwoord 6
wilde one-liner inkomend
gebaseerd op geaccepteerd antwoord, zal deze een array van objecten bouwen met voorwaardelijke invoer, afhankelijk van adreseigenschappen
[{name: {interface name}, ip: {ip address}}, ...]
const ips = Object.entries(require("os").networkInterfaces()).reduce((acc, iface) => [...acc, ...(iface[1].reduce((acc, address) => acc || (address.family === "IPv4" && !address.internal), false) ? [{name: iface[0], ip: iface[1].filter(address => address.family === "IPv4" && !address.internal).map(address => address.address)[0]}] : [])], []);
console.log(ips);
Uitgelegd:
const ips = Object.entries(require("os").networkInterfaces()) // fetch network interfaces
.reduce((acc, iface) => [ // reduce to build output object
...acc, // accumulator
...(
iface[1].reduce((acc, address) => acc || (address.family === "IPv4" && !address.internal), false) ? // conditional entry
[ // validate, insert it in output
{ // create {name, ip} object
name: iface[0], // interface name
ip: iface[1] // interface IP
.filter(address => address.family === "IPv4" && !address.internal) // check is IPv4 && not internal
.map(address => address.address)[0] // get IP
}
]
:
[] // ignore interface && ip
)
], []);
Uitvoervoorbeeld:
Array(4) [Object, Object, Object, Object]
length:4
__proto__:Array(0) [, …]
0:Object {name: "vEthernet (WSL)", ip: "172.31.xxx.x"}
1:Object {name: "Ethernet", ip: "10.0.x.xx"}
2:Object {name: "VMware Network Adapter VMnet1", ip: "192.168.xxx.x"}
3:Object {name: "VMware Network Adapter VMnet8", ip: "192.168.xx.x"}
Antwoord 7
Sinds Node versie 0.9.6 is er een eenvoudige manier om het IP-adres van de server op basis van elk verzoek te krijgen. Dit kan belangrijk zijn als uw machine meerdere IP-adressen heeft of zelfs als u iets op localhost doet.
req.socket.localAddress
retourneert het adres van het machineknooppunt waarop wordt uitgevoerd op basis van de huidige verbinding.
Als je een openbaar IP-adres hebt van 1.2.3.4
en iemand raakt je node-server van buitenaf, dan is de waarde voor req.socket.localAddress
"1.2.3.4"
.
Als u dezelfde server van localhost bereikt, is het adres "127.0.0.1"
Als uw server meerdere openbare adressen heeft, is de waarde van req.socket.localAddress
het juiste adres van de socketverbinding.
Antwoord 8
Een beetje aangepast Ebrahims antwoordmet wat es6 en modulesyntaxis, voor slankere code:
import { networkInterfaces } from "os";
const netInterfaces = networkInterfaces();
const [{ address }] = Object.values(netInterfaces).flatMap((netInterface) =>
netInterface.filter((prop) => prop.family === "IPv4" && !prop.internal)
);
console.log(address) // -> '192.168...'