0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プロキシ環境を切り替えるバッチファイルとショートカット

Posted at

背景

 ちょっと特殊なんですが、

 社内で持ち運び使用するノートPC(Windows)があって、有線や無線などを建物や部屋ごとに切り替える必要があり、さらに建物や教室ごとに異なるプロキシがある。

 みたいな状況で働いてます。しかも一部は固定IPを使用する必要があったりします。
 なるべく楽したくて作ったバッチファイルを、バッチファイルの書き方の備忘録もかねてここに残しておきます。

 とりあえず完成版だけ見たいって人は最後の見出しまでスキップしてください。

netsh

 コマンドプロンプトからIPアドレスなどの設定を行うには netsh コマンドを利用します。netsh の後に interface をつければIP( v4 も v6 も)の設定ができるインターフェースコンテキストにスイッチします。

例: 現在のインターフェースの「Idx」、「メトリック」、「接続状態」、「名前」を確認
netsh interface ipv4 show interface

 次の文でIP周辺の設定を行うことができます。

例: インターフェース名が「イーサネット」の場合
netsh interface ipv4 set address name="イーサネット" source=static address=xxx.xxx.xxx.xxx mask=xxx.xxx.xxx.xxx gateway=xxx.xxx.xxx.xxx

 netsh 以降のそれぞれの簡単な説明は次の通り。

  • interface ipv4
    = IPv4に関するもろもろをやっていきます!
  • set address
    = アドレスの変更を行います。
  • name="イーサネット"
    = 変更の対象は"イーサネット"って名前のインターフェースです。(netsh interface ipv4 show interface で表示される名前と同じにする)
  • source=static
    = 静的にアドレスを設定します(動的にしたいなら source=dhcp
  • address=... mask=... gateway=...
    = IPアドレス、サブネットマスク、デフォルトゲートウェイはそれぞれコレです。

 DNSサーバの設定は次の文で行います。まぁほぼ一緒です。

netsh interface ipv4 set dns name="イーサネット" source=static address=xxx.xxx.xxx.xxx register=primary validate=no

 ちょっとややこしいとこだけ下で簡単に説明書いときます。

  • register=primary
    = PCのIPアドレスの変更に対応します。DDNSですね。静的IPで設定してるなら必須です。よくわからなければとりあえず primary を指定しておけば問題なし。(ドメインネットワークなら both 推奨)
  • validate=no
    設定するIPアドレスの妥当性チェックをしてくれます。通常は yes としますが、テスト環境では no にして不正な値に対する動作を確認したりしますね。

レジストリ(Registry)

 ユーザの個人設定やインストールされたソフト、さらにOSの動作設定やハードウェアの構成まで、あらゆる設定はレジストリに格納されています。GUIでいじる場合には レジストリエディタ というものを利用します。
 Linux に慣れてる人は GNOME の dconf-editor とかが近いかなって思います。

 レジストリエディタは Windowsキー + R で開くウィンドウに regedit と入力することで起動することができます。

image.png

 レジストリエディタでレジストリに対する操作を行うことができます。コマンドプロンプトでどの設定ファイルをいじってるのか気になる人はレジストリエディタで確認するのがいいかなって思います。

 今回は HKEY_CURRENT_USER の下にあるデータを変更します。HKEY_CURRENT_USER の下にあるのは、現在のログインユーザの設定ファイルたちです。その中でプロキシに関する設定ファイルは HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings にあります。

 コマンドプロンプトからレジストリを操作するには reg コマンドを使用します。

reg コマンド
reg [操作] [キーのパス] /v [キーの名前] [オプション]

 キーの値を操作するということで、[操作]の部分は単純なCRUDだけ知っておけば十分かなって気がします。

  • 値の取得 query
  • 値の削除 delete
  • 値の追加・削除 add

 一例くらい挙げておきます。

例:設定されているプロキシサーバのIPとポートを取得
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer

[実行結果↓]
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
    ProxyServer    REG_SZ    xxx.xxx.xxx.xxx:port

パスの HKEY_CURRENT_USERHKCU という略称でも行けます。てかふつうは略称使います。まぁ今回はわかりやすくフルネームで。

 さて、実際にプロキシのアドレスを設定するには次のように書きます。

プロキシのIPを指定
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d xxx.xxx.xxx.xxx:port

 /t オプションはデータの型を指定します。文字列であれば REG_SZ です。
 /d オプションで実際に入れたいデータを指定します。
 プロキシを有効化するには次のように入力します。

プロキシを有効化
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f

 REG_DWORD は 32bit の整数型を表します。/f は確認なしで強制実行させるオプションです。

完成版^^

switch_net.bat
@echo off
set /p choice=ネットワークを選択(^^(1:A教室(有線), 2:B(有線), 3:C(無線), 4:D(無線,dhcp)):

if %choice%==1 (
    rem A教室のネットワーク設定
	set IFNAME="イーサネット"
    set IPADDRESS=xxx.xxx.xxx.xxx
    set SUBNETMASK=xxx.xxx.xxx.xxx
    set DEFAULTGW=xxx.xxx.xxx.xxx
    set DNSIPADDR=xxx.xxx.xxx.xxx
    set PROXYURL=xxx.xxx.xxx.xxx:port
) else if %choice%==2 (
	rem B棟のネットワーク設定
	set IFNAME="イーサネット"
    set IPADDRESS=xxx.xxx.xxx.xxx
    set SUBNETMASK=xxx.xxx.xxx.xxx
    set DEFAULTGW=xxx.xxx.xxx.xxx
    set DNSIPADDR=xxx.xxx.xxx.xxx
    set PROXYURL=xxx.xxx.xxx.xxx:port
) else if %choice%==3 (
	rem C館のネットワーク設定
	set IFNAME="Wi-fi"
    set IPADDRESS=xxx.xxx.xxx.xxx
    set SUBNETMASK=xxx.xxx.xxx.xxx
    set DEFAULTGW=xxx.xxx.xxx.xxx
    set DNSIPADDR=xxx.xxx.xxx.xxx
    set PROXYURL=xxx.xxx.xxx.xxx:port
) else if %choice%==4 (
    rem D室のネットワーク設定(プロキシなし、dhcpの場合)
	reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
    goto end
)

netsh interface ipv4 set address name=%IFNAME% source=static address=%IPADDRESS% mask=%SUBNETMASK% gateway=%DEFAULTGW%
netsh interface ipv4 set dns name=%IFNAME% source=static address=%DNSIPADDR% register=primary validate=no
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d %PROXYURL%
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f

:end
echo ネットワーク設定完了!

pause

おまけ Windowsのショートカットの作成

 作成した switch_net.bat のショートカットを作成し、デスクトップに移動しておきます。
 ショートカットで右クリック → 【プロパティ】を選択します。
 開いたウィンドウ(詳細プロパティ)で【ショートカット】タブを選択し、【詳細設定】をクリックして「管理者として実行」にチェックをつけます。

image.png

 詳細プロパティ ウィンドウを【OK】をクリックして閉じ、次に「ショートカットキー」と書かれた枠で任意のコマンドを割り当てます(自分は競合少な目なので Ctrl + Alt + N としました)。

 これで今後はショートカットキーでサクッとネットワークの設定を行うことができますね

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?