Получение списка сетевых интерфейсов в node.js (ioctl SIOCGIFCONF) - PullRequest
11 голосов
/ 15 октября 2011

Я новичок в узле и собираю приложение узла, использующее node_pcap для захвата пакетных данных и выполнения с ними интересных задач.Одним из входных данных для сбора данных является прослушиваемый сетевой интерфейс, т. Е. «Eth0».

Я подумал, что было бы действительно здорово, если бы я мог программно найти доступные интерфейсы в системе и представить ихПользователь программы и позволяет ему выбрать интерфейс для прослушивания.В C я бы использовал ioctl (или ioctlsocket с winsock), используя SIOCGIFCONF.

Мой вопрос заключается в том, существует ли в настоящее время механизм для этого в узле?Я немного искал и не пришел ни к какому такому решению.

Если бы этой функциональности в настоящее время не существовало, я бы предположил, что смогу написать связывание модулей на C / C ++ с использованием ioctlчтобы сделать это.

Спасибо за ваше время!

Ответы [ 3 ]

18 голосов
/ 15 октября 2011

По состоянию на Node.js 0.6.0 у вас есть

require('os').getNetworkInterfaces()

См. http://nodejs.org/docs/latest/api/os.html#os.getNetworkInterfaces

2 голосов
/ 16 июня 2017
Метод

os.networkInterfaces () возвращает объект, содержащий только сетевые интерфейсы, которым назначены сетевые адреса, но если нам нужна вся сетевая карта в машине, мы можем использовать этот метод

var shell = require('shelljs'); 

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

у этой интерфейсной карты есть списокиз всех сетевых интерфейсов

вывод будет

[ '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
0 голосов
/ 13 ноября 2016

Если вы хотите перечислить только названия интерфейсов:

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