Wiresharkを用いたWi-fiスキャン

目的

パケットキャプチャツールであるWiresharkを用いて、無線LANを流れるパケットをキャプチャします。

準備

まずは下記のものを用意してください

  1. 無線LANに接続可能なLinuxマシン

インストール

Ubuntu

                        $ sudo apt-get install wireshark
                    

ArchLinux

                        $ sudo pacman -Sy wireshark
                    

設定

まずは、インターフェースの設定を行います。

無線LANカードには次のようなモードがあります。

  • マネージモード:普段最も使う、アクセスポイントへ接続するモード
  • アドホックモード:アクセスポイントを介さず端末同士で直接接続するモード 最近ではゲーム機の通信などに用いられる
  • マスターモード:テザリングなど、自分がアクセスポイントとなり、クライアントを接続させて通信するモード
  • モニターモード:今回使う、自分はデータの送信は行わず、ただ飛び交うパケットを受信し続けるモード

これらからわかるように普段は無線LANカードはマネージモードになっています。 このままでは、飛び交うパケットのキャプチャができないのでモニターモードに設定します。

iwconfigで確認してみましょう。

                    $ iwconfig
                

wlan0やlwp2s0などで表されるのが無線LANカードです。 Mode:のうしろにManagedと書いてある場合はマネージモードになっています。

設定

まずは、普段は無線LANカードは有効になっています。 設定を行うためにip linkを使ってdownにさせます。

wlp2s0はiwconfigで確認したデバイス名に各自置き換えてください。

                        # Ubuntuの場合
                        $ sudo iwconfig wlp2s0 down
                        # ArchLinuxの場合
                        $ sudo ip link set down wlp2s0
                    

この操作を行わないと、下記のように怒られます。

                        Error for wireless request "Set Mode" (8B06) :
                            SET failed on device wlp2s0 : Device or resource busy.
                    

ip linkでdownにさせたため、ifconfigで確認すると、wlp2s0(または任意のデバイス名)は見えなくなっています。

                        $ ifconfig
                    

さて、これで設定を行うことができるようになりました。

無線LANカードのモードをモニターモードに設定します。

                        $ sudo iwconfig wlp2s0 mode monitor
                    

これでモードがモニターモードに設定されました。 iwconfigで確認してみましょう。

                        $ iwconfig
                    

Mode:Monitorとなっていると思います。 Managedに戻す場合は、monitorの部分をmanagedに変えてください。

次にさきほど、ip linkでdownにしたインターフェースをupにします。 これによってifconfigでも確認できるようになり、インターフェースが使えるように。

                        # Ubuntuの場合
                        $ sudo iwconfig wlp2s0 up
                        # ArchLinuxの場合
                        $ sudo ip link set up wlp2s0
                        # 次にどちらの場合も
                        $ ifconfig
                    

これで設定は完了です。

もし、ビーコンパケットを読んでカレントチャンネルを得た場合は、チャンネルを変える必要が出てくるかもしれません。 チャンネルを変える場合は下記のように実行してください。

この場合はチャンネルを8に変えてください。

                        $ sudo iwconfig wlp2s0 channel 8
                    

キャプチャ

設定を完了させたので、いよいよキャプチャを行います。

wiresharkを起動してください。

                    $ sudo wireshark
                

ここからはいつもどおりのパケットキャプチャです。 wiresharkの説明を見ながらインターフェースをwlp2s0など無線LANカードに設定して、キャプチャを行ってください。

おわりに

いかがでしたでしょうか。 わからないことなどがありましたら、ご質問だくさい。

2015/7/28

参考サイト

Linuxの固定IP設定

目的

今回はLinuxの固定IPの設定についてです。

サーバや組み込みなどではDHCPを用いたIPアドレスの割当ではなく、事前にデバイスとIPアドレスが関連付けられている固定IPの方が多く用いられます。

今回は、そんな任意のIPアドレスの割当方法をやっていきたいと思います。

方法

では、ここからはIPアドレスの設定を行っていきます。

Linuxの中でも、ディストリビューションによって採用するソフトが変わるため、今回はArchLinuxなどnetctlを使うOSをメインにやっていきます。

準備

まずは下記のものを用意してください

  1. ネットワークに接続したLinuxマシン

以上です。

一時的なIPアドレスの割当

この方法では、再起動すると設定が初期化されてしまうので、恒久的な設定をしたい場合は後述の方法で行ってください。

この方法は、接続したDHCP機能がないデバイスと通信がしたいときなどに一時的に使用します。

まずは、設定するデバイス名を調べてください。

                        $ ifconfig
                    

ArchLinuxの場合

ipを使って一時的に設定します。

デバイス名がわかったら、下記のコマンドを実行します。IPアドレス、サブネットマスク、デバイス名は適宜設定してください。

                            $ sudo ip addr add 192.168.7.2/24 dev enp4s0"
                        

もう一度ifconfigで確認して、IPアドレスが割り当てられていたら成功です。

恒久的なIPアドレスの割当

この方法で設定したIPアドレスは再起動しても設定が維持されます。

多くの場合はこちらの方法を使います。

まずは、設定するデバイス名を調べてください。

                        $ ifconfig
                    

ArchLinuxの場合

ArchLinuxはnetctlを採用しているため、設定にはnetctlを使います。

特徴として、デバイスごとに設定ファイルを作成して有効にします。

まずは、設定ファイルのテンプレートをコピーします。

                            $ sudo cp /etc/netctl/examples/ethernet-static /etc/netctl/staticip
                        

コピーしてきたファイルは下記のようなものになっています。

                           Description='A basic static ethernet connection'
                           Interface=eth0
                           Connection=ethernet
                           IP=static
                           Address=('192.168.1.23/24' '192.168.1.87/24')
                           #Routes=('192.168.0.0/24 via 192.168.1.2')
                           Gateway='192.168.1.1'
                           DNS=('192.168.1.1')
                        

インターフェイスやIPアドレスなどは適宜設定してください。

私の環境では、下記のように設定ました。

                           Description='A basic static ethernet connection'
                           Interface=enp4s0
                           Connection=ethernet
                           IP=static
                           Address=('192.168.1.23/24')
                           Gateway='192.168.1.1'
                           DNS=('8.8.8.8')
                        

ファイルを保存したら次に、有効にします。

                            $ sudo netctl enable staticip
                        

再起動後に固定IPが有効になります。

                            $ sudo reboot
                        

2015/10/21追記
上記方法ではうまくいかない場合があります。 その場合は下記方法を試してみてください。

                            $ sudo systemctl stop netctl-ifplugd@eth0
                            $ sudo netctl stop-all
                            $ sudo systemctl disable netctl-ifplugd@eth0.service
                            $ sudo systemctl enable netctl@eth0
                            $ sudo netctl enable staticip
                        

Ubuntu・Debianの場合

UbuntuやDebianでは、/etc/network/interfacesを編集することで実現します。

/etc/network/interfacesを開いてください。
ファイルには下記のようなものが書いてあると思います。

                            auto lo
                            iface lo inet loopback
                        

これはloの設定です。

今回は、さらにこれに設定したいデバイスの情報を追加していきます。

このファイルの下に下記の情報を追加してください。 デバイス名・アドレス・ネットマスクは適宜変更してください。

                            auto eth0
                            iface eth0 inet static
                            address 192.168.1.200
                            netmask 255.255.255.0
                            gateway 192.168.1.1
                            dns-nameservers 8.8.8.8
                        

ファイルを保存し、再起動後に固定IPが有効になります。

                            $ sudo reboot
                        

おわりに

わからないことなどがありましたら、ご質問だくさい。

2015/7/02

pacmanの使い方

目的

ArchLinuxのパッケージ管理マネージャーpacmanの使い方メモです。

準備

まずは下記のものを用意してください

  1. ArchLinuxマシン

インストール

パッケージのインストール

                    $ sudo pacman -S パッケージ名
                

ローカルパッケージのインストール

                    $ sudo pacman -U パッケージ名
                

削除

パッケージのアンインストール

                    $ sudo pacman -Rns パッケージ名
                

孤立パッケージのアンインストール

                    $ sudo pacman -Rsn $(pacman -Qtdq)
                

アップデート

データベースの更新

                    $ sudo pacman -Sy
                

アップデート

                    $ sudo pacman -Syu
                

検索

パッケージの検索

                    $ sudo pacman -Ss パッケージ名
                

インストール済みパッケージの検索

                    $ sudo pacman -Qs パッケージ名
                

インストール済みパッケージ

インストール済みパッケージの表示

                    $ sudo pacman -Qqe
                

コマンドのパッケージのチェック

コマンドがどのパッケージでインストールされたのかを調べたい時には下記のように実行します。

この場合はifconfigを調べます。

                    $ pacman -Qo `which ifconfig`
                

おわりに

いかがでしたでしょうか。 わからないことなどがありましたら、ご質問だくさい。

2015/7/28

2015/8/10 追記

nmapの使い方

目的

便利なポーツスキャニングツールnmapの使い方を、必要に応じて追記しながら解説します。

準備

まずは下記のものを用意してください

  1. Linuxマシン

インストール

Ubuntu

                        $ sudo apt-get install nmap
                    

ArchLinux

                        $ sudo pacman -Sy nmap
                    

使い方

pingスキャン

pingを使ってネットワーク上のホストをスキャンします。

192.168.1.1から192.168.1.255までスキャンをしてみます。

                        $ nmap -sP 192.168.1.1-255
                    

sshスキャン

sshが使用する22番ポートにパケットを送り、sshが起動しているかどうかをスキャンします。

これにより、ネットワーク上に存在するraspberrypiやbeagleboneblackのIPアドレスを推測することができます。

                        $ nmap -p22 192.168.1.1-255
                    

開いているIPアドレスのみを表示する場合はgrepに流し込んでopenの文字を探します。

                        $ nmap -p22 192.168.1.1-255 | grep -i -n -B3 open
                    

OSスキャン

-OオプションでOSの推定をすることができます。

                        $ sudo nmap -O 192.168.1.1-255
                    

おわりに

いかがでしたでしょうか。 わからないことなどがありましたら、ご質問だくさい。

2015/7/28

参考サイト

LinuxでWi-Fiに接続する

目的

接続用アプリケーションをインストールしていないArchLinuxなど、GUIを使わない方法でWi-Fiに接続しなければならない場合があります。

今回はそんな時にwpa_supplicantを使ってWi-Fiに接続する方法についてです。

準備

まずは下記のものを用意してください

  1. 無線LANに接続できるLinuxマシン

インストール

ArchLinuxの場合は下記のようにしてインストールします。

                    $ sudo pacman -Sy net-tools wpa_supplicant iw iproute wireless_tools
                

チェック

現在のデバイスの状態をチェックします。

                    $ iw dev wlan link
                

スキャン

利用可能なアクセスポイントをスキャンします。

デバイス名はifconfigなどで調べておいてください。

                    $ sudo iw dev wlan0 scan
                    # または
                    $ sudo iwlist wlan0 scan
                

大量の情報が表示されるのでSSIDだけgrepで表示させましょう。

                    $ sudo iw dev wlan0 scan | grep -i -n ssid
                    # または
                    $ sudo iwlist wlan0 scan | grep -i -n ssid
                

接続

スキャンして得られたアクセスポイント名を用いて接続します。

wpa_supllicantを使って接続するので、設定ファイルを作成します。

まずは、wpa_passphraseを使って基本となるファイルを作成します。

                    $ wpa_passphrase your_essid your_password > wpa_supplicant_your.conf
                

WPA2の場合はこれで十分です。WPAの場合は下記のようにさらに追記します。

                    network={
                        proto=WPA
                        key_mgmt=WPA-PSK
                        pairwise=CCMP
                        group=CCMP
                        priority=2
                        ssid="your_essid"
                        #psk="your_password"
                        psk="**********your_number*************************"
                    }
                

これを使って接続します。

                    $ sudo wpa_supplicant -c ./wpa_supplicant_your.conf -i wlan0
                

おわりに

いかがでしたでしょうか。 わからないことなどがありましたら、ご質問だくさい。

2015/7/30

Linux・Windowsでのテキスト変換

目的

今回はLinuxとWindowsのテキスト変換についてです。

LinuxとWindows間でソースコードなどテキストファイルをやりとりしたいことがあります。 その時、USBやクラウドなどを使って転送をすること自体はできますが、テキストエディタで開いてもうまく表示されないことがあります。

これはWindowsとLinuxでは改行コードが異なるためです。

Linuxの改行コードはLFのみです。\nのみで改行して行の頭まで移動します。
Windowsの改行コードはCR/LFの2つです。 \r\nで改行して行の頭まで移動します。

このため、LinuxのテキストファイルをWindowsで開くと改行がされておらず、WindowsのテキストファイルをLinuxで開くと開業されるときに最語に^Mがついてしまいます。

今回はこれらの相互変換をやっていきたいと思います。

方法

準備

まずは下記のものを用意してください

  1. ネットワークに接続したLinuxマシン

以上です。

チェック

文字コードのチェックはnkfにgオプションをつけて使用します。

                        $ nkf -g filename
                    

変換

LinuxからWindowsへの変換

LinuxのファイルをWindowsのファイルへ変換します。

                            $ nkf -w -Lu filename
                        

WindowsからLinuxへの変換

WindowsのファイルをLinuxのファイルへ変換します。

                            $ nkf -s -Lw filename
                        

おわりに

わからないことなどがありましたら、ご質問だくさい。

2015/7/03

Linux自動ログイン

目的

今回はLinuxの自動ログインについてです。 ユーザー名・パスワードを入力せずにログインをします。 Ubuntu(Upstart?) Archlinux(systemd)での方法を説明します。

方法

準備

設定したいLinuxマシンを用意してください。

Ubuntu(Raspbian)での方法

Ubuntu(Raspbian)での方法です。
まず、inittabファイルを開きます。

                        sudo vim /etc/inittab
                    

開いたファイルの中から下の行を見つけ出して、行頭に#をつけてコメントアウトします。

                        1:2345:respawn:/sbin/getty 38400 tty1
                    

そのすぐ下に下の行を追加します。 "username"は適宜存在するユーザー名に置き換えてください。

                        1:2345:respawn:/bin/login -f username tty1 /dev/tty1 2>&1
                    

保存して再起動すると自動ログインになります。

ArchLinuxでの方法

ArchLinuxでの方法です。 ArchLinuxはinitデーモンにsystemdを使っています。
まず、systemdの設定ファイルを用意します。

                        cp /usr/lib/systemd/system/getty@.service /usr/lib/systemd/system/autologin@.service
                    

次に、ファイルを開いて次の行を見つけ出して、行頭に#をつけてコメントアウトします。

                        ExecStart=-/sbin/agetty --noclear %I $TERM
                    

そのすぐ下に下の行を追加します。 "username"は適宜存在するユーザー名に置き換えてください。

                        ExecStart=-/sbin/agetty --noclear -a username %I 38400 linux
                    

変更したらファイルを保存して閉じてください。

最後に、systemdに登録して有効化してください。

                        systemctl disable getty@tty1
                        systemctl enable autologin@tty1
                    

再起動すると自動ログインになります。

おわりに

いかがでしたでしょうか?
わからないことなどがありましたら、ご質問だくさい。

2015/6/29