Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] скрипт определения скорости соеденения интернета

Ответить
Настройки темы
Любой язык - [решено] скрипт определения скорости соеденения интернета

Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


вообщем задача такая: нужен скрипт который сможет узнать ип впн соеденения скорость на текущий момент и количество исходящего трафика.

Отправлено: 15:31, 03-12-2011

 

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Ага, понятно, я немного не то решение подсказал. Тогда для определения IP и правда, лучше воспользоваться ipconfig, как подсказал товарищ Diskretor, а вот скорость и количество трафика - подсчитывается вот так
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
:: Добавляем директорию с бинарниками в path
Echo %Path%|Find "%CD%\bin">nul||Set Path=%Path%;%CD%\bin
:: Устанавливаем интервал обновления, в секундах
Set Refresh=5

:: Получаем IP (первый, из подходящей сети)
For /F "tokens=2 delims=:" %%I In ('IPConfig /All^|Find " 10.22"') Do (Set IP=%%~I&GoTo NetStatLoop)
Set OldIn=0&Set OldOut=0
:NetStatLoop
For /F "tokens=2,3 skip=3" %%A In ('netstat -e') Do (
Set In=%%A
Set Out=%%B
GoTo Break
)
:Break
:: Получаем статистику скачанного и переданного
For /F "tokens=1" %%A In ('gnucalc %In%/1024/1024') Do (
	:: Урезаем дробную часть
	For /F "tokens=1,2 delims=." %%B In ("%%A") Do (
		Set tmpString=%%C
		Set tmpString=!tmpString:~,2!
		Set TotalDownloadMB=%%B.!tmpString!
	)
)
For /F "tokens=1" %%A In ('gnucalc %Out%/1024/1024') Do (
	:: Урезаем дробную часть
	For /F "tokens=1,2 delims=." %%B In ("%%A") Do (
		Set tmpString=%%C
		Set tmpString=!tmpString:~,2!
		Set TotalUploadMB=%%B.!tmpString!
	)
)
:: Рассчитываем скорость
For /F "tokens=1" %%A In ('gnucalc ^(%In%/1024-%OldIn%/1024^)/%Refresh%') Do (
	:: Урезаем дробную часть
	For /F "tokens=1,2 delims=." %%B In ("%%A") Do (
		Set tmpString=%%C
		Set tmpString=!tmpString:~,2!
		Set DownloadSpeed=%%B.!tmpString!
	)
)
For /F "tokens=1" %%A In ('gnucalc ^(%Out%/1024-%OldOut%/1024^)/%Refresh%') Do (
	:: Урезаем дробную часть
	For /F "tokens=1,2 delims=." %%B In ("%%A") Do (
		Set tmpString=%%C
		Set tmpString=!tmpString:~,2!
		Set UploadSpeed=%%B.!tmpString!
	)
)
Set OldIn=%In%&Set OldOut=%Out%
Cls
:: Выводим статистику
Echo IP             : %IP%
Echo.
Echo Total download : %TotalDownloadMB% MB
Echo Total upload   : %TotalUploadMB% MB
Echo.
Echo Download speed : %DownloadSpeed% Kb\s
Echo Upload speed   : %UploadSpeed% Kb\s
Ping -n %Refresh% 127.0.0.1>nul
GoTo NetStatLoop
В скрипте используется калькулятор из пакета gnuwin32, чтобы обойти ограничения встроенного. Он переименован из calc.exe в gnucalc.exe, чтобы вместо него не вызывался стандартный виндовый калькулятор. Сам .exe калькулятора и две нужные для работы библиотеки должны лежать в директории bin рядом со скриптом. Вот, я залил их на обменник: http://rghost.ru/35638212
Таймаут между обновлениями выполнен на ping, чтобы не тянуть сторонние утилиты вроде nircmd

Последний раз редактировалось Anonymоus, 28-12-2011 в 03:03.

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:57, 28-12-2011 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


то что нужно. скажите а есть какая нить команда для перехода батником по урлу без вывода страницы?
да ребят спасибо огромное выручили) и подкинули знаний)

Отправлено: 03:09, 28-12-2011 | #12


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Цитата moobi:
какая нить команда для перехода батником по урлу без вывода страницы? »
Уже ответил в личку, но пусть и тут будет, может кому пригодится:
Код: Выделить весь код
Start "" "http://google.com"
Открывается в браузере по умолчанию.
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:11, 28-12-2011 | #13


Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Anonymоus:
Start "" "http://google.com" »
в том то и дело что открывать арбузер ненужно) я так думаю вгет заюзать о чета у мну не вышло вот код нарыл но тут блин нужно вставлять урл а надо чтобы с того скрипта с скоростью и трафом вбивало их как переменные в зараннее приготовленный урл и запускало типа этого скрипта)
p.s вот код @Echo Off
Rem Устанавливает промежуток между запросами, в минутах
Set Timeout=10
Rem Устанавливаем количество запросов, после которого скрипт прекратит работу
Rem Если установить в 0, скрипт будет работать до закрытия его окна вручную
Set Counter=0
Color 70
Echo.
Echo.
Echo Enter URL:
Echo.
Set /P Url=^>
Set /A i=0
Set /A Wait=Timeout*10*10
:GetUrl
Cls
.\bin\wget --retry-connrefused --random-wait -nd -P tmp -U "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.63" --keep-session-cookies -p %Url%
Echo.
Echo Страница была запрошена: %i% раз
.\bin\nircmdc wait %Wait%
Set /A i=i+1
If %i%==%Counter% Cls&Echo.&Echo Работа скрипта завершена&Pause&Exit
GoTo GetUrl

Отправлено: 03:16, 28-12-2011 | #14


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Покажи пример запроса, как он должен выглядеть? Я так понимаю, http://site.com/script.pl?task=somet...UF4bvuiGHDBj1S - что-то вроде этого?

UPD: Финальный, подправленный вариант скрипта - улучшен разбор значений скорости, добавлен подсчет среднего значения скорости, убран лишний пробел в IP. Добавлен запрос через wget, естественно, вместо реального url'a - пример.
Код: Выделить весь код
@Echo Off
:: Anonymous, 2011
Color 1F
Mode CON Cols=35 Lines=9
Title LanStat
SetLocal EnableDelayedExpansion
:: Добавляем директорию с бинарниками в path
Echo %Path%|Find "%CD%\bin">nul||Set Path=%Path%;%CD%\bin
:: Интервал обновления статистики, в секундах
Set Refresh=1
:: Маска IP адреса (например, 192.168)
Set IPMask=10.54

:: Получаем IP (только один раз, при запуске)
IPConfig /All|Find " %IPMask%"|Find "IP">nul
If %ErrorLevel%==0 (
	For /F "tokens=2 delims=:" %%A In ('IPConfig /All^|Find " %IPMask%"^|Find "IP"') Do (Set IP=%%A)
	If "!IP:~,1!"==" " Set IP=!IP:~1!
) Else (
	Set IP=NOT FOUND
)

:NetStatLoop
:Break1
For /F "tokens=2,3 skip=3" %%A In ('netstat -e') Do (
Set In=%%A
Set Out=%%B
GoTo Break2
)
:Break2
Echo %IP%|Find "%IPMask%">nul||Set IP=OFFLINE
:: Получаем статистику скачанного и переданного
For /F "tokens=1" %%A In ('gnucalc %In%/1024/1024') Do (
	Call :Cut "%%A" "TotalDownloadMB"
)
For /F "tokens=1" %%A In ('gnucalc %Out%/1024/1024') Do (
	Call :Cut "%%A" "TotalUploadMB"
)

:: Рассчитываем скорость
For /F "tokens=1" %%A In ('gnucalc ^(%In%/1024-%OldIn%/1024^)/%Refresh%') Do (
	Call :Cut "%%A" "DownloadSpeed"
)
If %DownloadSpeed%==0.11 Set DownloadSpeed=0.0
For /F "tokens=1" %%A In ('gnucalc ^(%Out%/1024-%OldOut%/1024^)/%Refresh%') Do (
	Call :Cut "%%A" "UploadSpeed"
)
If %UploadSpeed%==0.11 Set UploadSpeed=0.0

:: Рассчитываем среднюю скорость
Set AverageDownSpeed=!DownloadSpeed!:%AverageDownSpeed%
For /F "tokens=1,2,3,4,5,6,7,8,9,10 delims=:" %%A In ("%AverageDownSpeed%") Do (
	For /F "tokens=1" %%L In ('gnucalc ^(%%A+%%B+%%C+%%D+%%E+%%F+%%G+%%H+%%I+%%J^)/10 2^>nul') Do (
		Call :Cut "%%L" "AvgDownload"
	)
	Set AverageDownSpeed=%%A:%%B:%%C:%%D:%%E:%%F:%%G:%%H:%%I:%%J
	If "!AvgDownload!"=="" Set AvgDownload=Calculating...
	If Not !AvgDownload!==Calculating... Set AvgDownload=!AvgDownload! Kb\s
)
Set AverageUpSpeed=!UploadSpeed!:%AverageUpSpeed%
For /F "tokens=1,2,3,4,5,6,7,8,9,10 delims=:" %%A In ("%AverageUpSpeed%") Do (
	For /F "tokens=1" %%L In ('gnucalc ^(%%A+%%B+%%C+%%D+%%E+%%F+%%G+%%H+%%I+%%J^)/10 2^>nul') Do (
		Call :Cut "%%L" "AvgUpload"
	)
	Set AverageUpSpeed=%%A:%%B:%%C:%%D:%%E:%%F:%%G:%%H:%%I:%%J
	If "!AvgUpload!"=="" Set AvgUpload=Calculating...
	If Not !AvgUpload!==Calculating... Set AvgUpload=!AvgUpload! Kb\s
)

Set OldIn=%In%&Set OldOut=%Out%
Cls
:: Выводим статистику
Echo IP               : %IP%
Echo Total download   : %TotalDownloadMB% Mb
Echo Total upload     : %TotalUploadMB% Mb
Echo.
Echo Download speed   : %DownloadSpeed% Kb\s
Echo Upload speed     : %UploadSpeed% Kb\s
Echo Average download : %AvgDownload%
Echo Average upload   : %AvgUpload%

:: Отсылаем данные
:: wget --retry-connrefused -O post.txt --keep-session-cookies -U "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2" "http://site.ru/&ip=%IP%&speed=%UploadSpeed%¶m=value" 2>nul&Del post.txt

:Задержка между циклами
Ping -n %Refresh% 127.0.0.1>nul
GoTo NetStatLoop

:Cut
:: Урезаем дробную часть
For /F "tokens=1,2 delims=." %%A In ("%~1") Do (
	Set tmpA=%%A
	If "!tmpA:~,1!"=="~" Set tmpA=!tmpA:~1!
	If "!tmpA:~,1!"=="-" Set tmpA=!tmpA:~1!
	Set tmpB=%%B
	If "!tmpB:~,1!"=="~" Set tmpB=!tmpB:~1!
	If "!tmpB:~,1!"=="-" Set tmpB=!tmpB:~1!
	If "!tmpB!"=="" Set tmpB=0
	Set tmpB=!tmpB:~,2!
	Set %~2=!tmpA!.!tmpB!
)
Exit /B

Последний раз редактировалось Anonymоus, 18-10-2013 в 11:12.

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:22, 28-12-2011 | #15


Аватара для serraxer

Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


как же долго искал, то что нужно.
Anonymоus можете подсказать, как правильно добавить
netsh interface set interface local disabled
netsh interface set interface local enabled
чтобы при скорости меньше 50 кбит сек сеть перезапускалась, а мониторинг продолжается.

Отправлено: 05:07, 29-12-2011 | #16


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Obsidian-step, я так понял, вам нужно замерять не текущую скорость соединения, как это сделано в посте #15, а приблизительную максимальную в один поток, так ведь? Иначе, при простое, когда соединение будет нагружено меньше 50кб\с, оно будет постоянно перезапускаться.

Вот, написал кое-что. Для работы требует wget, все тот же calc.exe из набора утилит gnuwin32 (переименованый в gnucalc.exe) и nircmd. Все должно лежать в директории bin рядом со скриптом.
Скачать требуемые файлы с RGhost

Требования к файлу для проверки скорости: должен располагаться на быстром сервере (чтобы измерение не упиралось в максимальную скорость отдачи на 1 поток самого сервера), должен быть размером не менее 1 мб (а желательно - от 2 до 10) для обеспечения приемлемой точности.

Код: Выделить весь код
@Echo Off
:: Добавляем директорию с бинарниками в path
Echo %Path%|Find "%CD%\bin">nul||Set Path=%Path%;%CD%\bin
:: Период обновления, в минутах
Set Refresh=2
:: Устанавливаем файл для проверки (2-10 мб, на быстром хосте)
Set SpeedTestFile=http://support.satgate.net/dl_test/dl/5MB.bin
:: Нижний порог скорости, при опускании ниже этого предела - реконнект сети. (В кб\с)
Set MinSpeed=50

Call :ParseTimestamp %time:~-0,8%
Call :SerializeTime
Set StartedAt=%ErrorLevel%
Set Timestamp=%date% %time:~-0,8%
Set /A Refresh=Refresh*60*1000
:Loop
:: Замеряем время
Call :ParseTimestamp %time:~-0,8%
Call :SerializeTime
Set StartDL=%ErrorLevel%

:: Получаем файл
wget %SpeedTestFile% -O "%Temp%\speedtest.dat" 1>&2 2>nul||(Call :Reconnect&GoTo Loop)

:: Получаем его размер (получение размера напрямую, через переменную - не работает)
For /F "tokens=*" %%A In ('Dir "%Temp%\speedtest.dat" /A-D^|Find "speedtest.dat"') Do (
	For /F "tokens=3" %%S In ("%%A") Do (Set TestFileSize=%%S)
	rem Del %Temp%\speedtest.dat
)
:: Вырезаем псевдопробелы
Set TestFileSize=%TestFileSize:я=%

:: Получаем затраченное на скачивание время
Call :Timer %StartDL%
Set DLTime=%ErrorLevel%

:: Рассчитываем скорость
SetLocal EnableDelayedExpansion
For /F "tokens=*" %%A In ('gnucalc ^(%TestFileSize%/1024^)/%DLTime%') Do (
	For /F "tokens=1,2 delims=." %%A In ("%%A") Do (
		Set tmpA=%%A
		If "!tmpA:~,1!"=="~" Set tmpA=!tmpA:~1!
		If "!tmpA:~,1!"=="-" Set tmpA=!tmpA:~1!
		Set tmpB=%%B
		If "!tmpB:~,1!"=="~" Set tmpB=!tmpB:~1!
		If "!tmpB:~,1!"=="-" Set tmpB=!tmpB:~1!
		If "!tmpB!"=="" Set tmpB=0
		Set tmpB=!tmpB:~,2!
		Set DisplayedSpeedKBs=!tmpA!.!tmpB!
		If !tmpB! GEQ 50 Set /A tmpA+=1
		Set SpeedKBs=!tmpA!
	)
)

:: Проверяем, не слишком ли низкая скорость
If %SpeedKBs% LSS %MinSpeed% (Call :Reconnect&GoTo Loop)

:: Выводим состояние
Call :Timer %StartedAt%
Call :DeserializeTime %ErrorLevel%
Cls
Title Download speeed: %DisplayedSpeedKBs% Kb\s
Echo   Started at       : %Timestamp%
Echo   Elapsed time     : %ED% days, %DHH%:%DMM%:%DSS%
Echo   Connection speed : %DisplayedSpeedKBs% Kb\s
NircmdC wait %Refresh%
GoTo Loop

:: Перезапуск сети
:Reconnect
netsh interface set interface local disabled
netsh interface set interface local enabled
Exit /B

::===Функции работы со временем в .bat====================================
:: libTime.cmd, Anonymous, 2010
:ParseTimestamp
:: Разбирает на составляющие временную метку формата ЧЧ:ММ:СС
:: Формат:   Call :ParseTimestamp (время)
:: Вывод - в переменные HH MM и SS
For /F "tokens=1,2,3 delims=:" %%A In ("%1") Do (
Set HH=%%A
Set MM=%%B
Set SS=%%C
)

:SerializeTime
:: Сериализует время из переменных HH MM и SS
:: Вывод - в ErrorLevel
Set /A STime=(HH*60*60)+(MM*60)+SS
Exit /B %STime%

:DeserializeTime
:: Десериализует время, приводит его к стандартному формату
:: Формат:   Call :DeserializeTime (сериализованное время)
:: Вывод - в переменные DHH DMM и DSS
Set /A DHH=%1/60/60
Set /A DMM=(%1/60)-(DHH*60)
Set /A DSS=%1-(DHH*60*60)-(DMM*60)
If %DHH%==24 Set DHH=00
If %DHH% LSS 10 Set DHH=0%DHH%
If %DMM% LSS 10 Set DMM=0%DMM%
If %DSS% LSS 10 Set DSS=0%DSS%
Exit /B

:TMinus
:: Функция вычитания для сериализованного времени
:: Формат:   Call :TMinus (сериализованное время) (сколько секунд отнять)
:: Вывод - в ErrorLevel
Set /A Result=%1-%2
If %2 GTR %1 (
Set /A Result=86400+%1-%2
)
Exit /B %Result%

:TPlus
:: Функция прибавления для сериализованного времени
:: Формат:   Call :TPlus (сериализованное время) (сколько секунд прибавить)
:: Вывод - в ErrorLevel
Set /A Result=%1+%2
If %Result% GTR 86400 (
Set /A Result=%1+%2-86400
)
Exit /B %Result%

:Timer
:: Отсчитывает прошедшее с заданного момента время
:: Формат:   Call :Timer (запомненное сериализованное время)
:: Вывод - в ErrorLevel
:: Если счетчик переходит границу суток, число дней возрастает на 1
:: Дни выводятся в переменную ED (и накапливаются) // да, знаю, что костыль и быдлокод
Set OTime=%1
If "%ED%"=="" Set ED=0
Call :ParseTimestamp %time:~-0,8%
Call :SerializeTime
Set CTime=%ErrorLevel%
If %OTime% GTR %CTime% (
Set /A Timer=86400-%OTime%+%CTime%
Set /A ED+=1
) Else (
Set /A Timer=CTime-OTime
)
Exit /B %Timer%

:Timer2
:: Проверяет, прошел ли заданный промежуток времени
:: Формат:   Call :Timer2 (запомненное сериализованное время) (промежуток в секундах)
:: Вывод - в ErrorLevel (только 0=промежуток истёк или 1=промежуток ещё не истёк)
Call :ParseTimestamp %time:~-0,8%
Call :SerializeTime
Call :TMinus %ErrorLevel% %1
If %2 GTR %ErrorLevel% Exit /B 1
Exit /B 0
::========================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:11, 29-12-2011 | #17


Аватара для serraxer

Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Anonymоus нет нет, как раз наоборот, больше всего даже подходит пример из пост #11, при простое задача будет сниматься. скрипт нужен для поддержания нагрузки на модеме.


Запускается мониторинг трафика

ждём 5 сек для накопления статистики

:: Проверяем, не слишком ли низкая скорость, если да то
:: Перезапуск сети

продолжаем мониторинг.
добавил вот эти строки работает, но появилась проблема скрипт через некоторое время если отключить сеть завершает свою работу. как правильно зациклить?
Спойлер

Код: Выделить весь код
:: Проверяем, не слишком ли низкая скорость
If %DownloadSpeed% LSS %MinSpeed% (Call :Reconnect&GoTo NetStatLoop)


GoTo NetStatLoop

:: Перезапуск сети
:Reconnect
netsh interface set interface "mts rus" disabled
netsh interface set interface "mts rus" enabled
GoTo NetStatLoop

Последний раз редактировалось serraxer, 30-12-2011 в 18:39. Причина: уточнение.


Отправлено: 17:56, 30-12-2011 | #18


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Obsidian-step, сделал нужный вам вариант, минимальная скорость задается в начале, возле частоты обновления. Заодно подправил вывод средней скорости, теперь отсчет идет именно по ней. Для ее рассчета нужна задержка длинной "частота обновления*10". Из зависимостей - все тот же gnucalc.exe. Специально протестировал в течении пары часов при отключенной сети, скрипт не падает.


Код: Выделить весь код
@Echo Off
:: Anonymous, 2011
SetLocal EnableDelayedExpansion
Mode CON Cols=35 Lines=10
Title LanStat
Color 1F
:: Добавляем директорию с бинарниками в path
Echo %Path%|Find "%CD%\bin">nul||Set Path=%Path%;%CD%\bin

:: Интервал обновления статистики, в секундах
Set Refresh=2
:: Маска IP адреса (например, 192.168)
Set IPMask=10.54
:: Минимальная скорость, в Кб\с
Set MinSpeed=20

Set i=0
:: Получаем IP (только один раз, при запуске)
IPConfig /All|Find " %IPMask%"|Find "IP">nul
If %ErrorLevel%==0 (
	For /F "tokens=2 delims=:" %%A In ('IPConfig /All^|Find " %IPMask%"^|Find "IP"') Do (Set IP=%%A)
	If "!IP:~,1!"==" " Set IP=!IP:~1!
) Else (
	Set IP=NOT FOUND
)

:NetStatLoop
For /F "tokens=2,3 skip=3" %%A In ('netstat -e') Do (
Set In=%%A
Set Out=%%B
GoTo Break2
)
:Break2
:: Получаем статистику скачанного и переданного
For /F "tokens=1" %%A In ('gnucalc %In%/1024/1024') Do (
	Call :Cut "%%A" "TotalDownloadMB"
)
For /F "tokens=1" %%A In ('gnucalc %Out%/1024/1024') Do (
	Call :Cut "%%A" "TotalUploadMB"
)

:: Рассчитываем скорость
For /F "tokens=1" %%A In ('gnucalc ^(%In%/1024-%OldIn%/1024^)/%Refresh%') Do (
	Call :Cut "%%A" "DownloadSpeed"
)
If %DownloadSpeed%==0.11 Set DownloadSpeed=0.0
For /F "tokens=1" %%A In ('gnucalc ^(%Out%/1024-%OldOut%/1024^)/%Refresh%') Do (
	Call :Cut "%%A" "UploadSpeed"
)
If %UploadSpeed%==0.11 Set UploadSpeed=0.0

:: Рассчитываем среднюю скорость
If Not %i% GTR 10 (Set /A i+=1)
Set AverageDownSpeed=!DownloadSpeed!:%AverageDownSpeed%
For /F "tokens=1,2,3,4,5,6,7,8,9,10 delims=:" %%A In ("%AverageDownSpeed%") Do (
	For /F "tokens=1" %%L In ('gnucalc ^(%%A+%%B+%%C+%%D+%%E+%%F+%%G+%%H+%%I+%%J^)/10 2^>nul') Do (
		Call :Cut "%%L" "AvgDownload"
	)
	Set AverageDownSpeed=%%A:%%B:%%C:%%D:%%E:%%F:%%G:%%H:%%I:%%J
	If Not %i% GTR 10 (Set AvgDownload=N\A)
)
Set AverageUpSpeed=!UploadSpeed!:%AverageUpSpeed%
For /F "tokens=1,2,3,4,5,6,7,8,9,10 delims=:" %%A In ("%AverageUpSpeed%") Do (
	For /F "tokens=1" %%L In ('gnucalc ^(%%A+%%B+%%C+%%D+%%E+%%F+%%G+%%H+%%I+%%J^)/10 2^>nul') Do (
		Call :Cut "%%L" "AvgUpload"
	)
	Set AverageUpSpeed=%%A:%%B:%%C:%%D:%%E:%%F:%%G:%%H:%%I:%%J
	If Not %i% GTR 10 (Set AvgUpload=N\A)
)

Set OldIn=%In%&Set OldOut=%Out%
Cls
:: Выводим статистику
Echo.
Echo  IP               : %IP%
Echo  Total download   : %TotalDownloadMB% Mb
Echo  Total upload     : %TotalUploadMB% Mb
Echo.
Echo  Download speed   : %DownloadSpeed% Kb\s
Echo  Upload speed     : %UploadSpeed% Kb\s
Echo  Average download : %AvgDownload% Kb\s
Echo  Average upload   : %AvgUpload% Kb\s

:: Задержка между циклами
Ping -n %Refresh% 127.0.0.1>nul

:: Проверка скорости
If %i% GTR 10 (
	For /F "tokens=1,2 delims=." %%A In ("%AvgDownload%") Do (
		Set ConnectionSpeed=%%A
		If %%B GEQ 50 Set /A ConnectionSpeed+=1
		:: Если ниже заданного порога, делаем реконнект
		If %MinSpeed% GTR !ConnectionSpeed! (
			netsh interface set interface "mts rus" disabled
			netsh interface set interface "mts rus" enabled
		)
	)
)


GoTo NetStatLoop

:Cut
:: Урезаем дробную часть
For /F "tokens=1,2 delims=." %%A In ("%~1") Do (
	Set tmpA=%%A
	If "!tmpA:~,1!"=="~" Set tmpA=!tmpA:~1!
	If "!tmpA:~,1!"=="-" Set tmpA=!tmpA:~1!
	Set tmpB=%%B
	If "!tmpB:~,1!"=="~" Set tmpB=!tmpB:~1!
	If "!tmpB:~,1!"=="-" Set tmpB=!tmpB:~1!
	If "!tmpB!"=="" Set tmpB=0
	Set tmpB=!tmpB:~,2!
	Set %~2=!tmpA!.!tmpB!
)
Exit /B

Последний раз редактировалось Anonymоus, 31-12-2011 в 04:32.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:58, 31-12-2011 | #19



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] скрипт определения скорости соеденения интернета

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Скрипт определения внешнего IP stolyar Скриптовые языки администрирования Windows 9 21-09-2010 12:09
Любой язык - Скрипт Visual Basic для определения IP в Windows 7 и XP Hitsi Скриптовые языки администрирования Windows 8 20-02-2010 23:23
Сайт на двух языках (php-скрипт для определения языка) vitalyhan Вебмастеру 2 22-11-2009 15:36
Log/Monitoring - ограничение скорости интернета Zlodei4ik Aleksandr Сетевые технологии 6 14-10-2009 08:42
Отличие скорости закачки и скорости соеденения Roma2Duo Хочу все знать 5 26-01-2009 08:24




 
Переход