ROOM-STAY

動作環境

  • デバイス: Raspberry Pi 3 ModelB+
  • Raspbian OS: 4.14.X

環境構築(Raspberry Pi側)

nexmon

nexmonインストールの参考文献↓

https://github.com/seemoo-lab/nexmon

  • 本リポジトリ取得

      $ git clone git@github.com:komuran/room-stay.git
      $ cd room-stay/raspberry_pi
    
  • rootで実行されているか確認

      $ sudo su
    
  • nexmonのリポジトリ取得

      # make nexmon/install
    
  • 現在確認されているnexmonのバグに対応(2019/11/26時点)

      # make support/1
      # make support/2
      # make support/3
      # cd ~/nexmon/patches/bcm43455c0/7_45_189/nexmon/
      # sed -i -e 's/ifeq ($(findstring 4.9,$(shell uname -r)),4.9)/ifeq ($(findstring 4.9.,$(shell uname -r)),4.9.)/g' Makefile
      # sed -i -e 's/else ifeq ($(findstring 4.14,$(shell uname -r)),4.14)/else ifeq ($(findstring 4.14.,$(shell uname -r)),4.14.)/g' Makefile
      # reboot
    
  • rootで実行されているか確認

      $ cd room-stay/raspberry_pi
      $ sudo su
    
  • モード切り替えに対応する準備

      # make nexmon/setup1
      # cd ~/nexmon && source setup_env.sh && make 
      # cd /home/(ユーザ名)/room-stay/raspberry_pi
      # make nexmon/setup2
    
  • モニターモードパッチの使用

      # iw phy `iw dev wlan0 info | gawk '/wiphy/ {printf "phy" $2}'` interface add mon0 type monitor
      # ifconfig mon0 up
    
  • 再起動後でも自動的にドライバが使えるようにする

      # modinfo brcmfmac 
      (filename: /lib/modules/4.14.98-v7+/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko と表示された場合)
      # mv /lib/modules/4.14.98-v7+/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko /lib/modules/4.14.98-v7+/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.orig
      # cp ~/nexmon/patches/bcm43455c0/7_45_189/nexmon/brcmfmac_4.14.y-nexmon/brcmfmac.ko /lib/modules/4.14.98-v7+/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/
      # depmod -a
      # reboot
    

libtins

libtinsインストールの参考文献↓

http://libtins.github.io/download/

  • rootで実行されているか確認

      $ sudo su
      $ cd
    
  • libtinsを使えるようにする

      # apt-get update
      # apt-get upgrade
      # apt-get install libpcap-dev libssl-dev cmake
      # git clone https://github.com/mfontanini/libtins.git
      # cd ~/libtins
      # mkdir build
      # cd build
      # cmake ../
      # make
      # cmake ../ -DLIBTINS_ENABLE_CXX11=1
      # make install
      # ldconfig
    

curl

curlインストールの参考文献↓

https://qiita.com/kb10uy/items/976a52f687bcb7745fc7

  • rootで実行されているか確認

      $ sudo su
      $ cd
    
  • curlを使えるようにする

      # wget http://curl.haxx.se/download/curl-7.40.0.tar.gz
      # tar xvf curl-7.40.0.tar.gz
      # cd ~/curl-7.40.0
      # ./configure --with-ssl --with-zlib
      # make
      # make install
    

環境構築(Mac側)

Docker

  • brewでDockerをインストール

      $ brew install docker docker-compose
      $ brew cask install docker
    
  • 以下のコマンドでDockerのバージョンとアプリケーションフォルダのDocker.appが作成されていることが確認できればインストール完了

      $ docker --version
      Docker version 19.03.2, build 6a30dfc
    
  • Docker.appの起動

      $ open /Applications/Docker.app
    

本リポジトリの使い方

MySQLの準備

    $ cd room-stay
    $ make
    $ make run

http://localhost:3000

capture.cppの書き換え

  • 62行目の<Mac IP>をMacのIPアドレスに書き換える
  • 131行目の<SSID>をパケットキャプチャしたい対象のアクセスポイントのSSIDに書き換える
  • 137行目の<pcdev>をパケットキャプチャするデバイスの識別子に書き換える

パケットキャプチャの準備

  • wlan0のインターフェースをdown

      $ sudo ifconfig wlan0 down
    
  • モニターモードのインターフェースmon0を追加(無効状態)

      $ sudo iw phy `iw dev wlan0 info | gawk '/wiphy/ {printf "phy" $2}'` interface add mon0 type monitor
    
  • モニターモード(Mode:Monitor)で追加されているか確認

      $ iwconfig mon0
      mon0    IEEE 802.11  Mode:Monitor  Frequency:5.17 GHz  Tx-Power=31 dBm
              Retry short limit:7   RTS thr:off   Fragment thr:off
              Power Management:on
    
  • (MACで)以下のコマンドで対象のアクセスポイントのチャンネルを確認

      $ /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s
    
  • 確認したチャンネル数に変更(例として6ch(2.437GHz)へ変更する)

      $ nexutil -k6
    
  • チャンネルが変更されているか確認

      $ iwconfig mon0
      mon0    IEEE 802.11  Mode:Monitor  Frequency:2.437 GHz
              Retry short limit:7   RTS thr:off   Fragment thr:off
              Power Management:on
    
  • インターフェースを有効にする

      $ sudo ifconfig mon0 up
    
  • capture.cppをコンパイルし,実行する

      $ cd room-stay/raspberry_pi
      $ g++ -g3 capture.cpp -o capture -ltins -lcurl
      $ sudo ./capture mon0
    
  • 対象のアクセスポイントに通信接続があった際,パケットをとってくる