Ich habe ein einfaches node.js-Programm auf meinem Computer und möchte die lokale IP-Adresse des PCs abrufen, auf dem mein Programm ausgeführt wird. Wie bekomme ich es mit node.js?
javascript
node.js
ip
yojimbo87
quelle
quelle
Antworten:
quelle
if( details.family=='IPv4' && details.internal === false ) {
wenn Sie nur externe IPs möchten.Object.values(require('os').networkInterfaces()).reduce((r, list) => r.concat(list.reduce((rr, i) => rr.concat(i.family==='IPv4' && !i.internal && i.address || []), [])), [])
os.networkInterfaces funktioniert derzeit nicht unter Windows.Das Ausführen von Programmen zum Parsen der Ergebnisse scheint etwas zweifelhaft. Folgendes benutze ich.Dies sollte Ihre erste lokale IP-Adresse der Netzwerkschnittstelle zurückgeben.
quelle
https://github.com/indutny/node-ip
quelle
Jede IP Ihrer Maschine können Sie mit dem finden os - Modul - und das ist heimisch zu NodeJS
Alles, was Sie tun müssen, ist os.networkInterfaces () aufzurufen, und Sie erhalten eine einfach zu verwaltende Liste - einfacher als ifconfig nach Ligen auszuführen
http://nodejs.org/api/os.html#os_os_networkinterfaces
Beste
Edoardo
quelle
var address = networkInterfaces['venet0:0'][0].address
Hier ist ein Ausschnitt aus dem Code von node.js, der die Ausgabe von analysiert
ifconfig
und (asynchron) die erste gefundene IP-Adresse zurückgibt:(nur unter MacOS Snow Leopard getestet; hoffe, es funktioniert auch unter Linux)
Anwendungsbeispiel:
Wenn der zweite Parameter lautet
true
, führt die Funktion jedes Mal einen Systemaufruf aus. Andernfalls wird der zwischengespeicherte Wert verwendet.Aktualisierte Version
Gibt ein Array aller lokalen Netzwerkadressen zurück.
Getestet unter Ubuntu 11.04 und Windows XP 32
Anwendungsbeispiel für aktualisierte Version
quelle
filterRE = /\bIP-?[^:\r\n]+:\s*([^\s]+)/g;
. Abgesehen davon, großartiges Drehbuch, ein wahrer Lebensretter. Danke vielmals!Hier ist meine Dienstprogrammmethode zum Abrufen der lokalen IP-Adresse, vorausgesetzt, Sie suchen nach einer IPv4-Adresse und der Computer verfügt nur über eine echte Netzwerkschnittstelle. Es könnte leicht überarbeitet werden, ein Array von IPs für Maschinen mit mehreren Schnittstellen zurückzugeben.
quelle
getLocalIP = (interfaceName = "en0",version = "IPv4")-> iface = require('os').networkInterfaces()[interfaceName] for alias in iface if (alias.family == version && !alias.internal) return alias.address return "0.0.0.0"
Installieren Sie ein Modul namens ip like
Verwenden Sie dann diesen Code.
quelle
Das Aufrufen von ifconfig ist sehr plattformabhängig, und die Netzwerkschicht weiß, auf welchen IP-Adressen sich ein Socket befindet. Fragen Sie am besten danach. Der Knoten stellt keine direkte Methode dafür bereit, aber Sie können jeden Socket öffnen und fragen, welche lokale IP-Adresse verwendet wird. Öffnen eines Sockets für www.google.com:
Anwendungsfall:
quelle
Ihre lokale IP ist immer 127.0.0.1.
Dann gibt es die Netzwerk-IP, die Sie von
ifconfig
(* nix) oderipconfig
(win) erhalten können. Dies ist nur innerhalb des lokalen Netzwerks nützlich.Dann gibt es Ihre externe / öffentliche IP, die Sie nur erhalten können, wenn Sie den Router irgendwie danach fragen können, oder Sie können einen externen Dienst einrichten, der die Client-IP-Adresse zurückgibt, wenn er eine Anfrage erhält. Es gibt auch andere solche Dienste wie whatismyip.com.
In einigen Fällen (z. B. wenn Sie eine WAN-Verbindung haben) sind die Netzwerk-IP und die öffentliche IP identisch und können beide extern verwendet werden, um Ihren Computer zu erreichen.
Wenn sich Ihr Netzwerk und Ihre öffentlichen IP-Adressen unterscheiden, muss Ihr Netzwerkrouter möglicherweise alle eingehenden Verbindungen an Ihre Netzwerk-IP weiterleiten.
Update 2013:
Es gibt jetzt eine neue Möglichkeit, dies zu tun. Sie können das Socket-Objekt Ihrer Verbindung auf eine Eigenschaft namenslocalAddress
znet.socket.localAddress
. Es gibt die Adresse an Ihrem Ende des Sockets zurück.Am einfachsten ist es, einen zufälligen Port zu öffnen und ihn abzuhören, dann Ihre Adresse abzurufen und den Socket zu schließen.Update 2015:
Das vorherige funktioniert nicht mehr.
quelle
ifconfig
oder durchführenipconfig
und die Antwortzeichenfolge analysieren müssen?ifconfig
ist also so ziemlich der einzige Weg.net.socket
Rückkehrundefined
ab 2015, daher funktioniert die "neue Art, dies zu tun" nicht mehr. Es gibt einenet.Socket
, aber es hat keinelocalAddress
Eigenschaft.Verwenden Sie das IP-Modul npm
quelle
Der richtige Liner für Unterstrich und Lodash ist:
quelle
.find({family: 'IPv4', internal: false})
auch für einen kürzeren, eleganteren CodeHier ist die sauberste und einfachste Antwort ohne Abhängigkeiten, die auf allen Plattformen funktioniert.
quelle
Ich weiß nur, dass ich die IP-Adresse von Anfang an haben wollte
192.168.
. Dieser Code gibt Ihnen Folgendes:Natürlich können Sie die Nummern auch einfach ändern, wenn Sie nach einer anderen suchen.
quelle
192.168
?192.168.
, weshalb ich das gewählt habe.Wenn Sie unter Linux und MacOS Ihre IP-Adressen synchron abrufen möchten, versuchen Sie dies.
Das Ergebnis wird ungefähr so sein.
quelle
Ich habe ein Node.js-Modul geschrieben , das Ihre lokale IP-Adresse anhand der Netzwerkschnittstelle ermittelt, die Ihr Standard-Gateway enthält.
Dies ist zuverlässiger als das Auswählen einer Schnittstelle
os.networkInterfaces()
oder DNS-Suche des Hostnamens. Es kann virtuelle VMware-Schnittstellen, Loopback- und VPN-Schnittstellen ignorieren und funktioniert unter Windows, Linux, Mac OS und FreeBSD. Unter der Haube wird die Ausgabe ausgeführtroute.exe
odernetstat
analysiert.quelle
Hier ist eine vereinfachte Version in Vanille-Javascript, um eine einzelne IP zu erhalten:
quelle
Für alle, die an Kürze interessiert sind, sind hier einige "Einzeiler", für die keine Plugins / Abhängigkeiten erforderlich sind, die nicht Teil einer Standardknoteninstallation sind:
Öffentliches IPv4 und IPv6 von eth0 als Array:
Erste öffentliche IP von eth0 (normalerweise IPv4) als String:
quelle
en0
unden1
für Ethernet und WLAN. Unter Windows habe ichLocal Area Connection
undWireless Network Connection
.Google hat mich auf diese Frage verwiesen, als ich nach "node.js get server ip" gesucht habe. Geben wir also eine alternative Antwort für diejenigen, die dies in ihrem node.js- Serverprogramm versuchen (möglicherweise im Fall des Originalplakats).
In dem trivialsten Fall, in dem der Server nur an eine IP-Adresse gebunden ist, sollte es nicht erforderlich sein, die IP-Adresse zu bestimmen, da wir bereits wissen, an welche Adresse wir sie gebunden haben (z. B. zweiter Parameter, der an die
listen()
Funktion übergeben wurde).In dem weniger trivialen Fall, in dem der Server an mehrere IP-Adressen gebunden ist, müssen wir möglicherweise die IP-Adresse der Schnittstelle ermitteln, mit der ein Client verbunden ist. Und wie von Tor Valamo kurz vorgeschlagen, können wir diese Informationen heutzutage leicht von der angeschlossenen Steckdose und ihrer
localAddress
Eigenschaft erhalten.Wenn das Programm beispielsweise ein Webserver ist:
Und wenn es sich um einen generischen TCP-Server handelt:
Wenn Sie ein Serverprogramm ausführen, bietet diese Lösung eine sehr hohe Portabilität, Genauigkeit und Effizienz.
Weitere Einzelheiten finden Sie unter:
quelle
Basierend auf einem Kommentar oben funktioniert Folgendes für die aktuelle Version von Node:
Dem Kommentar zu einer der obigen Antworten fehlte der Anruf an
values()
. Es sieht so aus, als würdeos.networkInterfaces()
jetzt ein Objekt anstelle eines Arrays zurückgegeben.quelle
_.chain(..)
kann als neu geschrieben werden_(...)
, das.filter(..)
kann als neu geschrieben werden.where({family: 'IPv4', internal: false})
, und Sie können das Finale löschen,value()
weil.first()
es für Sie beim Verketten erledigt wird.Hier ist eine Variation der obigen Beispiele. Es wird darauf geachtet, vMware-Schnittstellen usw. herauszufiltern. Wenn Sie keinen Index übergeben, werden alle Adressen zurückgegeben, andernfalls möchten Sie ihn möglicherweise auf 0 setzen. Übergeben Sie einfach null, um alle zu erhalten, aber Sie werden das klären. Sie können auch ein anderes Argument für den Regex-Filter übergeben, wenn Sie dazu neigen, etwas hinzuzufügen
quelle
Ich konnte dies nur mit dem Knoten js tun
Als Knoten JS
Als Bash-Skript (muss Knoten js installiert sein)
quelle
Hier ist meine Variante, mit der sowohl IPv4- als auch IPv6-Adressen auf tragbare Weise abgerufen werden können:
Hier ist eine CoffeeScript-Version derselben Funktion:
Beispielausgabe für
console.log(getLocalIPs())
quelle
Wenn Sie sich für die ganze Kürze interessieren , verwenden Sie hier lodash :
quelle
Ähnlich wie bei anderen Antworten, aber prägnanter:
quelle
Object.keys(interfaces).reduce(...)
mitObject.values(interfaces).flat()
und es würde dasselbe sein.Ein Liner für MACs erste lokale Hostadresse.
Wenn Sie Apps auf Mac OS entwickeln und diese auf dem Telefon testen möchten und Ihre App die IP-Adresse des lokalen Hosts automatisch auswählen muss.
quelle
Hier ist ein hübscher kleiner Einzeiler für Sie, der dies funktional erledigt:
quelle
reduce
und den Anruf anmap
durch einen Anruf an ersetzenflatMap
.Viele Male habe ich finde es mehrere interne und externe Verkleidungs Schnittstellen zur Verfügung (Beispiel:
10.0.75.1
,172.100.0.1
,192.168.2.3
), und es ist die externe ein , dass ich wirklich nach (172.100.0.1
).Für den Fall, dass jemand anderes ein ähnliches Problem hat, hier noch eine Einstellung dazu, die hoffentlich hilfreich sein kann ...
quelle
Ich benutze node.js 0.6.5
Hier ist was ich tue
quelle
hostname -I
(Großbuchstaben i). Es gibt eine Liste aller zugewiesenen IP-Adressen des Geräts zurück. Die erste IP-Adresse ist genau das, was Sie brauchen. Diese IP-Adresse ist diejenige, die an die aktuelle Schnittstelle angeschlossen ist, die aktiv ist.Hier ist eine Multi-IP-Version von Jhurlimans Antwort oben:
quelle
Mir ist klar, dass dies ein alter Thread ist, aber ich möchte aus folgenden Gründen eine Verbesserung der Top-Antwort anbieten:
Die Aufzählung für ... in ... sollte überprüft werden, um sicherzustellen, dass das Objekt, über das aufgezählt wird, die gesuchte Eigenschaft enthält. Da javsacript lose geschrieben ist und das for ... in ... jedes zu handhabende willkürliche Objekt übergeben werden kann; Es ist sicherer zu überprüfen, ob die gesuchte Immobilie verfügbar ist.
quelle