Mam prosty program node.js uruchomiony na moim komputerze i chcę uzyskać lokalny adres IP komputera, na którym działa mój program. Jak mogę go uzyskać za pomocą node.js?
javascript
node.js
ip
yojimbo87
źródło
źródło
Odpowiedzi:
źródło
if( details.family=='IPv4' && details.internal === false ) {
jeśli chcesz tylko zewnętrznych adresów IP.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 na razie nie działa w systemie Windows.Uruchamianie programów do analizowania wyników wydaje się nieco niepewne. Oto czego używam.Powinno to zwrócić pierwszy lokalny interfejs sieciowy IP.
źródło
https://github.com/indutny/node-ip
źródło
Dowolny adres IP twojego komputera, który możesz znaleźć za pomocą modułu os - i to jest natywne dla NodeJS
Wystarczy zadzwonić do os.networkInterfaces (), a otrzymasz łatwą do zarządzania listę - łatwiejszą niż uruchamianie ifconfig przez ligi
http://nodejs.org/api/os.html#os_os_networkinterfaces
Najlepsza
Edoardo
źródło
var address = networkInterfaces['venet0:0'][0].address
Oto fragment kodu node.js, który przeanalizuje dane wyjściowe
ifconfig
i (asynchronicznie) zwróci pierwszy znaleziony adres IP:(testowane tylko w systemie MacOS Snow Leopard; mam nadzieję, że działa również na systemie Linux)
Przykład użycia:
Jeśli drugim parametrem jest
true
, funkcja będzie wykonywać wywołanie systemowe za każdym razem; w przeciwnym razie używana jest wartość buforowana.Zaktualizowana wersja
Zwraca tablicę wszystkich adresów sieci lokalnej.
Testowane na Ubuntu 11.04 i Windows XP 32
Przykład użycia zaktualizowanej wersji
źródło
filterRE = /\bIP-?[^:\r\n]+:\s*([^\s]+)/g;
. Poza tym świetny skrypt, prawdziwy ratownik. Wielkie dzięki!Oto moja użyteczna metoda uzyskiwania lokalnego adresu IP, zakładając, że szukasz adresu IPv4, a urządzenie ma tylko jeden prawdziwy interfejs sieciowy. Można go łatwo refaktoryzować, aby zwrócić tablicę adresów IP dla maszyn z wieloma interfejsami.
źródło
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"
Zainstaluj moduł o nazwie ip like
następnie użyj tego kodu.
źródło
Wywołanie ifconfig jest bardzo zależne od platformy, a warstwa sieciowa wie, na jakich adresach IP znajduje się gniazdo, więc najlepiej zapytać. Węzeł nie ujawnia bezpośredniej metody tego, ale możesz otworzyć dowolne gniazdo i zapytać, jaki jest używany lokalny adres IP. Na przykład otwarcie gniazda na www.google.com:
Przypadek użycia:
źródło
Twój lokalny adres IP to zawsze 127.0.0.1.
Następnie jest adres IP sieci, który można uzyskać z
ifconfig
(* nix) lubipconfig
(win). Jest to przydatne tylko w sieci lokalnej.Następnie jest twój zewnętrzny / publiczny adres IP, który możesz uzyskać tylko wtedy, gdy możesz poprosić o niego router, lub możesz skonfigurować usługę zewnętrzną, która zwraca adres IP klienta, gdy tylko otrzyma żądanie. Istnieją również inne takie usługi, takie jak whatismyip.com.
W niektórych przypadkach (na przykład, jeśli masz połączenie WAN), IP sieci i publiczny IP są takie same i mogą być używane zewnętrznie, aby połączyć się z komputerem.
Jeśli sieć i publiczne adresy IP są różne, może być konieczne, aby router sieciowy przekazywał wszystkie połączenia przychodzące do twojego adresu IP sieci.
Aktualizacja 2013:
Jest teraz nowy sposób na zrobienie tego, możesz sprawdzić obiekt gniazda swojego połączenia pod kątem właściwości o nazwielocalAddress
npnet.socket.localAddress
. Zwraca adres na twoim końcu gniazda.Najprościej jest po prostu otworzyć losowy port i nasłuchiwać, a następnie uzyskać adres i zamknąć gniazdo.Aktualizacja 2015:
Poprzedni nie działa.
źródło
ifconfig
lubipconfig
przeanalizować ciąg odpowiedzi?ifconfig
net.socket
zwrotyundefined
z 2015 roku, więc „nowy sposób robienia tego” już nie działa. Istniejenet.Socket
, ale nie malocalAddress
właściwości.użyj npm modułu ip
źródło
Prawidłowa jedna linijka zarówno dla podkreślenia, jak i dla rzęs to:
źródło
.find({family: 'IPv4', internal: false})
również dla krótszego, bardziej eleganckiego koduOto najczystsza i najprostsza odpowiedź bez zależności, która działa na wszystkich platformach.
źródło
Wiem tylko, że chciałem, aby adres IP zaczynał się od
192.168.
. Ten kod da ci, że:Oczywiście możesz po prostu zmienić liczby, jeśli szukasz innego.
źródło
192.168
?192.168.
tego, dlatego właśnie to wybrałem.w systemach Linux i MacOS, jeśli chcesz uzyskać adresy IP w sposób synchroniczny, wypróbuj to.
wynikiem będzie coś takiego.
źródło
Napisałem moduł Node.js, który określa lokalny adres IP, sprawdzając, który interfejs sieciowy zawiera domyślną bramę.
Jest to bardziej niezawodne niż wybieranie interfejsu
os.networkInterfaces()
lub wyszukiwania DNS nazwy hosta. Jest w stanie ignorować interfejsy wirtualne VMware, sprzężenia zwrotne i interfejsy VPN, i działa w systemach Windows, Linux, Mac OS i FreeBSD. Pod maską wykonujeroute.exe
lubnetstat
analizuje dane wyjściowe.źródło
Oto uproszczona wersja javascript waniliowego, aby uzyskać pojedynczy adres IP:
źródło
Dla każdego, kto jest zainteresowany zwięzłością, oto kilka „linków”, które nie wymagają wtyczek / zależności, które nie są częścią standardowej instalacji Węzła:
Publiczny IPv4 i IPv6 eth0 jako macierz:
Pierwszy publiczny adres IP eth0 (zwykle IPv4) jako ciąg znaków:
źródło
en0
ien1
dla Ethernetu i Wi-Fi. W systemie Windows mamLocal Area Connection
iWireless Network Connection
.Google skierowało mnie do tego pytania, wyszukując hasło „node.js get server ip” , dlatego podajmy alternatywną odpowiedź dla tych, którzy próbują to osiągnąć w programie serwera node.js (może tak być w przypadku oryginalnego plakatu).
W najbardziej trywialnym przypadku, gdy serwer jest powiązany tylko z jednym adresem IP, nie powinno być potrzeby określania adresu IP, ponieważ już wiemy, do którego adresu go przypisaliśmy (np. Drugi parametr przekazany do
listen()
funkcji).W mniej trywialnym przypadku, gdy serwer jest powiązany z wieloma adresami IP, może być konieczne określenie adresu IP interfejsu, do którego podłączony jest klient. I jak krótko sugeruje Tor Valamo, w dzisiejszych czasach możemy łatwo uzyskać te informacje z podłączonego gniazda i jego
localAddress
właściwości.Na przykład, jeśli program jest serwerem WWW:
A jeśli jest to ogólny serwer TCP:
Podczas uruchamiania programu serwerowego to rozwiązanie oferuje bardzo wysoką przenośność, dokładność i wydajność.
Aby uzyskać więcej informacji, zobacz:
źródło
Na podstawie powyższego komentarza oto, co działa w bieżącej wersji węzła:
W komentarzu do jednej z powyższych odpowiedzi brakowało połączenia z
values()
. Wygląda na to, żeos.networkInterfaces()
teraz zwraca obiekt zamiast tablicy.źródło
_.chain(..)
Można ponownie zapisać jako_(...)
The.filter(..)
można ponownie zapisać jako.where({family: 'IPv4', internal: false})
i można upuszczać ostatecznavalue()
, ponieważ.first()
zrobi to za ciebie podczas łączenia.Oto odmiana powyższych przykładów. Dba o to, aby odfiltrować interfejsy vMware itp. Jeśli nie przejdziesz indeksu, zwróci on wszystkie adresy, w przeciwnym razie możesz ustawić wartość domyślną na 0, a następnie po prostu podać wartość null, aby uzyskać wszystko, ale to załatwisz. Możesz również podać inny argument dla filtru wyrażenia regularnego, jeśli masz taką skłonność do dodania
źródło
Byłem w stanie to zrobić, używając tylko węzła js
Jako węzeł JS
Jako skrypt bash (wymaga zainstalowanego węzła js)
źródło
Oto mój wariant, który pozwala na uzyskanie adresów IPv4 i IPv6 w przenośny sposób:
Oto wersja tej samej funkcji CoffeeScript:
Przykładowe dane wyjściowe dla
console.log(getLocalIPs())
źródło
Jeśli interesuje Cię cała zwięzłość, tutaj używa lodash :
źródło
Podobne do innych odpowiedzi, ale bardziej zwięzłe:
źródło
Object.keys(interfaces).reduce(...)
zObject.values(interfaces).flat()
i byłoby to samo.Jedna linijka dla MAC os tylko pierwszy adres localhost.
Tworząc aplikacje na Mac OS, chcesz przetestować je na telefonie i potrzebujesz, aby aplikacja automatycznie wybrała adres IP hosta lokalnego.
źródło
Oto schludny mały linijka dla ciebie, która robi to funkcjonalnie:
źródło
reduce
i zastąpić połączenie namap
zflatMap
.Wiele razy znajduję wiele dostępnych interfejsów wewnętrznych i zewnętrznych (przykład:
10.0.75.1
,172.100.0.1
,192.168.2.3
), i jest to jeden zewnętrzny, że jestem naprawdę po (172.100.0.1
).Jeśli ktoś ma podobne obawy, oto jeszcze jedno podejście, które, mam nadzieję, może być pomocne ...
źródło
Używam node.js 0.6.5
Oto co robię
źródło
hostname -I
(wielkie litery i). Zwraca listę wszystkich przypisanych adresów IP urządzenia. Pierwszy adres IP jest tym, czego potrzebujesz. Ten adres IP jest dołączony do bieżącego interfejsu, który jest uruchomiony.Oto wielojęzyczna wersja powyższej odpowiedzi jhurlimana:
źródło
Zdaję sobie sprawę, że to stary wątek, ale chciałbym zaoferować poprawę w stosunku do najwyższej odpowiedzi z następujących powodów:
dla ... w ... wyliczenie powinno zostać sprawdzone, aby upewnić się, że wyliczany obiekt zawiera właściwość, której szukasz. Ponieważ javsacript jest luźno wpisany, a for ... in ... można przekazać dowolny obiekt arbitrażowy do obsługi; bezpieczniej jest zweryfikować właściwość, której szukamy, jest dostępna.
źródło