これはなに?
windowsサーバでパケットキャプチャを取得するプログラムです。
採取時間、採取サイズ、対抗先IPアドレスを指定でき、自動でディレクトリを作成&データを格納してくれます。
ついでにetl2pcapng
を使ってwiresharkで読める形式にコンバートもしてくれます。(etl2pcapngは別途DL)
使い方
.batなので任意の場所に置いて実行してください。
私はタスクスケジューラに仕込んで使っています。
事前にetl2pcapng
を./tool
配下に設置してください。
etl2pcapngの公式
プログラム本体
packetcap.bat
@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
rem ********************************************
rem ファイル名:packetcap.bat
rem 目的 :Windowsサーバでパケットを採取する
rem ********************************************
rem ■カレントディレクトリ変更
set "CURRENT_DIR=%CD%"
cd /d %~dp0
rem ■現在時刻取得
set TIME2=%time: =0%
rem 例.)20201027_105710
set NOW_DATE=%date:~0,4%%date:~5,2%%date:~8,2%_%TIME2:~0,2%%TIME2:~3,2%%TIME2:~6,2%
rem ■パラメータ設定
rem --------------------------------------------
rem SIZE:採取するパケットの総サイズ(MB)
rem OUTPUT_DIR:採取したパケットの出力先
rem OUTPUT_FILENAME:出力ファイル名
rem DST_ADDR:対向先のIPアドレスを指定
rem EXEC_TIME:パケットの採取時間を指定(秒)
rem LOG_DIR:ログ出力ディレクトリ
rem LOG_NAME:ログファイル名
rem CONV_TOOL:wreshark用にコンバートするツールの格納先
rem --------------------------------------------
set SIZE=500
set OUTPUT_DIR=output\%NOW_DATE%\
set OUTPUT_FILENAME="%OUTPUT_DIR%%NOW_DATE%.etl"
set OUTPUT_CONVFILE="%OUTPUT_DIR%%NOW_DATE%.pcapng"
set DST_ADDR="xx.xx.xx.xx"
set EXEC_TIME=60
set LOG_DIR=log\
set LOG_NAME="%LOG_DIR%%NOW_DATE%.log"
set CONV_TOOL="tool\etl2pcapng\x86\etl2pcapng.exe"
rem ■出力先の確認
rem --------------------------------------------
rem [ディレクトリ構成]
rem バッチファイル本体.bat -> output -> 実行日時 -> .cab
rem .etl
rem .pcapng
rem -> log -> 実行日時.log
rem -> tool -> etl2pcapng
rem --------------------------------------------
rem パケット
if not exist %OUTPUT_DIR% (
mkdir %OUTPUT_DIR%
)
rem ログ
if not exist %LOG_DIR% (
mkdir %LOG_DIR%
)
echo %date% %time% info:バッチ起動 >> %LOG_NAME%
rem ■パケットキャプチャ処理
echo %date% %time% info:パケット採取開始 >> %LOG_NAME%
netsh trace start capture=yes maxsize=%SIZE% tracefile=%OUTPUT_FILENAME% IPv4.Address=%DST_ADDR% >> %LOG_NAME% 2>&1
if %errorlevel% == 0 (
rem 正常系の処理
) else (
rem 異常系の処理
echo %date% %time% error:パケット採取開始が失敗しました 戻り値:%errorlevel% >> %LOG_NAME%
endlocal
exit /b %errorlevel%
)
rem テスト用の処理
rem ping %DST_ADDR% > nul 2>&1
netsh trace show status >> %LOG_NAME% 2>&1
echo %date% %time% info:パケット採取時間は %EXEC_TIME% 秒です >> %LOG_NAME%
timeout /t %EXEC_TIME% > nul
echo %date% %time% info:パケット採取を終了します >> %LOG_NAME%
netsh trace stop >> %LOG_NAME% 2>&1
if %errorlevel% == 0 (
rem 正常系の処理
echo %date% %time% info:パケット採取終了 >> %LOG_NAME%
) else (
rem 異常系の処理
echo %date% %time% error:パケット採取終了に失敗しました 戻り値:%errorlevel% >> %LOG_NAME%
endlocal
exit /b %errorlevel%
)
rem ■コンバート処理
rem 出力ファイルが.etlのため、wiresharkで確認できる形式に変換する
echo %date% %time% info:コンバート開始 >> %LOG_NAME%
%CONV_TOOL% %OUTPUT_FILENAME% %OUTPUT_CONVFILE%
if %errorlevel% == 0 (
rem 正常系の処理
echo %date% %time% info:コンバート終了 >> %LOG_NAME%
) else (
rem 異常系の処理
echo %date% %time% error:コンバート処理に失敗しました 戻り値:%errorlevel% >> %LOG_NAME%
endlocal
exit /b %errorlevel%
)
rem ■終了処理
endlocal
exit /b 0
おわりに
powershell使うべきだったかしら。。