LoginSignup
1
2

More than 3 years have passed since last update.

Windowsでpingのレスポンスを時刻と共にCSV出力するバッチ

Last updated at Posted at 2021-01-30

はじめに

 な~んかネットワークが遅いなぁと感じる時ってありますよね。アクセスできない訳ではないけど、時間帯によって遅い、宛先によって遅い、経路の途中で遅延している気がする、といったようなスッキリしないケース。

 pingかけ続けて調査する手もありますが、遅延している時の時刻と紐づけができずイラっとします。

 会社環境はWindowsというケースも多いと思いますので、
  ・Windows環境で、
  ・複数の宛先IPに対して、
  ・指定した間隔でpingのレスポンス(Min、Max、Ave)を計測し、
  ・時刻と共にCSV形式で出力する。
というバッチ(.bat)を作りました。

バッチ

以下の変数を適当に変更して下さい。

 ・INTERVAL : ping実行間隔 [秒] : 60の倍数をお勧めします。
 ・MAXCOUNT : 繰り返し回数 [回]
 ・PINGCOUNT : ping実行時のパケット送信回数 [回](ping -n オプション)
 ・PINGCOUNT : pingのタイムアウト [ms](ping -w オプション)
 ・IPLIST : ping送信先IPアドレス一覧(スペース区切り)

また、pingのパケット送信回数と宛先IP数を掛けた値がping実行間隔より小さくなるよう調整して下さい。

 PINGCOUNT * IPLISTのIP数 < INTERVAL

ping送信1回あたりのレスポンスが最大1秒(PINGTIMEOUT=1000)と想定して1つの宛先IPあたり、PINGCOUNT回数分の時間を要すると仮定しています。

これがINTERVALの値を超えるとpingの実行間隔がINTERVALで指定した間隔より長くなります。

pingResToCsv.bat
@echo off

rem ###############################################################
rem 以下のパラメータを設定
rem ###############################################################
rem ※ INTERVALは60の倍数(1分単位)を設定。
rem ※ おおよその実行時間[秒] : INTERVAL * MAXCOUNT
rem ※ 「PINGCOUNT * IPLISTのIP数 < INTERVAL」となるよう調整。
rem ※ (ping送信1回あたりのレスポンスが1秒と想定。)
rem ###############################################################
rem INTERVAL : ping実行間隔 [秒]
set INTERVAL=60

rem MAXCOUNT : 繰り返し回数 [回]
set MAXCOUNT=5

rem PINGCOUNT : ping実行時のパケット送信回数 [回]
set PINGCOUNT=3

rem PINGCOUNT : pingのタイムアウト [ms]
set PINGTIMEOUT=1000

rem IPLIST : ping送信先IPアドレス一覧(スペース区切り)
rem 設定例 : IPLIST=192.0.2.1 198.51.100.1 203.0.113.1
set IPLIST=192.168.1.1 192.168.2.2 192.168.3.3
rem ###############################################################

rem 文字コード変更
chcp 437 > NUL

setlocal enabledelayedexpansion

echo date/time,IP,Min,Max,Ave

for /l %%g in (1, 1, %MAXCOUNT% ) do (

    for %%h in (%IPLIST%) do (

        for /f "usebackq tokens=3,6,9 delims= " %%i in (`ping -n %PINGCOUNT% -w %PINGTIMEOUT% %%h ^| find "Minimum"`) do (
            set MINRES=%%i
            set MAXRES=%%j
            set AVERES=%%k
            echo !date! !time:~,8!,%%h,!MINRES:ms,=,!!MAXRES:ms,=,!!AVERES:ms=!
        )

    )

    timeout /nobreak %INTERVAL% > nul
)

出力結果

そのまま実行すると標準出力に以下のように
 時刻, 宛先IP, Min[ms], Max[ms], Ave[ms]
のCSV形式で出力されますので、

C:\>pingResToCsv.bat
date/time,IP,Min,Max,Ave
2021/01/30 16:08:46,192.0.2.1,2,5,3
2021/01/30 16:08:51,198.51.100.1,2,11,5
2021/01/30 16:08:57,203.0.113.1,22,24,22
2021/01/30 16:09:47,192.0.2.1,2,3,2
2021/01/30 16:09:52,198.51.100.1,2,4,3
2021/01/30 16:09:59,203.0.113.1,24,28,26
  :

「pingResToCsv.bat > output.csv」のようにcsvファイルにリダイレクトし、それをExcelでグラフ化するといった使い方ができます。

参考

・【Windowsバッチ】コマンド実行結果を環境変数に代入する方法 - @RagWork
・ Windowsのバッチファイル中で日付をファイル名に使用する - @IT
・ 文字列を置換する方法 - バヤシタ
1
2
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
1
2