강좌 & 팁
글 수 2,412
2014.07.08 09:56:29 (*.134.169.166)
51412
Node.js 로 네트워크를 다루다 보면 시스템에 설치된 인터페이스와
관련 IP를 얻고 싶을 때가 있습니다.
다양한 방법이 있겠지만
os.networkInterfaces();
를 사용하면 깔끔 합니다.
간단한 샘플을 보여 드리겠습니다.
먼저 사용될 시스템에서 명령행에서 네트워크 인터페이스 정보를 보는 명령은 다음과 같습니다.
$ ifconfig
eth0 Link encap:Ethernet HWaddr b8:88:e3:89:f7:6e
inet addr:192.168.10.61 Bcast:192.168.255.255 Mask:255.255.0.0
inet6 addr: 2001:db8:1:0:ba88:e3ff:fe89:f76e/64 Scope:Global
inet6 addr: fe80::ba88:e3ff:fe89:f76e/64 Scope:Link
inet6 addr: 2001:db8:1:0:3540:739e:222a:be8a/64 Scope:Global
inet6 addr: 2001:db8:1:0:d980:352b:5e8d:802/64 Scope:Global
inet6 addr: 2001:db8:1:0:593e:334a:a772:c882/64 Scope:Global
inet6 addr: 2001:db8:1:0:6dbb:e719:598c:7c62/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:310411 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:16
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:84761 errors:0 dropped:0 overruns:0 frame:0
TX packets:84761 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:82515191 (82.5 MB) TX bytes:82515191 (82.5 MB)
wlan0 Link encap:Ethernet HWaddr 9c:4e:36:73:93:dc
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
보시면 아시겠지만
eth0, lo, wlan0 가 인터페이스 목록입니다.
이중 활성화 되어 있는 것은
eth0 와 lo 입니다.
이 두개의 인터페이스에 대한 정보를 얻고 싶다면 다음과 같은 간단한 코드로
알수 있습니다.
[C018_list_network_interface.js]------------------------------------------------------
var 운영체제 = require('os');
var 네트워크_인터페이스들 = 운영체제.networkInterfaces();
for (var 인터페이스_이름 in 네트워크_인터페이스들 ) {
네트워크_인터페이스들[인터페이스_이름].forEach(function( 자세한_내용 ){
if( 자세한_내용.family=='IPv4') {
console.log( 인터페이스_이름, 자세한_내용.address);
}
});
}
-----------------------------------------------------------------------------------
실행 결과는 다음과 같습니다.
$ node list_network_interface.js
lo 127.0.0.1
eth0 192.168.10.61
networkInterfaces() 는 각 인터페이스 정보를 다음과 같은 형태로 반환 합니다.
{ lo:
[ { address: '127.0.0.1', family: 'IPv4', internal: true },
{ address: '::1' , family: 'IPv6', internal: true }
],
eth0:
[
{ address: '192.168.10.61', family: 'IPv4', internal: false },
{ address: '2001:db8:1:0:d980:352b:5e8d:802', family: 'IPv6', internal: false },
{ address: '2001:db8:1:0:593e:334a:a772:c882', family: 'IPv6', internal: false },
{ address: '2001:db8:1:0:3540:739e:222a:be8a', family: 'IPv6', internal: false },
{ address: '2001:db8:1:0:6dbb:e719:598c:7c62', family: 'IPv6', internal: false },
{ address: '2001:db8:1:0:ba88:e3ff:fe89:f76e', family: 'IPv6', internal: false },
{ address: 'fe80::ba88:e3ff:fe89:f76e', family: 'IPv6', internal: false }
]
}
인터페이스 마다 인터페이스 어드레스 정보와 관련된 객체 배열을 가지고 있습니다.
각 필드의 의미는 다음과 같습니다.
address : 인터페이스 네트워크 주소
family : 주소 타입
internal : lo 와 같은 내부 네트워크 여부
아쉽게도
디폴트 게이트 웨이 라든가, 넷 마스크 정보는 없습니다.
이건 다른 강좌에서 ^^