| 
									
										
										
										
											2016-09-08 23:10:04 -06:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var os = require('os'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-13 17:08:08 -06:00
										 |  |  | module.exports.find = function (opts) { | 
					
						
							|  |  |  |   opts = opts || {}; | 
					
						
							|  |  |  |   opts.externals = opts.externals || []; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 23:10:04 -06:00
										 |  |  |   var ifaceMap = os.networkInterfaces(); | 
					
						
							|  |  |  |   var newMap = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Object.keys(ifaceMap).forEach(function (iname) { | 
					
						
							|  |  |  |     var ifaces = ifaceMap[iname]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ifaces = ifaces.filter(function (iface) { | 
					
						
							| 
									
										
										
										
											2016-09-13 17:08:08 -06:00
										 |  |  |       return opts.externals.some(function (ip) { | 
					
						
							|  |  |  |         if (ip.address === iface.address) { | 
					
						
							|  |  |  |           ip.external = true; | 
					
						
							|  |  |  |           return true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }) || (!iface.internal && !/^fe80/.test(iface.address) && !/^[0:]+$/.test(iface.mac)); | 
					
						
							| 
									
										
										
										
											2016-09-08 23:10:04 -06:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!ifaces.length) { | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     newMap[iname] = newMap[iname] || { ipv4: [], ipv6: [] }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ifaces.forEach(function (addr) { | 
					
						
							|  |  |  |       addr.iface = iname; | 
					
						
							|  |  |  |       if ('IPv4' === addr.family) { | 
					
						
							|  |  |  |         newMap[iname].ipv4.push(addr); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       else if ('IPv6' === addr.family) { | 
					
						
							|  |  |  |         newMap[iname].ipv6.push(addr); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return newMap; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* | 
					
						
							|  |  |  | https://[2601:681:300:92c0:2477:d58a:d69e:51a0]:8443
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   console.log(''); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     console.log(''); | 
					
						
							|  |  |  |     console.log(iname); | 
					
						
							|  |  |  |     console.log(ifaces); | 
					
						
							|  |  |  |     console.log(''); | 
					
						
							|  |  |  |   */ | 
					
						
							|  |  |  | }; |