Tengo un simple programa node.js ejecutándose en mi máquina y quiero obtener la dirección IP local de la PC en la que se ejecuta mi programa. ¿Cómo lo consigo con node.js?
javascript
node.js
ip
yojimbo87
fuente
fuente
Respuestas:
fuente
if( details.family=='IPv4' && details.internal === false ) {
si solo desea direcciones IP externas.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 a partir de ahora no funciona en Windows.Ejecutar programas para analizar los resultados parece un poco dudoso. Esto es lo que uso.Esto debería devolver su primera interfaz de red ip local.
fuente
https://github.com/indutny/node-ip
fuente
Cualquier IP de su máquina que pueda encontrar utilizando el módulo os , y eso es nativo de NodeJS
Todo lo que necesita hacer es llamar a os.networkInterfaces () y obtendrá una lista fácil de administrar, más fácil que ejecutar ifconfig por ligas
http://nodejs.org/api/os.html#os_os_networkinterfaces
Mejor
Edoardo
fuente
var address = networkInterfaces['venet0:0'][0].address
Aquí hay un fragmento de código node.js que analizará la salida
ifconfig
y (asincrónicamente) devolverá la primera dirección IP encontrada:(probado solo en MacOS Snow Leopard; espero que también funcione en Linux)
Ejemplo de uso:
Si el segundo parámetro es
true
, la función ejecutará una llamada al sistema cada vez; de lo contrario, se utiliza el valor en caché.Versión actualizada
Devuelve una matriz de todas las direcciones de red locales.
Probado en Ubuntu 11.04 y Windows XP 32
Ejemplo de uso para la versión actualizada
fuente
filterRE = /\bIP-?[^:\r\n]+:\s*([^\s]+)/g;
. Aparte de eso, gran guión, un verdadero salvavidas. ¡Muchas gracias!Aquí está mi método de utilidad para obtener la dirección IP local, suponiendo que esté buscando una dirección IPv4 y que la máquina solo tenga una interfaz de red real. Se podría refactorizar fácilmente para devolver una matriz de IP para máquinas con múltiples interfaces.
fuente
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"
Instale un módulo llamado ip like
entonces usa este código.
fuente
Llamar a ifconfig depende mucho de la plataforma, y la capa de red sabe en qué direcciones IP está un socket, así que lo mejor es preguntarlo. Node no expone un método directo para hacerlo, pero puede abrir cualquier socket y preguntar qué dirección IP local está en uso. Por ejemplo, abriendo un socket a www.google.com:
Caso de uso:
fuente
Su IP local es siempre 127.0.0.1.
Luego está la IP de la red, que puede obtener de
ifconfig
(* nix) oipconfig
(win). Esto solo es útil dentro de la red local.Luego está su IP pública / externa, que solo puede obtener si de alguna manera puede solicitarla al enrutador, o puede configurar un servicio externo que devuelve la dirección IP del cliente cada vez que recibe una solicitud. También existen otros servicios de este tipo, como whatismyip.com.
En algunos casos (por ejemplo, si tiene una conexión WAN), la IP de la red y la IP pública son las mismas, y ambas pueden usarse externamente para llegar a su computadora.
Si su red e IP públicas son diferentes, es posible que necesite que su enrutador de red reenvíe todas las conexiones entrantes a su IP de red.
Actualización 2013:
Hay una nueva forma de hacer esto ahora, puede verificar el objeto socket de su conexión para una propiedad llamadalocalAddress
, por ejemplonet.socket.localAddress
. Devuelve la dirección en su extremo del zócalo.La forma más fácil es simplemente abrir un puerto aleatorio y escucharlo, luego obtener su dirección y cerrar el zócalo.Actualización 2015:
Lo anterior ya no funciona.
fuente
ifconfig
oipconfig
analizar la cadena de respuesta?ifconfig
es prácticamente la única forma.net.socket
regresa aundefined
partir de 2015, por lo que la "nueva forma de hacer esto" ya no funciona. Hay unanet.Socket
, pero no tiene unalocalAddress
propiedad.use el módulo npm ip
fuente
El revestimiento correcto tanto para el subrayado como para el lodash es:
fuente
.find({family: 'IPv4', internal: false})
también para un código más corto y eleganteEsto es lo que podría ser la respuesta más simple y limpia sin dependencias y que funcione en todas las plataformas.
fuente
Todo lo que sé es que quería comenzar con la dirección IP
192.168.
. Este código te dará que:Por supuesto, puede cambiar los números si está buscando uno diferente.
fuente
192.168
?192.168.
por eso elegí eso.para los usos de Linux y MacOS, si desea obtener sus IP de forma síncrona, intente esto.
El resultado será algo como esto.
fuente
Escribí un módulo Node.js que determina su dirección IP local al observar qué interfaz de red contiene su puerta de enlace predeterminada.
Esto es más confiable que elegir una interfaz
os.networkInterfaces()
o búsquedas de DNS del nombre de host. Es capaz de ignorar las interfaces virtuales, el loopback y las interfaces VPN de VMware, y funciona en Windows, Linux, Mac OS y FreeBSD. Debajo del capó, se ejecutaroute.exe
onetstat
analiza la salida.fuente
Aquí hay una versión simplificada en vainilla javascript para obtener una única ip:
fuente
Para cualquier persona interesada en la brevedad, aquí hay algunos "one-liners" que no requieren complementos / dependencias que no sean parte de una instalación de Nodo estándar:
IPv4 público e IPv6 de eth0 como matriz:
Primera IP pública de eth0 (generalmente IPv4) como String:
fuente
en0
yen1
para ethernet y wifi. En Windows, tengoLocal Area Connection
yWireless Network Connection
.Google me dirigió a esta pregunta mientras buscaba "node.js get server ip" , así que demos una respuesta alternativa para aquellos que están tratando de lograr esto en su programa de servidor node.js (puede ser el caso del póster original).
En el caso más trivial en el que el servidor está vinculado a una sola dirección IP, no debería ser necesario determinar la dirección IP ya que ya sabemos a qué dirección la vinculamos (por ejemplo, el segundo parámetro pasado a la
listen()
función).En el caso menos trivial donde el servidor está vinculado a múltiples direcciones IP, es posible que necesitemos determinar la dirección IP de la interfaz a la que se conectó un cliente. Y como Tor Valamo sugirió brevemente, hoy en día, podemos obtener fácilmente esta información del zócalo conectado y su
localAddress
propiedad.Por ejemplo, si el programa es un servidor web:
Y si es un servidor TCP genérico:
Al ejecutar un programa de servidor, esta solución ofrece portabilidad, precisión y eficiencia muy altas.
Para más detalles, ver:
fuente
Según un comentario anterior, esto es lo que funciona para la versión actual de Node:
El comentario sobre una de las respuestas anteriores perdió la llamada
values()
. Parece queos.networkInterfaces()
ahora devuelve un objeto en lugar de una matriz.fuente
_.chain(..)
puede reescribir como_(...)
,.filter(..)
se puede reescribir como.where({family: 'IPv4', internal: false})
, y puede soltar el finalvalue()
porque lo.first()
hace por usted cuando se encadena.Aquí hay una variación de los ejemplos anteriores. Se encarga de filtrar las interfaces de vMware, etc. Si no pasa un índice, devuelve todas las direcciones; de lo contrario, puede establecer el valor predeterminado en 0 y luego pasar nulo para obtener todo, pero lo resolverá. También podría pasar otro argumento para el filtro de expresiones regulares si así lo desea agregar
fuente
Pude hacer esto usando solo el nodo js
Como Node JS
Como script bash (necesita el nodo js instalado)
fuente
Aquí está mi variante que permite obtener direcciones IPv4 e IPv6 de forma portátil:
Aquí hay una versión de CoffeeScript de la misma función:
Ejemplo de salida para
console.log(getLocalIPs())
fuente
Si te gusta la brevedad, aquí está usando lodash :
fuente
Similar a otras respuestas pero más sucinto:
fuente
Object.keys(interfaces).reduce(...)
conObject.values(interfaces).flat()
y sería lo mismo.Un trazador de líneas para la primera dirección de host local de MAC.
Al desarrollar aplicaciones en mac os, y desea probarlo en el teléfono, y necesita que su aplicación elija la IP localhost automáticamente.
fuente
Aquí hay una pequeña línea ordenada para usted que hace esto funcionalmente:
fuente
reduce
y reemplazarlamap
con una llamada aflatMap
.Muchas veces me parece que hay múltiples interfaces de revestimiento interno y externo disponible (ejemplo:
10.0.75.1
,172.100.0.1
,192.168.2.3
), y es la externa que estoy realmente después (172.100.0.1
).En caso de que alguien más tenga una preocupación similar, aquí hay una opinión más sobre esto que, con suerte, puede ser de alguna ayuda ...
fuente
Estoy usando node.js 0.6.5
Esto es lo que hago
fuente
hostname -I
(mayúscula i). Devuelve una lista de todas las direcciones IP asignadas de la máquina. La primera dirección IP es lo que necesita. Esa IP es la que está conectada a la interfaz actual que está activa.Aquí hay una versión multi-ip de la respuesta de jhurliman anterior:
fuente
Me doy cuenta de que este es un hilo viejo, pero me gustaría ofrecer una mejora en la respuesta principal por las siguientes razones:
para ... en ... la enumeración debe validarse para garantizar que el objeto que se está enumerando contiene la propiedad que está buscando. Como javsacript está mal escrito y el for ... in ... puede entregarse cualquier objeto arbitrario para manejar; Es más seguro validar que la propiedad que estamos buscando está disponible.
fuente