检索node.js中的网络接口列表(ioctl SIOCGIFCONF)

时间:2011-10-15 07:29:29

标签: javascript node.js interface v8 ioctl

我是节点的新手,正在使用node_pcap将节点应用程序混合在一起,以捕获数据包数据并使用它做有趣的事情。捕获数据的输入之一是要监听的网络接口,即“eth0”。

我认为如果我能够以编程方式查找系统上的可用接口并将它们呈现给程序的用户并允许他们选择要监听的接口,那将是非常好的。在C中,我将使用SIOCGIFCONF使用ioctl(或使用winsock的ioctlsocket)。

我的问题是,目前是否存在在节点中执行此操作的机制?我已经搜索了很多,并没有达到任何这样的解决方案。

如果当前不存在此功能,我会假设我能够使用ioctl在C / C ++中编写模块绑定来实现此目的。

感谢您的时间!

3 个答案:

答案 0 :(得分:18)

从Node.js 0.6.0开始,你有

require('os').getNetworkInterfaces()

请参阅http://nodejs.org/docs/latest/api/os.html#os.getNetworkInterfaces

答案 1 :(得分:2)

os.networkInterfaces()方法返回一个对象,该对象仅包含已分配网络地址的网络接口,但如果我们想要机器中的所有网卡,我们可以使用此方法

var shell = require('shelljs'); 

 var interfaceCard = shell.ls('/sys/class/net');

此interfaceCard具有所有网络接口的列表

输出

[ 'eth0',
'eth1',
'lo',
 stdout: 'eth0\neth1\nlo\n',
  stderr: null,
code: 0,
cat: [Function: bound ],
exec: [Function: bound ],
grep: [Function: bound ],
head: [Function: bound ],
 sed: [Function: bound ],
sort: [Function: bound ],
 tail: [Function: bound ],
  to: [Function: bound ],
 toEnd: [Function: bound ],
 uniq: [Function: bound ] ]

 interfaceCard=interfaceCard.stdout.split('\n');

 interfaceCard = eth0, eth1, lo

答案 2 :(得分:0)

如果您只想列出接口名称:

 Object.keys(os.getNetworkInterfaces())
  // [ 'lo0', 'en0', 'en3', 'awdl0' ]