node.jsによるwifiデータ受信
OpenBlocks IoT BX1とインテルEdison Kitで無線LANのwifiパケットデータを受信するためにpcapを使用します。
pcapを使用することで以下の情報が取得できます。
・TCP Analysis
・HTTP Analysis
・WebSocket Analysis
1. pcapのインストール
1 |
# npm install pcap |
pcapをインストールするには予めlibpcap-devをインストールしておく必要があります。
1 2 |
OpenBlocksの場合 # aptitude install -y libpcap-dev |
1 2 |
インテルEdison Kitの場合 # opkg install libpcap-dev |
2. 受信プログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
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 addressn"); } }); // 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. 動作確認
1 |
# node プログラム名 |
1 2 3 4 5 6 7 |
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] |
※デバイスで受信できるパケットのみ取得できます。