|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Сканер компьютеров в сети |
|
|
CMD/BAT - Сканер компьютеров в сети
|
Новый участник Сообщения: 7 |
Помогите, я совсем запутался (
Я захотел написать сканер компов в сети: 192.168.ххх.yyy батник сканиует сначала 192.168.ххх.1, а потом из рабочих xxx, сканирует yyy, но у меня только один xxx обрабатывается(( Может я изобретаю велосипед, подскажите как оптимальнее это написать... @echo off Set max=255 :L0 if `%1`==`2` (goto L3) else ( if `%1`==`1` (goto L1) else ( Set check=1 & Set lv1=192.168 & Set lv2=1) ) for /L %%i in (0,1,%max%) do ( echo %lv1%.%%i.%lv2% cmd /v:on /c %0 %check% %lv1% %lv2% %%i) goto end :L1 if `%4`==`%max%` (set check=2 & goto L2) ping -a -w 50 -n 1 %2.%4.%3>nul if ErrorLevel 1 (Goto End) echo !%4>>iplv.txt Goto End :L2 for /L %%z in (0,1,%max%) do ( echo %lv1%.%lv2%.%%z cmd /v:on /c %0 %check% %lv1% %lv2% %%z) goto end :L3 FOR /F %%j in (iplv.txt) do ( ping -a -w 50 -n 1 %2.%%j.%4>nul if ErrorLevel 1 (Goto End) echo %2.%%j.%4>>ip_list.txt ) goto end :End exit |
|
Отправлено: 12:13, 13-02-2011 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Я вроде разобрался сам. Но всёравно хотел бы выслушать предложение по оптимизации:
@echo off Set max=15 :L0 if `%1`==`2` (goto L3) else ( if `%1`==`1` (goto L1) else ( Set check=1 & Set lv1=192.168 & Set lv2=1) ) for /L %%i in (0,1,%max%) do ( echo %lv1%.%%i.%lv2% cmd /v:on /c %0 %check% %lv1% %lv2% %%i) goto end :L1 if `%4`==`%max%` (set check=2 & goto L2) ping -a -w 50 -n 1 %2.%4.%3>nul if ErrorLevel 1 (goto end) echo !%4>>iplv.txt goto end :L2 FOR /F %%j in (iplv.txt) do ( for /L %%z in (0,1,%max%) do ( echo %2.%%j.%%z cmd /v:on /c %0 %check% %lv1% %lv2% %%z %%j) ) goto end :L3 Set ip=%%j ping -a -w 50 -n 1 %2.%5.%4>nul if ErrorLevel 1 (goto end) echo %2.%5.%4>>ip.txt goto end :End exit Например CMD: scan.bat 192.168 20 30 |
Отправлено: 14:04, 13-02-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Какую всётаки я фигню написал
![]() Вот переписал)) намного короче @echo off if `%1`==`` (Set onetwo=192.168) else (Set onetwo=%1) if `%2`==`` (Set three=255) else (Set three=%2) if `%3`==`` (Set four=255) else (Set four=%3) for /l %%t in (1,1,%three%) do (ping -a -w 50 -n 1 %onetwo%.%%t.1 >nul && Echo %%t>>ip1.txt) for /F %%j in (ip1.txt) do ( for /l %%f in (1,1,%four%) do (ping -a -w 50 -n 1 %onetwo%.%%j.%%f >nul && Echo %onetwo%.%%j.%%f>>iplist.txt) ) exit |
Отправлено: 15:33, 13-02-2011 | #3 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Я давным-давно вот такую штуку писал. Да, длинная. Да, неоптимизированная. Но работает, и защищено от ввода некорректных значений, плюс можно выбирать любые диапазоны.
@Echo Off Del tmp Title Сканер сети :Main Cls Echo. Echo. Echo Введите начало диапазона IP-адресов для сканирования Echo в формате х.х.х.х Echo. Set /P IP_start=^> Echo #%IP_start%>tmp Echo. Echo. Echo Введите конец диапазона IP-адресов для сканирования Echo в формате х.х.х.х Echo. Set /P IP_end=^> Echo @%IP_end%>>tmp For /F "eol=@ delims=. tokens=1,2,3,4" %%A In (tmp) do (Set Start_1=%%A&Set Start_2=%%B&Set Start_3=%%C&Set Start_4=%%D) Set Start_1=%Start_1:~1% For /F "eol=# delims=. tokens=1,2,3,4" %%A In (tmp) do (Set End_1=%%A&Set End_2=%%B&Set End_3=%%C&Set End_4=%%D) Del tmp Set End_1=%End_1:~1% Set /A ErrLvl=0 Set /A Succes=0 Set /A Fail=0 Set /A Complete=0 Set Begin=[%date% - %time:~-0,5%] Set Current_1=%Start_1%&Set Current_2=%Start_2%&Set Current_3=%Start_3%&Set Current_4=%Start_4% Echo ╬Єў╕Є LanScan чр [%date% - %time:~-0,5%]>result.txt Echo (─шрярчюэ %Start_1%.%Start_2%.%Start_3%.%Start_4% - %End_1%.%End_2%.%End_3%.%End_4%)>>result.txt Echo └ъЄштэ√х їюёЄ√:>>result.txt Echo.>>result.txt :Scan Ping -n 1 -w 400 %Current_1%.%Current_2%.%Current_3%.%Current_4%>nul If "%ErrorLevel%" GEQ "1" (Set /A Fail=Fail+1) Else Set /A Succes=Succes+1 If "%ErrorLevel%"=="0" Echo %Current_1%.%Current_2%.%Current_3%.%Current_4%>>result.txt If "%Current_1%"=="%End_1%" Set Complete=1 If "%Current_2%"=="%End_2%" Set Complete=%Complete%1 If "%Current_3%"=="%End_3%" Set Complete=%Complete%1 If "%Current_4%"=="%End_4%" Set Complete=%Complete%1 If "%Complete%"=="1111" GoTo EndScan Call :Output Set /A Current_4=Current_4+1 If "%Current_4%"=="256" Set /A Current_4=0 & Set /A Current_3=Current_3+1 If "%Current_3%"=="256" Set /A Current_3=0 & Set /A Current_2=Current_2+1 If "%Current_2%"=="256" Set /A Current_2=0 & Set /A Current_1=Current_1+1 GoTo Scan :Output Set /A Total=Fail+Succes Cls Echo. Echo. Echo [%date% - %time:~-0,5%] - начато сканирование Echo Выбранный диапазон: %Start_1%.%Start_2%.%Start_3%.%Start_4% - %End_1%.%End_2%.%End_3%.%End_4% Echo Активных хостов: %Succes% Echo Неактивных хостов: %Fail% Echo Всего хостов: %Total% Echo Текущий адрес: %Current_1%.%Current_2%.%Current_3%.%Current_4% Exit /B :ErrMsg Cls Echo. Echo. Echo Конечный адрес диапазона больше начального, проверьте правильность ввода Echo Нажмите любую кнопку для продолжения Pause>Nul GoTo Main :EndScan Set /A Total=Fail+Succes Cls Echo. Echo. Echo Выбранный диапазон: %Start_1%.%Start_2%.%Start_3%.%Start_4% - %End_1%.%End_2%.%End_3%.%End_4% Echo Всего хостов обработано: %Total% Echo из них активных: %Succes% неактивных : %Fail% Echo Скрипт стартовал: %Begin% Echo Обработка закончена: [%date% - %time:~-0,5%] Echo Сканирование закончено, результат выведен в result.txt Echo. Echo Нажмите любую кнопку для продолжения Pause>Nul Exit |
Отправлено: 22:46, 13-02-2011 | #4 |
Пользователь Сообщения: 112
|
Профиль | Отправить PM | Цитировать Anonymоus Спасибо прекрасный скрипт.
НО! есть несколько недостатков. Я проверял данный сценарий на разных ОС и вот что заметил. На Windows XP sp3, Windows Server 2003 R2 sp2 скрипт отработал прекрасно, а вот на Windows 7, Windows Server 2003 sp2 скрипт не корректно вывел результат, т.е. на экране обработки (сканирования) сети информация об активных и не активных хостах выводиться правильно, а вот в результат (result.txt) в пункт Активные хосты: просто сохраняет весь заданный диапазон. Хотелось бы, если возможно поправить скрипт, чтобы он был универсален и отрабатывал на всех ОС корректно. |
|
Отправлено: 09:26, 15-02-2011 | #5 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать У меня на 7ке в result.txt всё верно. Только проблема с кодировкой
|
Отправлено: 18:16, 15-02-2011 | #6 |
Пользователь Сообщения: 112
|
Профиль | Отправить PM | Цитировать EnemyBot
Ну что касается кодировки проблем не наблюдаю. Сохрани скрипт в кодировке 866 (OEM) и должно всё быть нормально (воспользуйся для этого к примеру AkelPad) НО вот по поводу проблемка вывода результата сканирования сети в разных ОС на мой взгляд остаётся актуальной. Проверил скрипт ещё на нескольких ОС. Итог: Windows XP sp3, Windows Server 2003 R2 sp2, Windows Server 2008 R2, Windows 7 x86 - сценарий отработал на ура, корректно вывел результат сканирования активного оборудования Windows Server 2003 sp2, Windows 7 x64 - тоже самое. Скрипт отрабатывает нормально, но вот результат выводит не корректно. Просто выводит весь указанный диапазон IP (и активные и неактивные хосты) P.S. По поводу Windows 7 разных разрядности я в шоке. В чем разница? |
Отправлено: 07:00, 16-02-2011 | #7 |
Новый участник Сообщения: 48
|
Профиль | Отправить PM | Цитировать а кто нибудь может дописать скриптик чтобы по ip определялся пользователь из AD??? Удобно будет следить за теми кто после рабочего дня не выключил комп
|
Отправлено: 10:50, 16-02-2011 | #8 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать К сожалению, у меня нету доступа к машинам с установленной Win7, так что проверить корректность работы скрипта под этой ОС нет возможности. Скрипт должен быть в кодировке 866, результат он выводит в 1251.
Цитата ratibor79:
а точнее, в If "%ErrorLevel%"=="0". Есть подозрение, что на Win7 x64 при успешном пинге хоста errorlevel совсем не 0, но проверить не могу. |
|
Последний раз редактировалось Anonymоus, 18-02-2011 в 15:09. Причина: дополнил Отправлено: 14:53, 18-02-2011 | #9 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать |
Отправлено: 09:35, 20-02-2011 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
МФУ HP lj 3055. По сети не работает сканер. | jimmy pop | Непонятные проблемы с Железом | 3 | 15-06-2011 15:56 | |
как заставить работать сканер по сети | clop1000 | Хочу все знать | 2 | 17-10-2007 22:31 | |
Сканер сети, ищу | Bugs | Защита компьютерных систем | 5 | 05-09-2006 07:47 | |
Сканер+каталогизатор домашней сети | mux | Сетевые технологии | 5 | 24-10-2005 01:20 | |
Можно ли использовать сканер по сети | Leon71 | Microsoft Windows 95/98/Me (архив) | 1 | 09-10-2003 19:14 |
|