【技】IPアドレス判定 → 強制変更Batch

kooです。( ノ゚Д゚)ヨッ!
 
一時期、Batch職人でした。
いろんな事をBatch化して徹底的に自動化してました。
 
ms-dos-batch-file-icon1
んで、今回
妻のレッツノートで、週末にはバックアップを取るために
IPアドレスを自宅内部の 固定IPに変更してあげる必要があるので、
Batchファイルにしました。
 
職場では、DHCP接続で使っているということで、
判定を入れて1ファイルで自動判定
自宅に居て、IPアドレスが振られていない(代替IP=169.*)場合は、
自宅内IPを割り当てる。

もし、自宅内IPが割り当てられている場合は、DHCPに戻すという動きをします。

つまり、自宅で動かすと
代替IP <- -> 自宅内固定IP 
の変換を繰り返します。
※自動判定はさせますが、変換は1回のみでスクリプト自体を終わらせています。

さらに、妻のレッツノートで、我が家のネットワークに接続している状況が

宅内→インターネットOK回線 = 無線LANアダプタ
宅内→バックアップ用専用内部セグメント = 有線LAN
 
なのです。

基本的には、無線LANで 妻は作業しています。
 
バックアップだけは、外から一切見えない 別セグメント化しちゃっていて
且つ、
無線LAN側からのルーティングは入れていないのです。
※バックアップの速度的な問題もあり、バックアップ自体は有線で行う!としているので、
 ルーティング入れる必要はない と思っています。
 
だんだん、複雑になってきました。
 
 
つまり、
無線LANと有線LANがあります。
 
職場から妻がレッツノートを持って帰ってきました。

この段階では、有線LANの設定はDHCPになっています。
 
そこで、これから紹介するスクリプトを実行すると
DHCPだったIPが、自宅内部で外側には出られないIP帯に強制変更させるわけです。
 
間違って無線LANのIP情報を判定の元にしてはいけません。
 
ということで、本題のスクリプト全文
=========================================

@echo off
setlocal ENABLEDELAYEDEXPANSION
:: 環境変数 MyIP1, MyIP2, MyIP3... にIPアドレスを取得する
 
call :GET_IP_ADDRESSES
if defined MyIP1 echo IP1: %MyIP1%
if defined MyIP2 echo IP2: %MyIP2%
if defined MyIP3 echo IP3: %MyIP3%
goto EOF
 
 
:GET_IP_ADDRESSES
set GET_IP_ADDRESSES_COUNT=1
for /f "usebackq delims=: tokens=2*" %%i in (`ipconfig.exe ^| findstr.exe /r /c:"IPv4 .*"`) do (
set MyIP=%%i
set MyIP!GET_IP_ADDRESSES_COUNT!=!MyIP: =!
set /a GET_IP_ADDRESSES_COUNT=!GET_IP_ADDRESSES_COUNT!+1
)
exit /b
 
 
:EOF
 
REM 検索対象
SET SEARCHTEXT="169."
 
ECHO %MyIP2% | find %SEARCHTEXT% >NUL
 
IF NOT ERRORLEVEL 1 (goto 169) ELSE (goto NO169)
 
:169
ECHO 自宅用バックアップ用IPアドレスに変更します。
 
set IFNAME="ローカル エリア接続"
set IPADDR=192.168.100.50
set MASK=255.255.255.0
set GW=192.168.100.1
set DNS1=192.168.100.1
set DNS2=127.0.0.1
 
netsh interface ipv4 set address name=%IFNAME% static %IPADDR% %MASK% %GW% 1
netsh interface ipv4 set dnsservers name=%IFNAME% static %DNS1% primary validate=no
netsh interface ipv4 add dnsservers name=%IFNAME% %DNS2% index=2 validate=no
 
goto owari1
 
 
:NO169
ECHO DHCP設定に変更します。
 
set IFNAME="ローカル エリア接続"
 
netsh interface ipv4 set address name=%IFNAME% dhcp
netsh interface ipv4 set dnsservers name=%IFNAME% dhcp
 
goto owari2
 
:owari1
echo 現在の有線ポートのIPアドレス設定は、 192.168.100.50 です。
pause
exit /b
 
 
:owari2
echo 現在の有線ポートのIPアドレス設定は、 DHCP設定 です。
pause
exit /b

=========================================

有線LAN、無線LANがあるので、IPアドレスは変数にそれぞれ格納します。
妻のレッツの場合は、
1番目に無線LAN
2番目に有線LANの情報が書き込まれます。
 
なので、今回判定に使うのは2番目のみ
3番目も取得するような動きを入れていますが、
無ければ無いで放置されるので、とりあえずは保険として。
 
なので、
自宅帰宅直後は、DHCPの設定状態で
我が家のバックアップ用LANケーブルを有線ポートの口にぶっさします。
バックアップ用のセグメントには、じつはルーターも無ければ、何もない。
バカHUBとバックアップ用の4TB NASだけ。
 
なので、当然DHCP設定にしていると、
OSの代替IPが強制的に振られるのです。
 
判定としては、有線LANポートにIPアドレス 169~~~ で始まるものがある場合は、
内部向けとしているIPアドレスへの強制変更(固定IP化)するわけです。

※上記で書いているスクリプト内のIPは実際に使っているものではありません。
 実際は、ちょいと異なります。
 
動きは
169~~ IPですか?
 ↓
はいそうです → IPを192.168.100.50に変更!

169~~ IPですか?
 ↓
そうじゃありません → IPをDHCP設定に変更!

下側の場合は、妻が自宅から職場に持って行った場合の判定処理になっています。
自宅で固定IP化されているのですから、
職場で付与されるDHCPのアドレスとは当然異なります。
つまり、DHCPにしてあげる必要があるのです。
 
なので、スクリプトを叩けば、勝手にDHCPになるようにしています。
※スクリプトの判定としては、多少、大人げない強引なやり方ですが、
 これでもぶっちゃけ事足りるので、そういう設定にしています。
 
一応、スクリプトの現物を以下から取得できるようにしておきます。
スクリプトはこちら。

そのままクリックすると、別窓でテキストが開いてしまうので、
Windowsのばやいは、右クリックして、「名前を付けてリンク先を保存」でも選んでください。
※Winodws8.1の画面の場合は↑の通り。 その他のOSは多少表現が違うかもしれません。
 
ファイル名は、TXTになっていますので、
ファイル名末尾の「.txt」を外して、「.bat」で終わるようにしておいてください。
そうしないと、実行されません。
 
また、管理者権限で実行する必要があります。
実行は、Wクリックではなく 右クリックして「管理者として実行」を選ぶ必要があります。
 

※当然、設定値などなどが異なるため、
 実行時は、自己責任でよろちく! ねっ!!

ぶっちぇけ話。
本当は面倒なので、2ファイル構成にして
自宅用
職場用

としてました。
 
さすがに、面倒だし、実行させる方間違えてもなー。
と思ったので、判定文を入れて、自動化できるようにしました。
妻が、移動時にはシャットダウンとかログオフとかしてくれれば
スタートアップに入れておくことで、完全自動化
が図れますが
けっこうな高頻度でログインしっぱなしで移動するので、
その辺の処理は、考慮しないことにしました(´Д` )

 
そんでは ノシ!

ツイートツイート

1件のコメント

  1. いやっほ~ぅ!
    Netgearのアンマネージドスイッチいいよ~。タグVLANとかも使えるらしいよ!ポートマッピングモデキルヨ~。
    しかもお安いよ~。おひとついかが?(゜-゜)

    いや,単に省電力機能があってケーブル断線チェックできるから,玄関に設置されてる光終端装置から各部屋への10mケーブルのチェックに便利じゃね?というだけで買ったんですけどね。
    しかし,こんにゃろ – http://www.netgear.jp/products/details/GS108E.html – の設定ソフト(ブラウザから設定じゃないんですのよ?GUIなのに!)がAdobe Air使用らしく,WinPcapとセットでインストールされます(ぉ

  2. アイヴァーンさん
    コメントを華麗にスルーしてもうた。

    じつは、我が家にはNETGEARのGS748Tがあります。
    http://support.netgear.com/product/GS748Tv3
    ラックがあるので、48ポートの1Uモデルでも、平気で購入対象になりますw
     
    その上、ファンが爆音なので、静音ファン化してたりします。
    とにかくうるさいので、今はお荷物状態ですけどね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です