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 와 같은 내부 네트워크 여부
아쉽게도 

디폴트 게이트 웨이 라든가, 넷 마스크 정보는 없습니다. 
이건 다른 강좌에서 ^^