Определение текущей сети по совпадению например 192.168. или 172.16. (если несколько сетевых адаптеров или есть виртуальные возможно неправильное определение сети!)
Пишем диапазон сканирования сети например от 1 до 255 вся сеть
Проверяем пингом если ок
Запрашиваем МАС (2 варианта), ИМЯ, Расширенные сетевые ресурсы.
Применяемые команды:
arp -a IP
net view IP
nbtstat -a IP
ping -a IP
Скачать В версии cmd 6.0 - нужно закомментировать кодировку UTF-8 так как она не понимает (в базу в место русского быстрей всего придут иероглифы) :: Вывод в кодировке UTF-8 ::chcp 65001 > nul
В версии cmd 5.0 - в команде net view \\%IP%.%1 /all нужно убрать all так как оно там еще не поддерживается сделать net view \\%IP%.%1
V 2.5 08.12.2020 Убран вывод 00 и FF - MAC, сравнение MAC между разными способами получения если разные выводим оба, приводим MAC к единому выводу - меняем на :
Scan-seti2.5.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.5 08.12.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"
::Удаление старого файла
del /F /Q /A:H "%~dp0OUTSETI.TXT"
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>"%~dp0OUTSETI.TXT"
::copy /b NUL "%~dp0OUTSETI.TXT"
attrib +h "%~dp0OUTSETI.TXT"
::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%
curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "MACP="
set "MACPP="
set "NAMEP="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
set "NETBIOSP="
set "NETBIOS="
set "GROUP="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAMEP=%%d
:: Запрашиваем имя NETBIOS, Рабочую группу и MAC искомые строки 00 20 MAC
for /f "tokens=1,3-5" %%o in ('nbtstat -A %IP%.%1^|FINDSTR /c:"<00>" /c:"<20>" /c:"MAC"') do (
:: Еще один способ получения MAC
for /f "tokens=2 delims==" %%s in ('echo %%o%%p%%q%%r^|FIND "MAC"') do set MACP=%%s
:: В кодировке cp1251
IF /I "%%p"=="Уникальный" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF /I "%%p"=="Группа" set GROUP=%%o)
:: В кодировке cp866 и EN
IF /i "%%p"=="“ЁЄ «мл©" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF /i "%%p"=="ѓагЇЇ " (set GROUP=%%o) ELSE IF /i "%%p"=="UNIQUE" (set NETBIOSP=!NETBIOSP!%%o:) ELSE IF /i "%%p"=="GROUP" (set GROUP=%%o)))
:: Разбиваем 2 вывода значения имени 00 и 20
for /f "tokens=1,2 delims=:" %%q in ("%NETBIOSP%") do (
:: Сравниваем имя если одинаково выводим 1 , сравниваем с путыми переменными , если разные выводим 2
IF /I "%%q" == "%%r" ( set NETBIOS=%%q) ELSE (IF /i "%%q1"=="1" (set NETBIOS=%%r) ELSE IF /i "%%r1"=="1" (set NETBIOS=%%q) ELSE IF /I "%%q" NEQ "%%r" (set NETBIOS=%%q %%r)))
:: Сравниваем из 2х команд имена если одинаковые выводи 1, если есть пустое выводим одно, если разные выводим оба
IF /i "%NAMEP%"=="%NETBIOS%" (set NAME=%NAMEP%) ELSE (IF /i "%NAMEP%1"=="1" (set NAME=%NETBIOS%) ELSE IF /i "%NETBIOS%1"=="1" (set NAME=%NAMEP%) ELSE IF /I "%NAMEP%" NEQ "%NETBIOS%" (set NAME=%NAMEP% %NETBIOS%))
:: Проверить что 1 MAC не пустой и не 00-00-00-00-00-00 ff-ff-ff-ff-ff-ff 00:00:00:00:00:00 ff:ff:ff:ff:ff:ff , если да берем значение 2рого
IF /i %MACP%1==1 (set MACP=) ELSE (IF /i "%MACP%"=="00-00-00-00-00-00" (set MACP=) ELSE IF /i "%MACP%"=="ff-ff-ff-ff-ff-ff" (set MACP=) ELSE IF /i "%MACP%"=="00:00:00:00:00:00" (set MACP=) ELSE IF /i "%MACP%"=="ff:ff:ff:ff:ff:ff" (set MACP=))
::Если MAC не определился, пробуем 2-ой командой
For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MACPP=%%l
:: Проверить что 2 MAC не пустой и не 00-00-00-00-00-00 ff-ff-ff-ff-ff-ff 00:00:00:00:00:00 ff:ff:ff:ff:ff:ff
IF /i %MACPP%1==1 (set MACPP=) ELSE (IF /i "%MACPP%"=="00-00-00-00-00-00" (set MACPP=) ELSE IF /i "%MACPP%"=="ff-ff-ff-ff-ff-ff" (set MACPP=) ELSE IF /i "%MACPP%"=="00:00:00:00:00:00" (set MACPP=) ELSE IF /i "%MACPP%"=="ff:ff:ff:ff:ff:ff" (set MACPP=))
:: Сравниваем из 2х команд MAC если одинаковые выводи 1, если есть пустое выводим одно, если разные выводим оба
IF /I "%MACP%"=="%MACPP%" (set MAC=%MACP%) ELSE (IF /i "%MACP%1"=="1" (set MAC=%MACPP%) ELSE IF /i "%MACPP%1"=="1" (set MAC=%MACP%) ELSE IF /I "%MACP%" NEQ "%MACPP%" (set MAC=%MACP% %MACPP%))
:: Меняем тире - на :
set MAC=%MAC:-=:%
IF /I "%MAC%"=="-=:" (set MAC=) ELSE (set MAC=%MAC%)
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: В кодировке cp1251
IF /I "%%h"=="Диск" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /I "%%h"=="Печать" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF /I "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /I "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC% NOFILTR:%GROUP%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> "%~dp0OUTSETI.TXT"
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.5 08.12.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"
::Удаление старого файла
del /F /Q /A:H "%~dp0OUTSETI.TXT"
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>"%~dp0OUTSETI.TXT"
::copy /b NUL "%~dp0OUTSETI.TXT"
attrib +h "%~dp0OUTSETI.TXT"
::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%
curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "MACP="
set "MACPP="
set "NAMEP="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
set "NETBIOSP="
set "NETBIOS="
set "GROUP="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAMEP=%%d
:: Запрашиваем имя NETBIOS, Рабочую группу и MAC искомые строки 00 20 MAC
for /f "tokens=1,3-5" %%o in ('nbtstat -A %IP%.%1^|FINDSTR /c:"<00>" /c:"<20>" /c:"MAC"') do (
:: Еще один способ получения MAC
for /f "tokens=2 delims==" %%s in ('echo %%o%%p%%q%%r^|FIND "MAC"') do set MACP=%%s
:: В кодировке cp1251
IF /I "%%p"=="Уникальный" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF /I "%%p"=="Группа" set GROUP=%%o)
:: В кодировке cp866 и EN
IF /i "%%p"=="“ЁЄ «мл©" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF /i "%%p"=="ѓагЇЇ " (set GROUP=%%o) ELSE IF /i "%%p"=="UNIQUE" (set NETBIOSP=!NETBIOSP!%%o:) ELSE IF /i "%%p"=="GROUP" (set GROUP=%%o)))
:: Разбиваем 2 вывода значения имени 00 и 20
for /f "tokens=1,2 delims=:" %%q in ("%NETBIOSP%") do (
:: Сравниваем имя если одинаково выводим 1 , сравниваем с путыми переменными , если разные выводим 2
IF /I "%%q" == "%%r" ( set NETBIOS=%%q) ELSE (IF /i "%%q1"=="1" (set NETBIOS=%%r) ELSE IF /i "%%r1"=="1" (set NETBIOS=%%q) ELSE IF /I "%%q" NEQ "%%r" (set NETBIOS=%%q %%r)))
:: Сравниваем из 2х команд имена если одинаковые выводи 1, если есть пустое выводим одно, если разные выводим оба
IF /i "%NAMEP%"=="%NETBIOS%" (set NAME=%NAMEP%) ELSE (IF /i "%NAMEP%1"=="1" (set NAME=%NETBIOS%) ELSE IF /i "%NETBIOS%1"=="1" (set NAME=%NAMEP%) ELSE IF /I "%NAMEP%" NEQ "%NETBIOS%" (set NAME=%NAMEP% %NETBIOS%))
:: Проверить что 1 MAC не пустой и не 00-00-00-00-00-00 ff-ff-ff-ff-ff-ff 00:00:00:00:00:00 ff:ff:ff:ff:ff:ff , если да берем значение 2рого
IF /i %MACP%1==1 (set MACP=) ELSE (IF /i "%MACP%"=="00-00-00-00-00-00" (set MACP=) ELSE IF /i "%MACP%"=="ff-ff-ff-ff-ff-ff" (set MACP=) ELSE IF /i "%MACP%"=="00:00:00:00:00:00" (set MACP=) ELSE IF /i "%MACP%"=="ff:ff:ff:ff:ff:ff" (set MACP=))
::Если MAC не определился, пробуем 2-ой командой
For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MACPP=%%l
:: Проверить что 2 MAC не пустой и не 00-00-00-00-00-00 ff-ff-ff-ff-ff-ff 00:00:00:00:00:00 ff:ff:ff:ff:ff:ff
IF /i %MACPP%1==1 (set MACPP=) ELSE (IF /i "%MACPP%"=="00-00-00-00-00-00" (set MACPP=) ELSE IF /i "%MACPP%"=="ff-ff-ff-ff-ff-ff" (set MACPP=) ELSE IF /i "%MACPP%"=="00:00:00:00:00:00" (set MACPP=) ELSE IF /i "%MACPP%"=="ff:ff:ff:ff:ff:ff" (set MACPP=))
:: Сравниваем из 2х команд MAC если одинаковые выводи 1, если есть пустое выводим одно, если разные выводим оба
IF /I "%MACP%"=="%MACPP%" (set MAC=%MACP%) ELSE (IF /i "%MACP%1"=="1" (set MAC=%MACPP%) ELSE IF /i "%MACPP%1"=="1" (set MAC=%MACP%) ELSE IF /I "%MACP%" NEQ "%MACPP%" (set MAC=%MACP% %MACPP%))
:: Меняем тире - на :
set MAC=%MAC:-=:%
IF /I "%MAC%"=="-=:" (set MAC=) ELSE (set MAC=%MAC%)
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: В кодировке cp1251
IF /I "%%h"=="Диск" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /I "%%h"=="Печать" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF /I "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /I "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC% NOFILTR:%GROUP%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> "%~dp0OUTSETI.TXT"
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
:: Запрашиваем имя NETBIOS и Рабочую группу искомые строки 00 и 20
for /f "tokens=1,3" %%o in ('nbtstat -A %IP%.%1^|FINDSTR /c:"<00>" /c:"<20>"') do (
:: В кодировке cp1251
IF "%%p"=="Уникальный" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF "%%p"=="Группа" set GROUP=%%o)
:: В кодировке cp866 и EN
IF /i "%%p"=="“ЁЄ «мл©" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF /i "%%p"=="ѓагЇЇ " (set GROUP=%%o) ELSE IF /i "%%p"=="UNIQUE" (set NETBIOSP=!NETBIOSP!%%o:) ELSE IF /i "%%p"=="GROUP" (set GROUP=%%o)))
:: Разбиваем 2 вывода значения имени 00 и 20
for /f "tokens=1,2 delims=:" %%q in ("%NETBIOSP%") do (
:: Сравниваем имя если одинаково выводим 1 если разные выводим 2
IF "%%q" == "%%r" ( set NETBIOS=%%q ) ELSE (set NETBIOS=%%q:%%r ))
Scan-seti2.4.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.4 07.12.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"
::Удаление старого файла
del /F /Q /A:H %~dp0OUTSETI.TXT
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>%~dp0OUTSETI.TXT
::copy /b NUL %~dp0OUTSETI.TXT
attrib +h %~dp0OUTSETI.TXT
::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%
curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
set "NETBIOSP="
set "NETBIOS="
set "GROUP="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Запрашиваем имя NETBIOS и Рабочую группу искомые строки 00 и 20
for /f "tokens=1,3" %%o in ('nbtstat -A %IP%.%1^|FINDSTR /c:"<00>" /c:"<20>"') do (
:: В кодировке cp1251
IF "%%p"=="Уникальный" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF "%%p"=="Группа" set GROUP=%%o)
:: В кодировке cp866 и EN
IF /i "%%p"=="“ЁЄ «мл©" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF /i "%%p"=="ѓагЇЇ " (set GROUP=%%o) ELSE IF /i "%%p"=="UNIQUE" (set NETBIOSP=!NETBIOSP!%%o:) ELSE IF /i "%%p"=="GROUP" (set GROUP=%%o)))
:: Разбиваем 2 вывода значения имени 00 и 20
for /f "tokens=1,2 delims=:" %%q in ("%NETBIOSP%") do (
:: Сравниваем имя если одинаково выводим 1 если разные выводим 2
IF "%%q" == "%%r" ( set NETBIOS=%%q ) ELSE (set NETBIOS=%%q:%%r ))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% %NETBIOS% SHARE:%DISK%%PRINT%%IPC% NOFILTR:%GROUP%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> %~dp0OUTSETI.TXT
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.4 07.12.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"
::Удаление старого файла
del /F /Q /A:H %~dp0OUTSETI.TXT
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>%~dp0OUTSETI.TXT
::copy /b NUL %~dp0OUTSETI.TXT
attrib +h %~dp0OUTSETI.TXT
::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%
curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
set "NETBIOSP="
set "NETBIOS="
set "GROUP="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Запрашиваем имя NETBIOS и Рабочую группу искомые строки 00 и 20
for /f "tokens=1,3" %%o in ('nbtstat -A %IP%.%1^|FINDSTR /c:"<00>" /c:"<20>"') do (
:: В кодировке cp1251
IF "%%p"=="Уникальный" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF "%%p"=="Группа" set GROUP=%%o)
:: В кодировке cp866 и EN
IF /i "%%p"=="“ЁЄ «мл©" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF /i "%%p"=="ѓагЇЇ " (set GROUP=%%o) ELSE IF /i "%%p"=="UNIQUE" (set NETBIOSP=!NETBIOSP!%%o:) ELSE IF /i "%%p"=="GROUP" (set GROUP=%%o)))
:: Разбиваем 2 вывода значения имени 00 и 20
for /f "tokens=1,2 delims=:" %%q in ("%NETBIOSP%") do (
:: Сравниваем имя если одинаково выводим 1 если разные выводим 2
IF "%%q" == "%%r" ( set NETBIOS=%%q ) ELSE (set NETBIOS=%%q:%%r ))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% %NETBIOS% SHARE:%DISK%%PRINT%%IPC% NOFILTR:%GROUP%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> %~dp0OUTSETI.TXT
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)
Scan-seti2.3.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.3 14.11.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"
::Удаление старого файла
del /F /Q /A:H %~dp0OUTSETI.TXT
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>%~dp0OUTSETI.TXT
::copy /b NUL %~dp0OUTSETI.TXT
attrib +h %~dp0OUTSETI.TXT
::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%
curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> %~dp0OUTSETI.TXT
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.3 14.11.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"
::Удаление старого файла
del /F /Q /A:H %~dp0OUTSETI.TXT
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>%~dp0OUTSETI.TXT
::copy /b NUL %~dp0OUTSETI.TXT
attrib +h %~dp0OUTSETI.TXT
::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%
curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> %~dp0OUTSETI.TXT
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
Scan-seti2.2.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.2 12.10.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"
::Удаление старого файла
del /F /Q /A:H %~dp0OUTSETI.TXT
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>%~dp0OUTSETI.TXT
::copy /b NUL %~dp0OUTSETI.TXT
attrib +h %~dp0OUTSETI.TXT
::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do set IPDNS=%%a
set IP=%IPDNS:~1,11%
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%
curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление переменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> %~dp0OUTSETI.TXT
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.2 12.10.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"
::Удаление старого файла
del /F /Q /A:H %~dp0OUTSETI.TXT
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>%~dp0OUTSETI.TXT
::copy /b NUL %~dp0OUTSETI.TXT
attrib +h %~dp0OUTSETI.TXT
::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do set IPDNS=%%a
set IP=%IPDNS:~1,11%
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%
curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление переменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> %~dp0OUTSETI.TXT
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
минус плохо режет IP адрес %IPDNS:~1,11% если количество цифр разное в ip адресах где то надо 1.11 или 1.10 или 1.9 обрезку делать
Scan-seti2.1.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.1 31.08.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do set IPDNS=%%a
set IP=%IPDNS:~1,11%
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
curl -X POST -d "%OUTSETI%" https://DNS/glpi/data_server/data.php
::echo %OUTSETI%
pause
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление переменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
SET OUTSETI=!OUTSETI!WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.1 31.08.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do set IPDNS=%%a
set IP=%IPDNS:~1,11%
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
curl -X POST -d "%OUTSETI%" https://DNS/glpi/data_server/data.php
::echo %OUTSETI%
pause
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление переменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
SET OUTSETI=!OUTSETI!WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
V2.0 изменено определение столбцов в net view \\192.168.ххх.ххх /all где 2 пробела и больше заменить на : и определяем по : столбцы
где не поддерживается /all убрать не будут выводится скрытые ресурсы с $ в конце
В кодировке 1251
Scan-seti2.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.1 31.08.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "192.168.1"') do set IPDNS=%%a
set IP=%IPDNS:~1,11%
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
echo %OUTSETI%
pause
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.1 31.08.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "192.168.1"') do set IPDNS=%%a
set IP=%IPDNS:~1,11%
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
echo %OUTSETI%
pause
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
V 1.0 27.08.2020
Тут есть момент по расшареным устройствам например
Имя общего ресурса Тип Используется как Комментарий
-----------------------------------------------------------------------
ADMIN$ Диск Удаленный Admin
C$ Диск Стандартный общий ресурс
D$ Диск Стандартный общий ресурс
IPC$ IPC Удаленный IPC
Kyocera FS-4020DN KX Печать Kyocera FS-4020DN KX
print$ Диск Драйверы принтеров
Команда выполнена успешно.
Определение столбцов по пробелам а в 1 столбце Kyocera FS-4020DN KX есть 2 пробела и в место типа Печать получаем FS-4020DN
Scan-seti1.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 1.0 27.08.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "192.168.1"') do set IPDNS=%%a
set IP=%IPDNS:~1,11%
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
echo %OUTSETI%
pause
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (работает если между расшаренным и типом 1 пробел, если пробел не один до типа то не отработает)
FOR /F "skip=2 tokens=1,2,3,4 delims= " %%f IN ('net view \\%IP%.%1^|FIND " "') do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%g"=="„ЁбЄ" ( set DISK=!DISK!%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="ЏҐз вм" set PRINT=!PRINT!%%g: \\%IP%.%1\%%f )
IF "%%g"=="Disk" ( set DISK=!DISK!%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="Print" set PRINT=!PRINT!%%g: \\%IP%.%1\%%f ))
:: Выводим все в одну переменную плюс накопительную всех циклов
SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 1.0 27.08.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "192.168.1"') do set IPDNS=%%a
set IP=%IPDNS:~1,11%
setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
echo %OUTSETI%
pause
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)
:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (работает если между расшаренным и типом 1 пробел, если пробел не один до типа то не отработает)
FOR /F "skip=2 tokens=1,2,3,4 delims= " %%f IN ('net view \\%IP%.%1^|FIND " "') do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%g"=="„ЁбЄ" ( set DISK=!DISK!%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="ЏҐз вм" set PRINT=!PRINT!%%g: \\%IP%.%1\%%f )
IF "%%g"=="Disk" ( set DISK=!DISK!%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="Print" set PRINT=!PRINT!%%g: \\%IP%.%1\%%f ))
:: Выводим все в одну переменную плюс накопительную всех циклов
SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION
:end
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
Предыдущие варианты
Показать
::@ECHO OFF
mode con:cols=130 lines=130
color 1A
::chcp 1251 >NUL
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "192.168.2"') do set IPDNS=%%a
set IP=%IPDNS:~1,11%
SETLOCAL
:: Перебор IP
for /L %%b in (3,1,255) do call:scan %%b
........
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do (
set NAME=%%d
:: Запрос MAC
For /f "tokens=2 delims= " %%e in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do (
set MAC=%%e
:: Расшаренные сетевые ресурсы
FOR /F "skip=2 tokens=1,2,3,4 delims= " %%f IN ('net view \\%IP%.%1^|FIND " "') do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%g"=="„ЁбЄ" ( set DISK=%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="ЏҐз вм" set PRINT=%%g: \\%IP%.%1\%%f )
IF "%%g"=="Disk" ( set DISK=%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="Print" set PRINT=%%g: \\%IP%.%1\%%f )
)))) else (echo %IP%.%1 noping)
echo IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
pause
Первый цикл
FOR ** in *** do (
FOR ** in *** do set выдает строчную переменную для этой же строки команды
set уже не выдает
)
Другой вариант
Первый цикл
FOR ** in *** do (
FOR ** in *** do (
set выдает переменную в текущие скобки 2рого цикла
но если 2 цикл не отработал не выполнилась команда или не было данных, то если есть 3 подцикл он выполнятся не будет нужно делить на отдельные циклы
FOR ** in *** do ( )
)
)
Но отдельные циклы не передают переменную, в другие строки если они заключенный в общий первый цикл тут помогает только вариант
if %Переменная сравнения%==0 (goto :YesPing) else (goto :end)
:YesPing
тут отдельные циклы не заключенные в общий но зависит от первого через вызов
Перевод на новую строку переменная %n%
set n=^&echo.
Вывод переменной за пределы цикла возврат в основной цикл пример
@echo off
if "2"=="" (
echo Peredayte parametry scenariju!) & (goto EXIT)
setlocal enabledelayedexpansion
call :FACT 8
echo %Result%
pause
goto :EXIT
:FACT
if %1 == 0 (set Result=1 & exit /b)
if %1 == 1 (set Result=9 & exit /b)
set /A PARAM=%1 - 1
call :FACT %PARAM%
set /A Result=%1 * %Result%
setlocal DISABLEDELAYEDEXPANSION
exit /b
:EXIT
mode con:cols=130 lines=130
color 1A
::chcp 1251 >NUL
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE
::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "192.168.2"') do set IPDNS=%%a
set IP=%IPDNS:~1,11%
SETLOCAL
:: Перебор IP
for /L %%b in (3,1,255) do call:scan %%b
........
goto:eof
:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do (
set NAME=%%d
:: Запрос MAC
For /f "tokens=2 delims= " %%e in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do (
set MAC=%%e
:: Расшаренные сетевые ресурсы
FOR /F "skip=2 tokens=1,2,3,4 delims= " %%f IN ('net view \\%IP%.%1^|FIND " "') do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%g"=="„ЁбЄ" ( set DISK=%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="ЏҐз вм" set PRINT=%%g: \\%IP%.%1\%%f )
IF "%%g"=="Disk" ( set DISK=%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="Print" set PRINT=%%g: \\%IP%.%1\%%f )
)))) else (echo %IP%.%1 noping)
echo IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%
:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
pause
Первый цикл
FOR ** in *** do (
FOR ** in *** do set выдает строчную переменную для этой же строки команды
set уже не выдает
)
Другой вариант
Первый цикл
FOR ** in *** do (
FOR ** in *** do (
set выдает переменную в текущие скобки 2рого цикла
но если 2 цикл не отработал не выполнилась команда или не было данных, то если есть 3 подцикл он выполнятся не будет нужно делить на отдельные циклы
FOR ** in *** do ( )
)
)
Но отдельные циклы не передают переменную, в другие строки если они заключенный в общий первый цикл тут помогает только вариант
if %Переменная сравнения%==0 (goto :YesPing) else (goto :end)
:YesPing
тут отдельные циклы не заключенные в общий но зависит от первого через вызов
Перевод на новую строку переменная %n%
set n=^&echo.
Вывод переменной за пределы цикла возврат в основной цикл пример
@echo off
if "2"=="" (
echo Peredayte parametry scenariju!) & (goto EXIT)
setlocal enabledelayedexpansion
call :FACT 8
echo %Result%
pause
goto :EXIT
:FACT
if %1 == 0 (set Result=1 & exit /b)
if %1 == 1 (set Result=9 & exit /b)
set /A PARAM=%1 - 1
call :FACT %PARAM%
set /A Result=%1 * %Result%
setlocal DISABLEDELAYEDEXPANSION
exit /b
:EXIT
Разные попытки
Показать
:: Расшаренные сетевые ресурсы (работает если между расшаренным и типом 1 пробел, если пробел не один до типа то не отработает)
попытка вывести все строки
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do set share=%%f
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
В переменную поподает 1 последняя строка set share=%%f ,а если так set share=!share!%%f то все в одной строке весь вывод
set share=!share!^%%f не помогает , если только для для вывода в echo то set share=!share!^&echo.%%f работает но надо нам в переменную и тудя тянется весь текст а не перенос.
для того что бы преобразовать нам нужна переменная вида %переменная% будет приобразование 2 пробела на : %переменная: =:%
а переменная такого вида из цикла не идет %%f: =: - работать не будет.
Дальше попытки создать это все в одном цикле с подциклами у нас не работает переменная set
Сделать вывод сразу с :: в место пробелов получаем опять все в одной строке либо только первую переменную на обработке
FOR /F "delims=: tokens=1,2,3,4" %%g in ("%share: =:%") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g ))))
И по итогуу выходит у нас вот так
:: Расшаренные сетевые ресурсы
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\192.168.101.10 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION
попытка вывести все строки
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do set share=%%f
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
В переменную поподает 1 последняя строка set share=%%f ,а если так set share=!share!%%f то все в одной строке весь вывод
set share=!share!^%%f не помогает , если только для для вывода в echo то set share=!share!^&echo.%%f работает но надо нам в переменную и тудя тянется весь текст а не перенос.
для того что бы преобразовать нам нужна переменная вида %переменная% будет приобразование 2 пробела на : %переменная: =:%
а переменная такого вида из цикла не идет %%f: =: - работать не будет.
Дальше попытки создать это все в одном цикле с подциклами у нас не работает переменная set
Сделать вывод сразу с :: в место пробелов получаем опять все в одной строке либо только первую переменную на обработке
FOR /F "delims=: tokens=1,2,3,4" %%g in ("%share: =:%") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g ))))
И по итогуу выходит у нас вот так
:: Расшаренные сетевые ресурсы
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\192.168.101.10 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION