2011-10-15 8 views
7

Sono nuovo nel nodo e sto violando insieme un'applicazione nodo che utilizza node_pcap per acquisire dati di pacchetto e fare cose interessanti con esso. Uno degli input per l'acquisizione dei dati è l'interfaccia di rete da ascoltare, ad esempio "eth0".Recupero di un elenco di interfacce di rete in node.js (ioctl SIOCGIFCONF)

Ho pensato che sarebbe davvero fantastico se potessi cercare a livello di codice le interfacce disponibili sul sistema e presentarle all'utente del programma e consentire loro di scegliere quale interfaccia ascoltare. In C, vorrei usare ioctl (o ioctlsocket con winsock) usando SIOCGIFCONF.

La mia domanda è, esiste attualmente un meccanismo per farlo nel nodo? Ho cercato un bel po 'e non sono arrivato a nessuna di queste soluzioni.

Se questa funzionalità non esiste al momento, suppongo che sarei in grado di scrivere un binding di modulo in C/C++ utilizzando ioctl per ottenere ciò.

Grazie per il vostro tempo!

risposta

11

Come di Node.js 0.6.0 avete

require('os').getNetworkInterfaces() 

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

+0

Eccellente! Questo è esattamente ciò di cui ho bisogno. Dovrò assicurarmi di esaminare i documenti API la prossima volta prima di fare una domanda come questa. Grazie per aver risposto :). – weak

+4

È 'os.networkInterfaces()' now – Vicary

+0

http://nodejs.org/api/os.html come complemento –

0

Se si desidera elencare solo il nome di interfacce:

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

os.networkInterfaces() metodo restituisce un oggetto contenente solo le interfacce di rete a cui è stato assegnato un indirizzo di rete, ma se vogliamo tutte le schede di rete in macchina possiamo usare questo metodo

var shell = require('shelljs'); 

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

questo interfaceCard ha elenco di tutte le interfacce di rete

uscita sarà

[ '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 
Problemi correlati