|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Проверка состояния сети. |
|
CMD/BAT - [решено] Проверка состояния сети.
|
![]() Ветеран Сообщения: 757 |
Доброго времени суток уважаемые.
Возможно это баян, но что то ничего не нашел. Вернее все отрывисто. Необходимо сделать батник который бы анализировал состояние сети по 5 контрольным точкам потом бы выдавал проблемное место. Батник для запуска пользователем, когда он позвонит в ТП. У нас множество удаленных точек и уже порядком поднадоело "подрываться" из за глупых ошибок пользователя. Наваял сейчас простенький батни. Пингует точки, если пинг не проходит - пишет недоступность. А мне в идеале вывести в конце теста мессадж бокс с примерным содержанием содержанием: 1. Сервер 1 - Доступен 2. Сервер 2 - Доступен 3. Сервер 3 - НЕ доступен 4. Сервер 4 - НЕ доступен 5. Сервер 5 - Доступен От этого можем отталкиваться уже и анализировать проблему. Вот батник который сейчас наваял ![]() @echo oFF ping 192.168.140.1 | find "TTL=" > nul if errorlevel 1 ( msg * "SERVER IBMD NE DOSTUPEN" ) else ( echo "IBMD NE DOSTUPEN" ) ping 192.168.1.1 | find "TTL=" > nul if errorlevel 1 ( msg * "MODEM NE DOSTUPEN" ) else ( echo "MODEM DOSTUPEN" ) ping 77.94.124.70 | find "TTL=" > nul if errorlevel 1 ( msg * "PDC FILIALA NE DOSTUPEN" ) else ( echo "PDC FILIALA DOSTUPEN" exit /b ) как то так. Поделитесь соображениями пожалуйста кому не лень... PS Другие темы читал, немного не то. Стороннее ПО не получится - стандарты компании не разрешают ставить. Да и точек очень много. Нужно просто батник который пользователь нажмет по просьбе СТП и прочитает сообщение выданное ей. |
|
Отправлено: 12:11, 26-05-2012 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Iska,
Протокол : ICMP Локальный адрес : 10.3.3.230 Удалённый адрес : xx.xx.xx.xxx Пакеты : 1 {0 ; 1} Объём данных : 60 байт {0 ; 60} Общий размер : 176 байт {0 ; 176} Время захвата : 27.05.2012 19:42:41:078 Время последнего пакета: 27.05.2012 19:42:41:078 Данные: 00000000 45 00 00 3C 15 67 00 00 7F 01 75 C8 0A 03 03 E6 E..<.g.. .u..... 00000010 5C A8 46 01 08 00 34 5C 03 00 16 00 61 62 63 64 \.F...4\ ....abcd 00000020 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 efghijkl mnopqrst 00000030 75 76 77 61 62 63 64 65 66 67 68 69 uvwabcde fghi |
Отправлено: 20:48, 27-05-2012 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать Цитата Anonymоus:
find "TTL" действительно самый дешевый способ. Но мне он не нравится тем, что если из 10 пингов 1 пройдет, эта команда нам скажет, что всё в порядке, тогда как цель такого мониторинга выявить проблемы. Набросал вот. Алгоритм следующий: мы просим find не просто найти TTL, а подсчитать количество таких строк. Эту цифру мы можем считать и сравнить с той, которую передавали ранее пингу в параметре -n. Если хотя бы один пинг не прошел - операция считается неудачной @echo off setlocal enabledelayedexpansion call :TestPing[] -debug %1 %2 echo ----------- errorlevel: %errorlevel% ---------- goto :eof :TestPing[] :: Parameters: [-debug] IP [PingCount] if "%1"=="-debug" ( set TestPing.Debug=Yes shift ) set TestPing.PingCount=%2 if "%TestPing.PingCount%"=="" ( set TestPing.PingCount=2 ) set TestPing.Out2=B%random%.tmp set TestPing.Out3=C%random%.tmp >%TestPing.Out2% (ping -n %TestPing.PingCount% %1) set TestPing.PingErrorLevel=!errorlevel! >%TestPing.Out3% (find /C "TTL=" <%TestPing.Out2%) for /f %%i in (%TestPing.Out3%) do ( set TestPing.SuccessCount=%%i ) if %TestPing.PingCount%==%TestPing.SuccessCount% ( set TestPing.Result=Yes if %TestPing.PingErrorLevel%==0 ( set TestPing.PingErrorLevelResult={valid} ) else ( set TestPing.PingErrorLevelResult={INVALID} ) ) else ( if not %TestPing.PingErrorLevel%==0 ( set TestPing.PingErrorLevelResult={valid} ) else ( set TestPing.PingErrorLevelResult={INVALID} ) ) if "%TestPing.Debug%"=="Yes" ( type %TestPing.Out2% echo ------------- results: ------------- echo Ping count : %TestPing.PingCount% echo Success count : %TestPing.SuccessCount% echo Ping errorLevel: %TestPing.PingErrorLevel% %TestPing.PingErrorLevelResult% if "%TestPing.Result%"=="Yes" ( echo Ping is successful ) else ( echo There is ping error ) ) del %TestPing.Out2% del %TestPing.Out3% if "%TestPing.Result%"=="Yes" ( exit /b 0 ) exit /b 1 goto :eof Результаты работы в эксперименте с бидоном 192.168.0.1 - wifi роутер в host зоне, 192.168.1.100 - телефон в guest зоне Цитата:
|
||
------- Последний раз редактировалось CyberMuesli, 27-05-2012 в 23:54. Отправлено: 23:44, 27-05-2012 | #12 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать ![]() А хоть что говорит такой: код (чтобы хоть немного представлять ситуацию, и как себя в ней вести)? |
Отправлено: 00:07, 28-05-2012 | #13 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать Цитата Iska:
192.168.1.100 Off Status code: 11010 192.168.1.100 Off Status code: 11003 192.168.1.100 Off Status code: 11010 192.168.1.100 Off Status code: 11003 192.168.1.100 Off Status code: 11010 192.168.1.100 On Response time: 5 ms 192.168.1.100 On Response time: 232 ms 192.168.1.100 On Response time: 186 ms 192.168.1.100 On Response time: 212 ms 192.168.1.100 On Response time: 12 ms 192.168.1.100 On Response time: 218 ms зы. начало цикла надо делать до CreateObject, я правильно понял? |
|
------- Отправлено: 00:20, 28-05-2012 | #14 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Iska,
CyberMuesli, как вариант, использовать вот такую конструкцию, где будет дополнительно проверяться и наличие потерь: Set IP=192.168.70.1&Set i=3 For /F %%I In ('Ping -n %i% %IP%^|Find /C "TTL="') Do (If %%I==%i% Echo Пинг прошел, потерь нету) Отредактировал второй пост, поправил скрипт, чтобы он учитывал частично прошедший пинг и добавлял статус "Unstable connection" в таком случае. |
Последний раз редактировалось Anonymоus, 28-05-2012 в 08:21. Отправлено: 07:52, 28-05-2012 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать CyberMuesli, можно так:
вынеся собственно подключение к Wbem за рамки цикла. Anonymоus, спасибо, ясно. Статус именно тот, что Вы приводили выше на скриншоте: Цитата:
Одно только замечание по коду со скриншота… |
|
Отправлено: 08:47, 28-05-2012 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Anonymоus, порылся немного. Да, похоже Вы совершенно правы. Вон и Симон рекомендует пользовать исключительно фильтр на TTL (а для полной ясности и вовсе проверять реальную доступность конечного адреса ажник в четыре шага, начиная с localhost и последовательно углубляясь по маршруту): Ping.
Ещё раз спасибо. Будем знать. |
Отправлено: 09:04, 28-05-2012 | #17 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 10:31, 28-05-2012 | #18 |
![]() Ветеран Сообщения: 757
|
Профиль | Отправить PM | Цитировать Уважемые, возник такой вопрос.
Как можно добавить в скрипт предложенный Anonymous использование переменных. Так как филиалы разные то и ип адреса тоже. Хотелось бы что бы в тело не лезли.... а прописали где нибудь типа settings.ini. Ну а сам батник конвертнуть в com или exe.... не силен в скриптовых языках... мозг сломал уже ![]() |
Отправлено: 10:34, 28-05-2012 | #19 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Dreamer_UFA, сам скрипт:
@Echo Off SetLocal EnableDelayedExpansion If Not Exist "settings.ini" Echo Settings not found&Pause&Exit 1 For /F "usebackq eol=# tokens=1,2* delims==" %%A In ("settings.ini") Do ( If Not "%%B"=="" Set %%A=%%B ) Set MsgString="Status:" :: Получаем набор адресов Echo Wait... For /F "tokens=2 delims==" %%A In ('Set Point_') Do ( For /F "tokens=1,2 delims=:" %%B In ("%%A") Do ( Echo Checking "%%B" :: Проверяем на доступность сервера и стабильный пинг к нему For /F %%I In ('Ping -n %PacketCount% %%B^|Find /C "TTL="') Do ( If %%I==%PacketCount% (Set Result=Online) Else (Set Result=Unstable connection) If %%I==0 Set Result=Not responding ) :: Составляем строку с данными для MsgBox'а Set MsgString=!MsgString! + vbCrLf + "%%C - !Result!" ) ) :: Генерируем и запускаем vbs-скрипт, выводящий данные Echo MsgBox %MsgString%>"%Temp%\statusmsg.vbs" "%Temp%\statusmsg.vbs" Содержимое файла настроек Settings.ini: |
Отправлено: 12:13, 28-05-2012 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Проверка состояния сети. | LikeSD | AutoIt | 6 | 29-03-2014 09:18 | |
Проверка прав пользователей в сети | super_Spartan | Хочу все знать | 4 | 10-07-2009 13:02 | |
VBS/WSH/JS - [решено] проверка состояния учетной записи | hse2000 | Скриптовые языки администрирования Windows | 11 | 19-03-2009 11:40 | |
Программа для отображения состояния сети | kazarkin | Сетевые технологии | 5 | 06-10-2006 14:09 | |
мониторинг состояния компьютеров в сети | XaDex | Сетевые технологии | 1 | 26-08-2006 02:05 |
|