16

私はノードを初めて使用し、 node_pcapを使用してノード アプリケーションをハッキングして、パケット データをキャプチャし、それを使用して興味深いことを行います。データをキャプチャするための入力の 1 つは、リッスンするネットワーク インターフェイス、つまり「eth0」です。

システムで使用可能なインターフェイスをプログラムで検索し、プログラムのユーザーに提示して、リッスンするインターフェイスを選択できるようにできれば、本当に素晴らしいと思いました。C では、SIOCGIFCONF を使用してioctl (または ioctlsocket と winsock) を使用します。

私の質問は、ノードでこれを行うメカニズムが現在存在するかどうかです。私はかなり検索しましたが、そのような解決策には達していません。

この機能が現在存在しない場合は、ioctl を使用して C/C++ でモジュール バインディングを記述してこれを実現できると思います。

お時間をいただきありがとうございます!

4

3 に答える 3

21

ノード 13.7.0 の時点で有効な更新

この回答が送信されてから名前が変更されました。今は次のnetworkInterfaces()ようになっています。

require('os').networkInterfaces()

または、おそらく次のようにすることをお勧めします。

import { networkInterfaces } from 'os';

const interfaces = networkInterfaces();

新しいドキュメントの URL: https://nodejs.org/docs/latest/api/os.html#os_os_networkinterfaces

元の答え

Node.js 0.6.0 の時点で、

require('os').getNetworkInterfaces()

http://nodejs.org/docs/latest/api/os.html#os.getNetworkInterfacesを参照してください。

于 2011-10-15T10:10:55.950 に答える
1

インターフェイスの名前だけを一覧表示する場合:

 Object.keys(os.getNetworkInterfaces())
  // [ 'lo0', 'en0', 'en3', 'awdl0' ]
于 2016-11-13T18:46:57.577 に答える
0

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
于 2017-06-16T06:56:41.240 に答える