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

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

Ответить
Настройки темы
CMD/BAT - Сканер компьютеров в сети

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


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

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


Помогите, я совсем запутался (
Я захотел написать сканер компов в сети: 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
Благодарности: 1

Профиль | Отправить 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
Думаю можно сделать параметры: "2 цифры ip" "max значение 3й цифры" "max значение 4й цифры"
Например CMD: scan.bat 192.168 20 30

Отправлено: 14:04, 13-02-2011 | #2



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

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


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


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

Профиль | Отправить 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
Благодарности: 257

Профиль | Отправить 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
Благодарности: 20

Профиль | Отправить 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
Благодарности: 1

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


У меня на 7ке в result.txt всё верно. Только проблема с кодировкой

Отправлено: 18:16, 15-02-2011 | #6


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


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

Профиль | Отправить 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
Благодарности: 0

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


а кто нибудь может дописать скриптик чтобы по ip определялся пользователь из AD??? Удобно будет следить за теми кто после рабочего дня не выключил комп

Отправлено: 10:50, 16-02-2011 | #8


Старожил


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

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


К сожалению, у меня нету доступа к машинам с установленной Win7, так что проверить корректность работы скрипта под этой ОС нет возможности. Скрипт должен быть в кодировке 866, результат он выводит в 1251.
Цитата ratibor79:
P.S. По поводу Windows 7 разных разрядности я в шоке. В чем разница? »
Подозреваю, что проблема в этом
Код: Выделить весь код
If "%ErrorLevel%"=="0" Echo %Current_1%.%Current_2%.%Current_3%.%Current_4%>>result.txt
а точнее, в If "%ErrorLevel%"=="0". Есть подозрение, что на Win7 x64 при успешном пинге хоста errorlevel совсем не 0, но проверить не могу.

Последний раз редактировалось Anonymоus, 18-02-2011 в 15:09. Причина: дополнил


Отправлено: 14:53, 18-02-2011 | #9


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


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

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


Windows 7 x64 SP1 всё корректно
Код: Выделить весь код
Отчёт LanScan за [20.02.2011 - 12:36]
(Диапазон 192.168.1.0 - 192.168.1.200)
Активные хосты:

192.168.1.1

Отправлено: 09:35, 20-02-2011 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
МФУ 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




 
Переход