2011-10-15 12 views
7

Jestem nowy w węźle i hakuję razem aplikację węzła wykorzystującą node_pcap do przechwytywania danych pakietowych i robienia z nią interesujących rzeczy. Jednym z danych wejściowych do przechwytywania danych jest interfejs sieciowy do nasłuchiwania, tj. "Eth0".Pobieranie listy interfejsów sieciowych w pliku node.js (ioctl SIOCGIFCONF)

Pomyślałem, że byłoby naprawdę świetnie, gdybym mógł programowo wyszukać dostępne interfejsy w systemie i zaprezentować je użytkownikowi programu i pozwolić im wybrać interfejs do słuchania. W C użyłbym ioctl (lub ioctlsocket z winsock) używając SIOCGIFCONF.

Moje pytanie brzmi, czy istnieje obecnie mechanizm do wykonania tego w węźle? Szukałem całkiem sporo i nie dotarłem do żadnego takiego rozwiązania.

Jeśli ta funkcja obecnie nie istnieje, zakładam, że będę w stanie napisać powiązanie modułu w C/C++ za pomocą ioctl, aby to osiągnąć.

Dziękuję za poświęcony czas!

Odpowiedz

11

Jak z node.js 0.6.0 masz

require('os').getNetworkInterfaces() 

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

+0

Doskonała! Dokładnie tego potrzebuję. Muszę się upewnić, że przejrzę dokumenty API następnym razem, zanim zadaję takie pytanie. Dziękuje za odpowiadanie :). – weak

+4

To jest 'os.networkInterfaces()' teraz – Vicary

+0

http://nodejs.org/api/os.html uzupełnienie –

0

Jeśli chcesz wymienić tylko nazwę interfejsów:

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

os.networkInterfaces() metoda zwraca obiekt zawierający tylko interfejsy sieciowe, które mają przypisane adresy sieciowe, ale jeśli chcemy mieć wszystkie karty sieciowe w komputerze, możemy użyć tej metody

var shell = require('shelljs'); 

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

to interfaceCard zawiera listę wszystkich interfejsów sieciowych

wyjście będzie

[ '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 
Powiązane problemy