バッチファイルでクライアントPCのネットワーク設定を切り替える(Windows)
こんにちは。脱トノ(@DatsuTONOSAMA)です。
エンジニアらしくコードについて書きます。
導入
システムエンジニアではよくある話だと思うのですが、職場のPCで業務を行っている際、
- インターネット環境
- 開発環境
のネットワークが物理的に断絶していることがあります。
普段はインターネット環境でメールを書いたりGoogleで調べ物をしたりして、実際にコーディングしたりテストを実施したりする際にはLANケーブルを差し替えてプライベートなネットワークに切り替える必要があります。
セキュアな環境を保つ必要があるため必要なことだということはわかりますが、やはりセキュアさと利便性はトレードオフの関係にありますね。
※在るべき論で言えば、PC自体インターネット用と開発用とで分けろという話もありますが・・・
ということで作成したのが以下のバッチファイル。
@echo off set IFNAME="開発環境" set IPADDR=aaa.aaa.aaa.aaa set MASK=bbb.bbb.bbb.bbb set GW=ccc.ccc.ccc.ccc set DNS1=ddd.ddd.ddd.ddd set DNS2=eee.eee.eee.eee 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 set dnsservers name=%IFNAME% static %DNS2% index=2 validate=no ipconfig /all pause
それぞれ解説してみます。
1ブロック目:おまじない
@echo off
set
等のコマンドがプロンプト上に出てこないようにしてます。
2ブロック目:環境変数設定
set IFNAME="開発環境" set IPADDR=aaa.aaa.aaa.aaa set MASK=bbb.bbb.bbb.bbb set GW=ccc.ccc.ccc.ccc set DNS1=ddd.ddd.ddd.ddd set DNS2=eee.eee.eee.eee
ここは変数定義です。上から
- ネットワーク名
- IPアドレス
- サブネットマスク
- デフォルトゲートウェイ
- DNS(プライマリ)
- DNS(セカンダリ)
です。
ここの値を変えれば他の人に配布したり別のプロジェクトで使いまわしたりも可能。
3ブロック目:切り替えコマンド(メイン処理)
次に
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 set dnsservers name=%IFNAME% static %DNS2% index=2 validate=no
ですが、上から
- IPアドレス、サブネットマスク、デフォルトゲートウェイの設定
- プライマリDNSの設定
- セカンダリDNSの設定
となっています。コマンドの詳細については以下のサイトが詳しいです。 www.atmarkit.co.jp
netshコマンドは、Windows XP/Windows Server 2003以降のOSで利用できるネットワーク制御用のコマンドである。多くのサブコマンドがあるが、TCP/IP関連のパラメータは、interfaceコンテキストの中にある、ip(もしくはipv4)サブコンテキストで設定する。Windows Vista以降のOSではipコンテキストはipv4コンテキストと同じである。
netsh
というアプリケーションがあるみたいですね。その中のinterface ipv4
コンテキストの中でIPアドレスやら何やらを設定する、というコマンドになっています。
ちなみに、現在の設定値を確認するなら
netsh interface ip show config
をコマンドプロンプト上で入力します。
4ブロック目:確認
最後。
ipconfig /all pause
設定した内容の確認です。ipconfig /all
でネットワーク設定を表示してます。pause
は、バッチ実行した際に処理終了と同時にコマンドプロンプトのウィンドウが閉じてしまうことを防いでいます。
おまけ:DHCPを利用するなら
上記は固定IPへの変更でしたが、DHCP設定に戻すことももちろん可能です。その時は以下のようなバッチファイルを利用しています。
@echo off set IFNAME="インターネット環境" netsh interface ipv4 set address name=%IFNAME% source=dhcp netsh interface ipv4 set dnsservers name=%IFNAME% source=dhcp ipconfig /all pause