2012-05-25 17 views
55

Ja nie odnosząc się doJak mogę uzyskać lokalny adres IP w Node.js?

127.0.0.1

lecz ten, który innych komputerów byłoby wykorzystać do uzyskania dostępu do urządzenia np

192.168.1.6

+1

Czy wyszukiwałeś w Google? http://forum.webfaction.com/viewtopic.php?id=4500 – Nick

+0

http://stackoverflow.com/a/3654601/1202784 – lfergon

+0

możliwy duplikat [Pobierz lokalny adres IP w pliku node.js] (http: // stackoverflow.com/questions/3653065/get-local-ip-address-in-node-js) – alessioalex

Odpowiedz

95

http://nodejs.org/api/os.html#os_os_networkinterfaces

var os = require('os'); 

var interfaces = os.networkInterfaces(); 
var addresses = []; 
for (var k in interfaces) { 
    for (var k2 in interfaces[k]) { 
     var address = interfaces[k][k2]; 
     if (address.family === 'IPv4' && !address.internal) { 
      addresses.push(address.address); 
     } 
    } 
} 

console.log(addresses); 
+6

Dla tych, którzy przeszukują interwebz, jest to popularnie nazywane IP sieci. – jonathanberi

+2

Wziąłem tę technikę i zapakowałem ją do modułu o nazwie interface-addresses. Sprawdź to tutaj https://github.com/nisaacson/interface-addresses – Noah

+1

Aby zrozumieć, dlaczego istnieje więcej niż jeden adres IP? Kiedy uruchomię to z haustem, otrzymuję: 'en0',' vnic0', 'vnic01'. 'en0' to jedna przeglądarkaSync wyświetla mi. –

82

https://github.com/indutny/node-ip

var ip = require("ip"); 
console.dir (ip.address()); 
+3

Chciałbym móc to powtórzyć ... – theonlygusti

+1

To jest najkrótsze rozwiązanie –

+8

W rzeczywistości, jeśli potrzebujesz tylko IP, to rozwiązanie jest ~ 380 linii dłuższe niż akceptowane, ponieważ musisz dołączyć 'węzeł-ip' – wacko

8
$ npm install --save quick-local-ip 

follwed przez

var myip = require('quick-local-ip'); 

//getting ip4 network address of local system 
myip.getLocalIP4(); 

//getting ip6 network address of local system 
myip.getLocalIP6(); 
5

Moja wersja, która była potrzebna do kompaktowej i pojedynczego skryptu plików nadzieję być przydatne dla innych:

var ifs = require('os').networkInterfaces(); 
var result = Object.keys(ifs) 
    .map(x => [x, ifs[x].filter(x => x.family === 'IPv4')[0]]) 
    .filter(x => x[1]) 
    .map(x => x[1].address); 

lub odpowiedzieć na oryginalne pytanie:

var ifs = require('os').networkInterfaces(); 
var result = Object.keys(ifs) 
    .map(x => ifs[x].filter(x => x.family === 'IPv4' && !x.internal)[0]) 
    .filter(x => x)[0].address; 
+0

Te nieokrzesane 1-liniowce mnie zabijają. Wolałby wieloliniowy i wcięty. Sexy rozwiązanie tho. –

+1

bez problemu. Gotowe :) –

Powiązane problemy