Eu tenho um programa node.js simples em execução na minha máquina e quero obter o endereço IP local do PC no qual meu programa está sendo executado. Como faço para obtê-lo com o node.js?
javascript
node.js
ip
yojimbo87
fonte
fonte
Respostas:
fonte
if( details.family=='IPv4' && details.internal === false ) {
se você deseja apenas IPs externos.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 agora não funciona no Windows.A execução de programas para analisar os resultados parece um pouco duvidosa. Aqui está o que eu uso.Isso deve retornar o seu primeiro IP local da interface de rede.
fonte
https://github.com/indutny/node-ip
fonte
Qualquer IP da sua máquina que você possa encontrar usando o módulo os - e isso é nativo do NodeJS
Tudo o que você precisa fazer é chamar os.networkInterfaces () e você obterá uma lista fácil de gerenciar - mais fácil do que executar o ifconfig por ligas
http://nodejs.org/api/os.html#os_os_networkinterfaces
Melhor
Edoardo
fonte
var address = networkInterfaces['venet0:0'][0].address
Aqui está um trecho de código node.js. que analisará a saída
ifconfig
e (de forma assíncrona) retornará o primeiro endereço IP encontrado:(testado apenas no MacOS Snow Leopard; espero que também funcione no linux)
Exemplo de uso:
Se o segundo parâmetro for
true
, a função executará uma chamada do sistema toda vez; caso contrário, o valor em cache é usado.Versão atualizada
Retorna uma matriz de todos os endereços de rede local.
Testado no Ubuntu 11.04 e Windows XP 32
Exemplo de uso para versão atualizada
fonte
filterRE = /\bIP-?[^:\r\n]+:\s*([^\s]+)/g;
. Além disso, ótimo roteiro, um verdadeiro salva-vidas. Muito Obrigado!Aqui está o meu método utilitário para obter o endereço IP local, supondo que você esteja procurando um endereço IPv4 e a máquina tenha apenas uma interface de rede real. Poderia ser facilmente refatorado para retornar uma matriz de IPs para máquinas com várias interfaces.
fonte
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 um módulo chamado ip like
então use este código.
fonte
Chamar ifconfig depende muito da plataforma, e a camada de rede sabe em que endereços IP está um soquete; portanto, o melhor é perguntar. O nó não expõe um método direto de fazer isso, mas você pode abrir qualquer soquete e perguntar qual endereço IP local está sendo usado. Por exemplo, abrindo um soquete para www.google.com:
Caso de uso:
fonte
Seu IP local é sempre 127.0.0.1.
Depois, há o IP da rede, do qual você pode obter
ifconfig
(* nix) ouipconfig
(win). Isso é útil apenas dentro da rede local.Depois, há o seu IP externo / público, que você só pode obter se, de alguma forma, solicitar ao roteador ou pode configurar um serviço externo que retorne o endereço IP do cliente sempre que for solicitado. Existem também outros serviços, como whatismyip.com.
Em alguns casos (por exemplo, se você tiver uma conexão WAN), o IP da rede e o IP público são os mesmos e podem ser usados externamente para acessar seu computador.
Se sua rede e IPs públicos forem diferentes, talvez seja necessário que seu roteador de rede encaminhe todas as conexões de entrada ao seu ip de rede.
Atualização 2013:
Há uma nova maneira de fazer isso agora, você pode verificar o objeto de soquete da sua conexão para uma propriedade chamadalocalAddress
, por exemplonet.socket.localAddress
. Retorna o endereço na sua extremidade do soquete.A maneira mais fácil é simplesmente abrir uma porta aleatória e ouvi-la, obter seu endereço e fechar o soquete.Atualização 2015:
O anterior não funciona mais.
fonte
ifconfig
ouipconfig
analisar a cadeia de resposta?ifconfig
é praticamente o único caminho.net.socket
retorno aundefined
partir de 2015, então a "nova maneira de fazer isso" não funciona mais. Existe umnet.Socket
, mas ele não tem umalocalAddress
propriedade.use o módulo ip npm
fonte
O liner correto para sublinhado e lodash é:
fonte
.find({family: 'IPv4', internal: false})
tão bem para um código mais elegante mais curtoAqui está o que pode ser a resposta mais limpa e simples, sem dependências, e que funciona em todas as plataformas.
fonte
Tudo o que sei é que eu queria o endereço IP começando com
192.168.
. Este código fornecerá a você que:Claro que você pode alterar os números se estiver procurando por um número diferente.
fonte
192.168
?192.168.
motivo pelo qual escolhi isso.para Linux e MacOS, se você deseja obter seus IPs de maneira síncrona, tente isso.
o resultado será algo como isto.
fonte
Eu escrevi um módulo Node.js que determina o seu endereço IP local, observando qual interface de rede contém seu gateway padrão.
Isso é mais confiável do que escolher uma interface
os.networkInterfaces()
ou pesquisas de DNS do nome do host. É capaz de ignorar interfaces virtuais VMware, loopback e interfaces VPN, e funciona no Windows, Linux, Mac OS e FreeBSD. Sob o capô, ele executaroute.exe
ounetstat
analisa a saída.fonte
Aqui está uma versão simplificada em vanilla javascript para obter um único ip:
fonte
Para qualquer pessoa interessada na brevidade, aqui estão alguns "one-liners" que não requerem plugins / dependências que não fazem parte de uma instalação padrão do Node:
IPv4 público e IPv6 de eth0 como uma matriz:
Primeiro IP público de eth0 (geralmente IPv4) como String:
fonte
en0
een1
para ethernet e wifi. No Windows, eu tenhoLocal Area Connection
eWireless Network Connection
.O Google me direcionou para essa pergunta enquanto procurava por "node.js get server ip" , então vamos dar uma resposta alternativa para aqueles que estão tentando conseguir isso em seu programa de servidor node.js. (pode ser o caso do pôster original).
No caso mais trivial em que o servidor está vinculado a apenas um endereço IP, não deve ser necessário determinar o endereço IP, pois já sabemos a que endereço o vinculamos (por exemplo, o segundo parâmetro passado para a
listen()
função).No caso menos trivial em que o servidor está vinculado a vários endereços IP, talvez seja necessário determinar o endereço IP da interface à qual um cliente se conectou. E como sugerido brevemente por Tor Valamo, hoje em dia, podemos facilmente obter essas informações do soquete conectado e de suas
localAddress
propriedades.Por exemplo, se o programa for um servidor da web:
E se for um servidor TCP genérico:
Ao executar um programa de servidor, esta solução oferece portabilidade, precisão e eficiência muito altas.
Para mais detalhes, consulte:
fonte
Com base no comentário acima, veja o que está funcionando para a versão atual do Node:
O comentário de uma das respostas acima estava ausente
values()
. Parece queos.networkInterfaces()
agora retorna um objeto em vez de uma matriz.fonte
_.chain(..)
pode ser reescrito como_(...)
, o.filter(..)
pode ser reescrito como.where({family: 'IPv4', internal: false})
e você pode soltar a finalvalue()
porque.first()
faz isso para você ao encadear.Aqui está uma variação dos exemplos acima. É preciso filtrar as interfaces do vMware, etc. Se você não passar um índice, ele retornará todos os endereços; caso contrário, você poderá defini-lo como 0 e, em seguida, passar nulo para obter todos, mas você resolverá isso. Você também pode passar outro argumento para o filtro regex, se assim desejar
fonte
Consegui fazer isso usando apenas o nó js
Como Nó JS
Como script bash (precisa do nó js instalado)
fonte
Aqui está minha variante que permite obter endereços IPv4 e IPv6 de maneira portátil:
Aqui está uma versão do CoffeeScript da mesma função:
Exemplo de saída para
console.log(getLocalIPs())
fonte
Se você gosta de toda a brevidade, aqui está usando lodash :
fonte
Semelhante a outras respostas, mas mais sucinto:
fonte
Object.keys(interfaces).reduce(...)
porObject.values(interfaces).flat()
e seria a mesma coisa.Um liner para MAC é apenas o primeiro endereço de host local.
Ao desenvolver aplicativos no Mac OS, e deseja testá-lo no telefone, é necessário que o aplicativo escolha o IP do host local automaticamente.
fonte
Aqui está uma pequena linha interessante para você, que faz isso funcionalmente:
fonte
reduce
e substituí-lamap
por uma chamada paraflatMap
.Muitas vezes eu encontrar existem múltiplas interfaces de revestimento interno e externo disponível (exemplo:
10.0.75.1
,172.100.0.1
,192.168.2.3
), e é o externo que estou realmente depois (172.100.0.1
).Caso alguém mais tenha uma preocupação semelhante, aqui está mais uma opinião sobre isso que, espero, pode ser de alguma ajuda ...
fonte
Estou usando o node.js 0.6.5
Aqui está o que eu faço
fonte
hostname -I
(i maiúsculo). Retorna uma lista de todos os endereços IP atribuídos da máquina. O primeiro endereço IP é o que você precisa. Esse IP é aquele conectado à interface atual que está ativa.Aqui está uma versão multi-ip da resposta de jhurliman acima:
fonte
Sei que esse é um tópico antigo, mas gostaria de oferecer uma melhoria na resposta principal pelos seguintes motivos:
para ... in ... a enumeração deve ser validada para garantir que o objeto a ser enumerado contenha a propriedade que você está procurando. Como o javsacript é vagamente digitado e o for ... in ... pode ser entregue a qualquer objeto arbitral a ser manipulado; é mais seguro validar a propriedade que procuramos está disponível.
fonte