SI業界で脱トノサマSE

上流SI企業のSEがトノサマ商売を脱却するために技術を学ぶためのブログ

バッチファイルでクライアント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  

ここは変数定義です。上から

です。
f:id:chika0321:20170617111220p:plainf:id:chika0321:20170617111225j:plain ここの値を変えれば他の人に配布したり別のプロジェクトで使いまわしたりも可能。

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  

ですが、上から

となっています。コマンドの詳細については以下のサイトが詳しいです。 www.atmarkit.co.jp

netshコマンドは、Windows XPWindows 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