J'ai un programme node.js simple en cours d'exécution sur ma machine et je veux obtenir l'adresse IP locale du PC sur lequel mon programme s'exécute. Comment l'obtenir avec node.js?
javascript
node.js
ip
yojimbo87
la source
la source
Réponses:
la source
if( details.family=='IPv4' && details.internal === false ) {
si vous voulez juste des IP externes.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 en ce moment ne fonctionne pas sur Windows.L'exécution de programmes pour analyser les résultats semble un peu aléatoire. Voici ce que j'utilise.Cela devrait renvoyer votre première IP locale d'interface réseau.
la source
https://github.com/indutny/node-ip
la source
Toute IP de votre machine que vous pouvez trouver en utilisant le module os - et qui est native de NodeJS
Tout ce que vous devez faire est d'appeler os.networkInterfaces () et vous obtiendrez une liste facile à gérer - plus facile que d'exécuter ifconfig par ligues
http://nodejs.org/api/os.html#os_os_networkinterfaces
Meilleur
Edoardo
la source
var address = networkInterfaces['venet0:0'][0].address
Voici un extrait de code node.js qui analysera la sortie de
ifconfig
et (de manière asynchrone) renverra la première adresse IP trouvée:(testé sur MacOS Snow Leopard uniquement; j'espère que cela fonctionne aussi sur Linux)
Exemple d'utilisation:
Si le deuxième paramètre est
true
, la fonction exécutera un appel système à chaque fois; sinon, la valeur mise en cache est utilisée.Version mise à jour
Renvoie un tableau de toutes les adresses de réseau local.
Testé sur Ubuntu 11.04 et Windows XP 32
Exemple d'utilisation pour la version mise à jour
la source
filterRE = /\bIP-?[^:\r\n]+:\s*([^\s]+)/g;
. Mis à part cela, un excellent script, une véritable bouée de sauvetage. Merci beaucoup!Voici ma méthode utilitaire pour obtenir l'adresse IP locale, en supposant que vous recherchez une adresse IPv4 et que la machine n'a qu'une seule interface réseau réelle. Il pourrait facilement être refactorisé pour renvoyer un tableau d'adresses IP pour les machines multi-interfaces.
la source
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"
Installez un module appelé ip comme
puis utilisez ce code.
la source
Appeler ifconfig est très dépendant de la plate-forme, et la couche réseau sait quelles adresses IP un socket est activé, il est donc préférable de le demander. Node n'expose pas une méthode directe pour ce faire, mais vous pouvez ouvrir n'importe quel socket et demander quelle adresse IP locale est utilisée. Par exemple, ouvrir un socket sur www.google.com:
Cas d'utilisation:
la source
Votre IP locale est toujours 127.0.0.1.
Ensuite, il y a l'IP du réseau, que vous pouvez obtenir auprès de
ifconfig
(* nix) ouipconfig
(win). Ceci n'est utile que dans le réseau local.Ensuite, il y a votre adresse IP externe / publique, que vous ne pouvez obtenir que si vous pouvez le demander au routeur, ou vous pouvez configurer un service externe qui renvoie l'adresse IP du client chaque fois qu'il reçoit une demande. Il existe également d'autres services de ce type, comme whatismyip.com.
Dans certains cas (par exemple si vous avez une connexion WAN), l'IP du réseau et l'IP publique sont les mêmes et peuvent toutes deux être utilisées en externe pour atteindre votre ordinateur.
Si votre réseau et vos adresses IP publiques sont différents, vous devrez peut-être demander à votre routeur réseau de transmettre toutes les connexions entrantes à votre adresse IP réseau.
Mise à jour 2013:
Il y a une nouvelle façon de faire maintenant, vous pouvez vérifier l'objet socket de votre connexion pour une propriété appeléelocalAddress
, par exemplenet.socket.localAddress
. Il renvoie l'adresse à votre extrémité du socket.Le moyen le plus simple consiste à simplement ouvrir un port aléatoire et à l'écouter, puis à obtenir votre adresse et à fermer le socket.Mise à jour 2015:
Le précédent ne fonctionne plus.
la source
ifconfig
ouipconfig
et analyser la chaîne de réponse?ifconfig
est à peu près la seule façon.net.socket
retours àundefined
partir de 2015, donc la "nouvelle façon de faire" ne fonctionne plus. Il y en a unnet.Socket
, mais il n'a pas delocalAddress
propriété.utiliser le module ip npm
la source
La bonne doublure pour le soulignement et le lodash est:
la source
.find({family: 'IPv4', internal: false})
pour un code plus court et plus élégantVoici ce qui pourrait être la réponse la plus propre et la plus simple sans dépendances et qui fonctionne sur toutes les plateformes.
la source
Tout ce que je sais, c'est que je voulais commencer par l'adresse IP
192.168.
. Ce code vous donnera:Bien sûr, vous pouvez simplement changer les chiffres si vous en cherchez un autre.
la source
192.168
?192.168.
c'est pourquoi j'ai choisi cela.pour les utilisations Linux et MacOS, si vous souhaitez obtenir vos adresses IP de manière synchrone, essayez ceci.
le résultat sera quelque chose comme ça.
la source
J'ai écrit un module Node.js qui détermine votre adresse IP locale en regardant quelle interface réseau contient votre passerelle par défaut.
C'est plus fiable que de choisir une interface
os.networkInterfaces()
ou des recherches DNS du nom d'hôte. Il est capable d'ignorer les interfaces virtuelles VMware, les boucles et les interfaces VPN, et il fonctionne sur Windows, Linux, Mac OS et FreeBSD. Sous le capot, il exécuteroute.exe
ounetstat
et analyse la sortie.la source
Voici une version simplifiée en vanilla javascript pour obtenir une seule IP:
la source
Pour toute personne intéressée par la brièveté, voici quelques "one-liners" qui ne nécessitent pas de plugins / dépendances qui ne font pas partie d'une installation Node standard:
IPv4 et IPv6 publics de eth0 en tant que tableau:
Première IP publique d'Eth0 (généralement IPv4) en tant que chaîne:
la source
en0
eten1
pour ethernet et wifi. Sous Windows, j'aiLocal Area Connection
etWireless Network Connection
.Google m'a dirigé vers cette question lors de la recherche de "node.js get server ip" , alors donnons une réponse alternative à ceux qui essaient de le faire dans leur programme de serveur node.js (peut être le cas de l'affiche originale).
Dans le cas le plus trivial où le serveur n'est lié qu'à une seule adresse IP, il ne devrait pas être nécessaire de déterminer l'adresse IP car nous savons déjà à quelle adresse nous l'avons lié (par exemple, le deuxième paramètre passé à la
listen()
fonction).Dans le cas moins banal où le serveur est lié à plusieurs adresses IP, il se peut que nous devions déterminer l'adresse IP de l'interface à laquelle un client s'est connecté. Et comme brièvement suggéré par Tor Valamo, de nos jours, nous pouvons facilement obtenir ces informations à partir de la prise connectée et de sa
localAddress
propriété.Par exemple, si le programme est un serveur Web:
Et s'il s'agit d'un serveur TCP générique:
Lors de l'exécution d'un programme serveur, cette solution offre une portabilité, une précision et une efficacité très élevées.
Pour plus de détails, voir:
la source
Sur la base d'un commentaire ci-dessus, voici ce qui fonctionne pour la version actuelle de Node:
Le commentaire sur l'une des réponses ci-dessus manquait l'appel à
values()
. Il semble queos.networkInterfaces()
maintenant retourne un objet au lieu d'un tableau.la source
_.chain(..)
peut être réécrit en tant que_(...)
, le.filter(..)
peut être réécrit en tant que.where({family: 'IPv4', internal: false})
, et vous pouvez supprimer le finalvalue()
car.first()
il le fait pour vous lors du chaînage.Voici une variante des exemples ci-dessus. Il prend soin de filtrer les interfaces vMware, etc. Si vous ne transmettez pas d'index, il renvoie toutes les adresses, sinon vous pouvez le définir par défaut sur 0, puis passez simplement null pour obtenir tout, mais vous trierez cela. Vous pouvez également passer un autre argument pour le filtre d'expression régulière si vous êtes disposé à ajouter
la source
J'ai pu le faire en utilisant seulement le nœud js
En tant que Node JS
En tant que script bash (nécessite l'installation du nœud js)
la source
Voici ma variante qui permet d'obtenir les adresses IPv4 et IPv6 de manière portable:
Voici une version CoffeeScript de la même fonction:
Exemple de sortie pour
console.log(getLocalIPs())
la source
Si vous êtes dans la brièveté, ici, il utilise lodash :
la source
Semblable à d'autres réponses mais plus succincte:
la source
Object.keys(interfaces).reduce(...)
parObject.values(interfaces).flat()
et ce serait la même chose.Un liner pour MAC os première adresse localhost uniquement.
Lorsque vous développez des applications sur Mac OS, que vous souhaitez le tester sur le téléphone et que votre application choisit automatiquement l'IP localhost.
la source
Voici un petit one-liner soigné pour vous qui le fait fonctionnellement:
la source
reduce
et remplacer l'appel àmap
par un appel àflatMap
.Plusieurs fois , je trouve qu'il ya plusieurs interfaces de parement internes et externes disponibles (exemple:
10.0.75.1
,172.100.0.1
,192.168.2.3
), et il est celui que je suis externe vraiment après (172.100.0.1
).Au cas où quelqu'un d'autre aurait une préoccupation similaire, voici une autre prise de position qui, espérons-le, pourrait être utile ...
la source
J'utilise node.js 0.6.5
Voici ce que je fais
la source
hostname -I
(majuscule i). Il renvoie une liste de toutes les adresses IP attribuées de la machine. La première adresse IP est ce dont vous avez besoin. Cette IP est celle attachée à l'interface actuelle qui est en place.Voici une version multi-ip de la réponse de jhurliman ci-dessus:
la source
Je me rends compte que c'est un vieux fil, mais je voudrais offrir une amélioration sur la réponse du haut pour les raisons suivantes:
L' énumération for ... in ... doit être validée pour garantir que l'objet énuméré contient la propriété que vous recherchez. Comme javsacript est mal tapé et le for ... in ... peut être remis à n'importe quel objet arbitraire à manipuler; il est plus sûr de valider la propriété que nous recherchons est disponible.
la source