G++

ただの趣味ブログ

Raspberry PiでWi-Fi切断時、自動的に再接続されるようにする方法

問題

Raspberry PiにUSB接続タイプのWi-Fi子機を接続して利用している場合、普通に使用していると、何らかの理由によりWi-Fi切断後、再接続してくれない (Wi-Fi子機が本体から外された、とかではなく、AP側が死んじゃってSSIDをつかめなくなっちゃうような状態を想定)

解決策 : 再接続スクリプトを仕込んでおく

  1. スクリプトを用意する

reconnect.sh

#!/bin/sh
ping -c 1 [gw_address]
test $? -eq 1 && sudo /etc/ifplugd/ifplugd.action wlan0 up

1行目 : おまじない 2行目 : ゲートウェイアドレスに向けて1発pingを打つ。うちの場合は192.168.0.254がゲートウェイなんだけど、ここは環境によって違うので、適宜修正する必要あり 3行目 : $?は直前のコマンドのexit値、pingは失敗すると、1が返ってくる。つまりゲートウェイへのpingが失敗した場合(Wi-Fi切れてるよねっていう判断)、/etc/ifplugd/ifplugd.action wlan0 upという別のスクリプトを叩く ※補足

  1. cronさんに頑張ってもらう

crontab -e

    * * * * * sh ~pi/scripts/reconnect.sh

スクリプト配置パスは適宜修正 上記の設定で毎分スクリプトが叩かれる。 つまり、Wi-Fiが切れたとしても、1分毎に再接続を試みる。

動作確認

  1. Raspberry Piに対して、別のPCからpingを打ち続けておく。
  2. おもむろにAPを落とす。(ここでpingは失敗し出すはず)
  3. 適当にトイレにでも行って用を足した後、APを起動させる。
  4. 多分、1-2分もあれば、pingが成功し始める 。

補足

  • OSはraspbian、本体はRaspberry Pi 2を使用して動作を確認
    • 細かいversionは後ほど追記、多分w
  • /etc/ifplugd/ifplugd.actionは元々標準で組み込まれているスクリプトなので、別途用意したりする必要はない
    • tail -f /var/log/syslogをしながら、Wi-Fi子機を抜き差ししてもらえばわかるが、OS自体が抜き差し時に叩いてる恐らく由緒正しいスクリプト
    • 中身はとても簡単なシェルスクリプトなので興味がある場合は見てみると良いと思う。簡単に言うと、引数でもらったインターフェースのup/downやwpa関連の面倒くさいことを自動的にやってくれている。べんり!

glibc脆弱性「Ghost」の対処

詳細は割愛するし、もう旬は過ぎてるんだけど、Ghostの対処しなきゃなーと思い、重い腰を上げました。
うちの自宅サーバ群では、基本的に外につながってる連中がいないので、あまり問題視してなかった。
昔はたくさんいたのだけれど、今はルータちゃんにVPNはって、各サーバたちにアクセスするスタイルになってる。
ついでに言うと、Eximとかpppdとかも使ってないしね。

とはいえ、脆弱性を放置するのもアレなので・・・もっと早くやれよって話ですよね。スミマセン。


確認用プログラムと簡単実行用スクリプト作ってくれた人もいたので、感謝しながらDL -> 実行、と。
案の定、アウト!だったので、対象しましょう。
ちなみに「vulnerable」と表示された場合、脆弱性アリです。
not vulnerable」なら大丈夫

wget https://raw.githubusercontent.com/mholzinger/CVE-2015-0235_GHOST/master/build.sh
chmod 755 build.sh
./build.sh


対処法は至って簡単。RedHat系ならyum update、debian系ならapt-get update/upgrade をするだけ。
RedHat系なら、「2.12-1.149.el6_6.5」に上がっていればok。楽ちん。

もう一回確認プログラム走らせて大丈夫なのを確認して終わり。あ、再起動も必須。

重複パッケージの削除

それほど頻度は多くないけど、RHEL系で同名のパッケージがインストールされてしまってるときがある。
例えば、x86用とx64用とかね。
「rpm -qa」で調べてみると、全く同じパッケージが2つ表示されてしまうはず。

何の拍子に入っちゃったのかはわからないが、こうなってしまうと普通に「rpm -e hogehoge」ってやっても、エラー吐いて削除ができない。
そんなときに使うコマンド

rpm -e --allmatches hogehoge

で、さらにたまに依存関係で消せないときもあるので、そのときは

rpm -e --allmatches --nodeps hogehoge

ってやる。

まぁ依存関係無視の「--nodeps」は有名だし、忘れることがないので良いのだけれど、
「--allmatches」は何か忘れちゃう。
忘れないようにここに書いてこうって寸法。
忘れても、ここに見に来ればいいしね!

範囲指定Pingバッチ

タイトルの通り、192.168.0.1-254などの範囲に自動的にpingを打つバッチ。

有名なExPingなんかでも同じことは出来るのだけれど、あれは第4オクテット限定なんだよね。

仕事で第3オクテットの範囲指定pingを行いたかったので、作ってみたバッチ。

%%aの位置を変えれば、第3だろうと第1だろうと好きな範囲にpingが打てる

pingのエコー数を少なく、タイムアウトを短くしているおかげ?せい?で、なかなか高速。

@echo off
setlocal enabledelayedexpansion

for /l %%a in (1,1,254) do (

	ping -n 1 -w 500 192.168.0.%%a > nul
	if !errorlevel! == 0 (
		echo 192.168.0.%%aにping → OK
	) else (
		echo 192.168.0.%%aにping → NG
	)
)

endlocal

FortiGateの初期化方法

よく知られた方法だと思うけれど、自分がやったときにちょっとハマったので忘れないように記録しておく

 

0.ForiGateのシリアル番号を控えておく(メモ帳とかにシリアル控えておいてコピペできる準備をしておく)

 

1.電源落とした状態でForiGate本体とPCをコンソールケーブルにて接続

 

2.ターミナルアプリケーション起動して、電源ON

 

3.ログインプロンプトが表示されたら、以下を30秒以内に入力!

ユーザ名 : maintainer
パスワード : bcpbシリアル番号

 

4.ログインできたら、「execute factoryreset」を入力

 

5.確認を求められるので、「y」を入力

 

補足

※bcpbの後はスペースなどは入れず、大文字のシリアル番号を入力すること

※ユーザ名を入力し始めてから30秒とかではなく、ログインプロンプトが表示されてから30秒以内のようなので注意(自分はこの点を勘違いしていて最初うまくいかなかった)

※なので、どうせ起動するのに時間かかるから他の作業やってよ~って感じで待つのではなく、電源ONしたらPCの前で張り付いて画面とにらめっこしてたほうが良いと思う

Visual Studio 2012 Professionalでのspy++関連ファイルのパス

packages\professionallp\cab8.cab

FL_spyxx_chm_132027_132027_cn_jpn.3643236F_FC70_11D3_A536_0090278A1BB8
FL_spyxx_chm_amd64_cn_jpn.3643236F_FC70_11D3_A536_0090278A1BB8
FL_spyxx_exe_amd64_x86_jpn.3643236F_FC70_11D3_A536_0090278A1BB8
FL_spyxxhk_dll_122873_122873_x86_ln.3643236F_FC70_11D3_A536_0090278A1BB8
FL_spyxxui_dll_amd64_x86_jpn.3643236F_FC70_11D3_A536_0090278A1BB8

 

packages\professionallp\cab9.cab

FL_spyxx_exe_122872_122872_x86_jpn.3643236F_FC70_11D3_A536_0090278A1BB8
FL_spyxxui_dll_x86_jpn.3643236F_FC70_11D3_A536_0090278A1BB8

 

intel x86で使用する場合は

cab8.cab

FL_spyxx_chm_132027_132027_cn_jpn.3643236F_FC70_11D3_A536_0090278A1BB8

FL_spyxxhk_dll_122873_122873_x86_ln.3643236F_FC70_11D3_A536_0090278A1BB8

cab9.cab

FL_spyxx_exe_122872_122872_x86_jpn.3643236F_FC70_11D3_A536_0090278A1BB8

FL_spyxxui_dll_x86_jpn.3643236F_FC70_11D3_A536_0090278A1BB8

の4つをリネームすればおk

 

AMD用のspyxxhkがどこにあるかわからない・・・

intelで使っているのであまり探す気もない。気が向いたら探すかも