Skip to content

Instantly share code, notes, and snippets.

@metajiji
Last active April 10, 2022 05:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save metajiji/ec1da102151076c1c90ef577af2044ed to your computer and use it in GitHub Desktop.
Save metajiji/ec1da102151076c1c90ef577af2044ed to your computer and use it in GitHub Desktop.
@ECHO OFF
:: Значения по умолчанию :::::::::::::::::::::::::::
SET TCP_WINDOW=64k
SET TARGET_IP=127.0.0.1
SET TARGET_PROTO=tcp
::::::::::::::::::::::::::::::::::::::::::::::::::::
:: https://ritchielawrence.github.io/mtee/
:: https://iperf.fr/
SET "PATH=%PATH%;bin/iperf-2.0.4-win32;bin/mtee"
:: Включаем расширенную обработку команд.
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
:: Выставляем геометрию консоли
MODE CON COLS=80 LINES=30
CHCP 866>nul
:: Максимальный предпологаемый размер строки
SET $MAX_X=77
:main
@CLS
TITLE Iperf CLI interface by METAJIJI
COLOR 1B
SET "$item1= I 1 - Запустить клиент iperf."
SET "$item2= I 2 - Запустить сервер iperf."
SET "$item3= I 0 - Выйти."
ECHO. ==============================================================================
ECHO. I I
ECHO. I Вас приветствует мастер запуска iperf I
ECHO. I____________________________________________________________________________I
ECHO. I I
CALL :SPACES "%$item1%" "%$MAX_X%" && ECHO.%$item1%!$SPACES!I
CALL :SPACES "%$item2%" "%$MAX_X%" && ECHO.%$item2%!$SPACES!I
CALL :SPACES "%$item3%" "%$MAX_X%" && ECHO.%$item3%!$SPACES!I
ECHO. I __________________________________________________________________________ I
SET mainprompt=x && SET /p "mainprompt= Выберите пункт меню: "
IF /i %mainprompt%==1 CALL :CLIENT
IF /i %mainprompt%==c CALL :CLIENT
IF /i %mainprompt%==2 CALL :SERVER
IF /i %mainprompt%==s CALL :SERVER
IF /i %mainprompt%==0 EXIT
IF /i %mainprompt%==q EXIT
:: Проверяем что ввел пользователь
CALL :input_error
GOTO main
:CLIENT
@CLS
TITLE Iperf CLIENT CLI interface by METAJIJI
COLOR 1B
SET "$item1= I 1 - Изменить window size [KM] (socket buffer size): [%TCP_WINDOW%]"
SET "$item2= I 2 - Изменить адрес сервера: [%TARGET_IP%]"
SET "$item3= I 3 - Изменить протокол: [%TARGET_PROTO%]"
SET "$item8= I 8 - Вернуться в главное меню."
SET "$item9= I 9 - Запустить."
SET "$item0= I 0 - Выйти."
ECHO. ==============================================================================
ECHO. I I
ECHO. I Вас приветствует мастер запуска iperf CLIENT I
ECHO. I____________________________________________________________________________I
ECHO. I I
CALL :SPACES "%$item1%" "%$MAX_X%" && ECHO.%$item1%!$SPACES!I
CALL :SPACES "%$item2%" "%$MAX_X%" && ECHO.%$item2%!$SPACES!I
CALL :SPACES "%$item3%" "%$MAX_X%" && ECHO.%$item3%!$SPACES!I
CALL :SPACES "%$item8%" "%$MAX_X%" && ECHO.%$item8%!$SPACES!I
CALL :SPACES "%$item9%" "%$MAX_X%" && ECHO.%$item9%!$SPACES!I
CALL :SPACES "%$item0%" "%$MAX_X%" && ECHO.%$item0%!$SPACES!I
ECHO. I __________________________________________________________________________ I
SET mainprompt=x && SET /p "mainprompt= Выберите пункт меню: "
IF /i %mainprompt%==1 CALL :SET_TCP_WINDOW & GOTO :CLIENT
IF /i %mainprompt%==2 CALL :SET_TARGET_IP & GOTO :CLIENT
IF /i %mainprompt%==3 CALL :SET_TARGET_PROTO & GOTO :CLIENT
IF /i %mainprompt%==8 CALL :main
IF /i %mainprompt%==b CALL :main
IF /i %mainprompt%==9 CALL :START_CLIENT
IF /i %mainprompt%==0 EXIT
IF /i %mainprompt%==q EXIT
:: Проверяем что ввел пользователь
CALL :input_error
GOTO CLIENT
:SERVER
@CLS
TITLE Iperf SERVER CLI interface by METAJIJI
COLOR 1B
SET "$item1= I 1 - Изменить TCP window size [KM] (socket buffer size): [%TCP_WINDOW%]"
SET "$item2= I 2 - Изменить протокол: [%TARGET_PROTO%]"
SET "$item8= I 8 - Вернуться в главное меню."
SET "$item9= I 9 - Запустить."
SET "$item0= I 0 - Выйти."
ECHO. ==============================================================================
ECHO. I I
ECHO. I Вас приветствует мастер запуска iperf SERVER I
ECHO. I____________________________________________________________________________I
ECHO. I I
CALL :SPACES "%$item1%" "%$MAX_X%" && ECHO.%$item1%!$SPACES!I
CALL :SPACES "%$item2%" "%$MAX_X%" && ECHO.%$item2%!$SPACES!I
CALL :SPACES "%$item8%" "%$MAX_X%" && ECHO.%$item8%!$SPACES!I
CALL :SPACES "%$item9%" "%$MAX_X%" && ECHO.%$item9%!$SPACES!I
CALL :SPACES "%$item0%" "%$MAX_X%" && ECHO.%$item0%!$SPACES!I
ECHO. I __________________________________________________________________________ I
SET mainprompt=x && SET /p "mainprompt= Выберите пункт меню: "
IF /i %mainprompt%==1 CALL :SET_TCP_WINDOW & GOTO :SERVER
IF /i %mainprompt%==2 CALL :SET_TARGET_PROTO & GOTO :SERVER
IF /i %mainprompt%==8 CALL :main
IF /i %mainprompt%==b CALL :main
IF /i %mainprompt%==9 CALL :START_SERVER
IF /i %mainprompt%==0 EXIT
IF /i %mainprompt%==q EXIT
:: Проверяем что ввел пользователь
CALL :input_error
GOTO SERVER
:START_SERVER
@CLS
ECHO.^=^>^>^> Для остановки сервера нажмите Ctrl+c ^<^<^<^=
ECHO.- Сервер iperf запущен^^! | mtee /D/T/+ Server.log
iperf --server %TARGET_PROTO_VAR% --window %TCP_WINDOW% 2>&1 | mtee /+ Server.log
PAUSE
GOTO SERVER
:START_CLIENT
@CLS
ECHO.- Клиент iperf запущен^^! | mtee /D/T/+ Client.log
iperf --client %TARGET_PROTO_VAR% --window %TCP_WINDOW% -c %TARGET_IP% 2>&1 | mtee /+ Client.log
PAUSE
GOTO CLIENT
:: Функция вывода ошибки о неверном вводе с клавиатуры
:input_error
@CLS
ECHO.
ECHO. ...............................................
ECHO. : ^=^>^>^> Ошибка ввода, попробуйте еще раз^^! ^<^<^<^= :
ECHO. : Для продолжения нажмите любую клавишу... :
ECHO. :.............................................:
PAUSE >nul
GOTO :EOF
:SET_TARGET_IP
CALL :_INPUT_KEYB
SET "TARGET_IP=%keyb_value%"
GOTO :EOF
:SET_TARGET_PROTO
IF %TARGET_PROTO%==tcp (
ECHO.change to udp from tcp
SET "TARGET_PROTO_VAR=--udp "
SET TARGET_PROTO=udp
) ELSE IF %TARGET_PROTO%==udp (
ECHO.change to tcp from udp
SET "TARGET_PROTO_VAR="
SET TARGET_PROTO=tcp
) ELSE (
ECHO.ERROR: TARGET_PROTO is error value!
PAUSE
EXIT 1
)
::TODO - выдавать ошибку, если значение небыло равно ни udp ни tcp.
GOTO :EOF
:SET_TCP_WINDOW
CALL :_INPUT_KEYB
SET "TCP_WINDOW=%keyb_value%"
GOTO :EOF
:_INPUT_KEYB
SET keyb_value=
SET /P keyb_value=" Введите значение: "
::TODO проверять, что ввел пользователь, но позаботиться о том, чтобы пользователь видел, какое было предыдущее значение.
::CALL :input_error
GOTO :EOF
:: Вычисляем количество пробелов, недостающих для выравнивания строки
:SPACES
::CALL :SPACES <file> <%$MAX_X%>
ECHO %~1>%temp%\sz.tmp
FOR %%a IN (%temp%\sz.tmp) DO SET "$STR_SIZE=%%~za"
DEL /Q %temp%\sz.tmp 2>nul
SET /A "$STR_SIZE=$STR_SIZE-2"
SET "$SPACES="
FOR /L %%a IN (!$STR_SIZE!,1,%~2) DO SET "$SPACES=!$SPACES! "
GOTO :EOF
PAUSE
:: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
:: METAJIJI (c) 2013
:: Обратная связь:
:: WEB: https://github.com/metajiji
:: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment