#はじめに
Windows環境で多数のIPv4アドレスを振る必要が出てきました。
IPv4アドレスを1個ずつ設定するのはとても面倒なので、自動化してやろうという魂胆です。
#やり方
pythonを使って…と思ったのですが、どうせWindowsでしか使えないですし、batファイルでもよさそうです。
今回はbatで作成します。
#書く前の整理
batファイルを書く前に何をさせるのか大まかに整理します。
###処理の内容
①IPv4アドレスを設定するコマンドをたたく
②①はループ処理の中で実行する
###注意事項
IPv4アドレスは32ビットですが、8ビットずつで合計4つに区切られます。
この区切りをオクテットと呼びます。
1オクテットの最大値は255ですので、桁上がりの時には注意が必要です。
#さっそく書いてみる
@echo off
rem 変数の指定
rem -------------------------------------------------------
rem IPアドレスを設定するインタフェース名の指定
set Ifname="ローカル エリア接続"
rem 繰り返しの最初の値となるIPアドレスの
rem 第1オクテットから第4オクテットまでを設定する
set Oct1=1
set Oct2=0
set Oct3=0
set Oct4=1
rem サブネットマスクの指定
set Subnet=255.255.0.0
rem デフォルトゲートウェイ
set DefGW=1.0.2.254
rem -------------------------------------------------------
rem ループ中で変数を使うための設定
setlocal enabledelayedexpansion
rem デフォルトゲートウェイを設定する
echo netsh interface ipv4 set address name=%Ifname% source=static gateway=%DefGW%
rem ループ処理①(第3オクテットをインクリメントする用)
for /l %%m in (1,1,2) do (
rem ループ処理②(第4オクテットをインクリメントする用)
for /l %%n in (1,1,255) do (
echo netsh interface ipv4 set add name=!Ifname! source=static addr=!Oct1!.!Oct2!.!Oct3!.!Oct4! mask=!Subnet!
rem netsh interface ipv4 set add name=!Ifname! source=static addr=!Oct1!.!Oct2!.!Oct3!.!Oct4! mask=!Subnet!
set /a Oct4 += 1
)
rem 第4オクテットが255に達したら、1に戻す。
set /a Oct4 = 1
rem 第3オクテットをインクリメントする。
set /a Oct3 +=1
)
rem 設定の終了
endlocal
pause
#テスト
実行してみますが、実際のIPアドレス割り当ては不要なのでechoのみ実行します。
上記であれば、1.0.0.1~1.0.1.255までアドレスが表示されるはずです。
無事想定範囲のIPアドレスが表示されました。
桁上げ箇所も問題なさそうです。
#終わりに
batファイルを作るのはあまり慣れていないですが、何とか動くものができました。
ホストアドレス数を増やすとループが多段になってしまい処理が重くなりそうなので、
処理速度が気になる場合はif文を使うほうが良いような気がしますね。