node.jsによるwifiデータ受信

OpenBlocks IoT BX1とインテルEdison Kitで無線LANのwifiパケットデータを受信するためにpcapを使用します。

pcapを使用することで以下の情報が取得できます。

・TCP Analysis

・HTTP Analysis

・WebSocket Analysis

1. pcapのインストール

# npm install pcap

pcapをインストールするには予めlibpcap-devをインストールしておく必要があります。

OpenBlocksの場合
# aptitude install -y libpcap-dev
インテルEdison Kitの場合
# opkg install libpcap-dev

 

2. 受信プログラム

var util = require('util'),
  pcap = require("pcap"), pcap_session;
    
if (process.argv.length > 4) {
  util.error("usage: simple_capture interface filter");
  util.error("Examples: ");
  util.error('  simple_capture "" "tcp port 80"');
  util.error('  simple_capture eth1 ""');
  util.error('  simple_capture lo0 "ip proto \\tcp and tcp port 80"');
  process.exit(1);
}

pcap_session = pcap.createSession(process.argv[2], process.argv[3]);

// libpcap's internal version numnber
util.puts(pcap.lib_version);

// Print all devices, currently listening device prefixed with an asterisk
pcap_session.findalldevs().forEach(function (dev) {
  if (pcap_session.device_name === dev.name) {
    util.print("* ");
  }
  util.print(dev.name + " ");
  if (dev.addresses.length > 0) {
    dev.addresses.forEach(function (address) {
      util.print(address.addr + "/" + address.netmask);
    });
    util.print("\n");
  } else {
    util.print("no address\n");
  }
});

// Listen for packets, decode them, and feed the simple printer.  No tricks.
pcap_session.on('packet', function (raw_packet) {
  var packet = pcap.decode.packet(raw_packet);

    console.log(pcap.print.packet(packet));
});

※pcapのサンプルプログラムを使用

3. 動作確認

# node プログラム名
libpcap version 1.3.0

* wlan0 192.168.XX.XX/255.255.255.0XX80::XXXX:XXXX:XXXX:XXXX/ffff:ffff:ffff:ffff::
nflog no address
any no address
lo 127.0.0.1/255.0.0.0::1/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
XX:XX:XX:XX:XX:XX -> YY:YY:YY:YY:YY:YY 192.168.XX.XX:22 -> 192.168.XX.XX:59036 TCP len 116 [ack,psh]

※デバイスで受信できるパケットのみ取得できます。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中