ネットワークに繋がったタイミングを検出する

[戻る]

特にセキュリティの厳しい無線 LAN 環境ではログインしてから実際にネットワークに繋がるのにいろいろ検査をするらしく時間がかかります. 結果, ネットワークドライブの自動接続がタイムアウトで失敗することがあります. 私はメールログをネットワークドライブ上に置いて違う PC からでも既読情報やログを扱うようにしているのですが, タイムアウトしてしまうとメーラがログのあるドライブにアクセスできません. いちいちファイルエクスプローラから該当ドライブを覗く (ファイル一覧情報を取得するタイミングで再接続するらしい) 必要があり手間です.

ネットワークに繋がったタイミングが分かれば, その段階で net use コマンドを発行すれば済むはずです. というわけでそういうコマンドを作ってみました. こちらです. 第一引数にネットワークコンピュータで繋げようとする PC の IP アドレスなど適当なホスト名を指定すると, 繋がるまで待ってくれます. 接続確認は samba のポート (tcp 445 番) ですが 第二引数で別の番号を指定することもできます. また第三引数はタイムアウトの時間です. 5 秒単位で指定します. 省略時は 30, およそ二分半です. タイムアウトした場合は 1 (接続確認した場合は 0) を返すので, 適当にバッチファイルで

d:\tools\cui\tcpconnect 192.168.0.3
if %ERRORLEVEL% == 1 exit

net use L: \\192.168.0.3\hoge

とでも書いておくとネットワークにつながったら 自動でネットワークドライブに再接続するようになります. スタートアップに仕込んでもいいですし, メーラ起動スクリプトにしこんでいてもいいでしょう.

ところでセキュリティが厳しすぎる環境だと, ログインしてからネットワークにつながり実際に使えるまで長い時間がかかります. すなわち PC の前に座ってから

  1. PC の電源を入れる
  2. OS がブートしてログインダイアログが出るのを待つ
  3. ID とパスワードを入力してログインする
  4. セキュリティチェックが済んでネットワークに繋がるのを待つ
  5. やっと作業に入る
といった手順を踏まないといけません. 2 と 4 は時間がかかるくせに途中 3 があるため席を離れるわけにはいきません. 自動ログインを使って 3 を省こうと画策すると 4 のセキュリティチェックにひっかかります.

これをくぐり抜けるにはどうすれば考えてみました. 自動ログインでログインした後スタートアップで自動ログインを無効にして 4. の セキュリティチェックをかいくぐればいいはずです. すなわち

  1. PC の電源を入れる
  2. OS がブートした後自動ログインが開始する
  3. スタートアップで自動ログインを解除する
  4. セキュリティチェックは自動ログインが設定されてないのでパスする
  5. 作業する
  6. シャットダウンスクリプトで自動ログインを再設定する
とするのです.

3 や 6 の自動ログイン設定・解除の方法ですが, そういうプログラムを作れば済むはずです. こちらです. これはレジストリの AutoAdminLogon あたりをいじるだけなのですが, 設定時に自分のログイン ID, パスワードをレジストリに書き込む必要があります. そのため, まずそれらの情報を

autologin -f [ID] [pass] > pass.txt
と打ってファイル化します. パスワードは一応難読化してますが, ちゃちいアルゴリズムなので暗号化するなり隠しファイルにした方がいいかもしれません. 後は -s オプションでこのファイルを指定する (autologin -s pass.txt) と自動ログインが有効になります. -u オプションで起動すると無効になります.

というわけで, 上述のスタートアップで動かすバッチファイルの先頭に

d:\tools\cui\autologin -u
%windir%\system32\rundll32.exe user32.dll,LockWorkStation
と, シャットダウンスクリプト
d:\tools\cui\autologin -s pass.txt
と記述すればお望みの動作が実現できます. twaitを適当に組み合わせてみいいでしょう.

なお, あくまでそうやったら回避できるということを示しただけです. 自動ログインをチェックしているということは, それをさせたくないというネットワークポリシーがあるはずです. 守りましょう ;-p


2011.8