[javascript] node.js에서 로컬 IP 주소 가져 오기
내 컴퓨터에서 실행중인 간단한 node.js 프로그램이 있고 프로그램이 실행되는 PC의 로컬 IP 주소를 얻고 싶습니다. node.js로 어떻게 얻습니까?
답변
'use strict';
var os = require('os');
var ifaces = os.networkInterfaces();
Object.keys(ifaces).forEach(function (ifname) {
var alias = 0;
ifaces[ifname].forEach(function (iface) {
if ('IPv4' !== iface.family || iface.internal !== false) {
// skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses
return;
}
if (alias >= 1) {
// this single interface has multiple ipv4 addresses
console.log(ifname + ':' + alias, iface.address);
} else {
// this interface has only one ipv4 adress
console.log(ifname, iface.address);
}
++alias;
});
});
// en0 192.168.1.101
// eth0 10.0.0.101
답변
os.networkInterfaces는 현재 Windows에서 작동하지 않습니다. 결과를 파싱하기 위해 프로그램을 실행하는 것은 다소 불편한 것 같습니다. 여기 내가 사용하는 것이 있습니다.
require('dns').lookup(require('os').hostname(), function (err, add, fam) {
console.log('addr: '+add);
})
첫 번째 네트워크 인터페이스 로컬 IP를 반환해야합니다.
답변
답변
os 모듈 을 사용하여 찾을 수있는 시스템의 모든 IP – NodeJS 고유
var os = require( 'os' );
var networkInterfaces = os.networkInterfaces( );
console.log( networkInterfaces );
os.networkInterfaces ()를 호출하기 만하면 쉽게 관리 할 수있는 목록을 얻을 수 있습니다. 리그로 ifconfig 를 실행하는 것보다 쉽습니다.
http://nodejs.org/api/os.html#os_os_networkinterfaces
베스트
에도아르도
답변
다음은 ifconfig
발견 된 첫 번째 IP 주소 의 출력을 구문 분석 하고 (비동기 적으로) 반환하는 node.js 코드 스 니펫입니다 .
(MacOS Snow Leopard에서만 테스트되었으며 Linux에서도 작동하기를 바랍니다)
var getNetworkIP = (function () {
var ignoreRE = /^(127\.0\.0\.1|::1|fe80(:1)?::1(%.*)?)$/i;
var exec = require('child_process').exec;
var cached;
var command;
var filterRE;
switch (process.platform) {
// TODO: implement for OSs without ifconfig command
case 'darwin':
command = 'ifconfig';
filterRE = /\binet\s+([^\s]+)/g;
// filterRE = /\binet6\s+([^\s]+)/g; // IPv6
break;
default:
command = 'ifconfig';
filterRE = /\binet\b[^:]+:\s*([^\s]+)/g;
// filterRE = /\binet6[^:]+:\s*([^\s]+)/g; // IPv6
break;
}
return function (callback, bypassCache) {
// get cached value
if (cached && !bypassCache) {
callback(null, cached);
return;
}
// system call
exec(command, function (error, stdout, sterr) {
var ips = [];
// extract IPs
var matches = stdout.match(filterRE);
// JS has no lookbehind REs, so we need a trick
for (var i = 0; i < matches.length; i++) {
ips.push(matches[i].replace(filterRE, '$1'));
}
// filter BS
for (var i = 0, l = ips.length; i < l; i++) {
if (!ignoreRE.test(ips[i])) {
//if (!error) {
cached = ips[i];
//}
callback(error, ips[i]);
return;
}
}
// nothing found
callback(error, null);
});
};
})();
사용 예 :
getNetworkIP(function (error, ip) {
console.log(ip);
if (error) {
console.log('error:', error);
}
}, false);
두 번째 매개 변수가 true
이면이 함수는 매번 시스템 호출을 실행합니다. 그렇지 않으면 캐시 된 값이 사용됩니다.
업데이트 된 버전
모든 로컬 네트워크 주소의 배열을 반환합니다.
Ubuntu 11.04 및 Windows XP 32에서 테스트
var getNetworkIPs = (function () {
var ignoreRE = /^(127\.0\.0\.1|::1|fe80(:1)?::1(%.*)?)$/i;
var exec = require('child_process').exec;
var cached;
var command;
var filterRE;
switch (process.platform) {
case 'win32':
//case 'win64': // TODO: test
command = 'ipconfig';
filterRE = /\bIPv[46][^:\r\n]+:\s*([^\s]+)/g;
break;
case 'darwin':
command = 'ifconfig';
filterRE = /\binet\s+([^\s]+)/g;
// filterRE = /\binet6\s+([^\s]+)/g; // IPv6
break;
default:
command = 'ifconfig';
filterRE = /\binet\b[^:]+:\s*([^\s]+)/g;
// filterRE = /\binet6[^:]+:\s*([^\s]+)/g; // IPv6
break;
}
return function (callback, bypassCache) {
if (cached && !bypassCache) {
callback(null, cached);
return;
}
// system call
exec(command, function (error, stdout, sterr) {
cached = [];
var ip;
var matches = stdout.match(filterRE) || [];
//if (!error) {
for (var i = 0; i < matches.length; i++) {
ip = matches[i].replace(filterRE, '$1')
if (!ignoreRE.test(ip)) {
cached.push(ip);
}
}
//}
callback(error, cached);
});
};
})();
업데이트 된 버전의 사용 예
getNetworkIPs(function (error, ip) {
console.log(ip);
if (error) {
console.log('error:', error);
}
}, false);
답변
IPv4 주소를 찾고 있고 컴퓨터에 실제 네트워크 인터페이스가 하나만 있다고 가정하면 로컬 IP 주소를 얻는 유틸리티 방법은 다음과 같습니다. 다중 인터페이스 시스템에 대한 IP 배열을 반환하도록 쉽게 리팩토링 할 수 있습니다.
function getIPAddress() {
var interfaces = require('os').networkInterfaces();
for (var devName in interfaces) {
var iface = interfaces[devName];
for (var i = 0; i < iface.length; i++) {
var alias = iface[i];
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal)
return alias.address;
}
}
return '0.0.0.0';
}
답변
ip와 같은 모듈을 설치하십시오.
npm install ip
그런 다음이 코드를 사용하십시오.
var ip = require("ip");
console.log( ip.address() );