Сканирование Сети Скриптами

Open Computers and Software Inventory
Открыть инвентарь компьютеров и программного обеспечения
- решение для управления активами
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 231
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

Сканирование Сети Скриптами

Сообщение Артём Мамзиков » Чт авг 27, 2020 14:01 #1

Для WINDOWS на bat

Определение текущей сети по совпадению 192.168.1
Пишем диапазон сканирования сети например от 1 до 255 вся сеть
Проверяем пингом если ок
Запрашиваем МАС (2 варианта), ИМЯ, Расширенные сетевые ресурсы.

Применяемые команды:
arp -a IP
net view IP
nbtstat -a IP
ping -a IP

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"




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"
Предыдущие варианты
Показать
::@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
scan-seti-otvet-primer.jpg
scan-seti-otvet-primer.jpg
Разные поппытки
Показать

:: Расшаренные сетевые ресурсы (работает если между расшаренным и типом 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

СКАЧАТЬ
Scan-seti-Windows.zip
Scan-seti-Windows.zip
(4.57 КБ) 0 скачиваний

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 231
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

Сканирование Сети Скриптами

Сообщение Артём Мамзиков » Чт авг 27, 2020 16:09 #2

Для LINUX на bash командой nmap -sn

Возможно проще на команде arp-scan --interface=enp3s0 --localnet


#!/bin/bash

# Получим переменную IP для подстановки
#IPDNS=`grep "nameserver" /etc/resolv.conf |tr -d 'nameserver'|grep -E '.5'|tr -d ' '`
# Выводим строки из файла resolv содержащие nameserver | убираем само слово nameserver | оставляем строку содержащую .5 | удаляем все пробелы
IP=`grep "nameserver" /etc/resolv.conf |sed 's/nameserver//'|grep -E '.5'|tr -d ' ' |awk -F'.' '{print $1,$2,$3}' OFS='.'`

#Сканирование сети
scan=`nmap -sn "${IP}".0/24`

IFS=$'\n'

# Цикл Перебор строк в переменную data
for data in $scan
do
# Обрабатываем строки
#echo "${scan}"

# Получаем IP построчно набираем 1 переменную с пустыми строками где не найдено совпадение|Ищем выбираем нужную строку|вырезам начало текст|Убираем скобки если есть
IP='\n'`echo "${data}"|grep -E "Nmap scan report for "|sed 's/Nmap scan report for //'|sed 's/[()]//g'`

# Получаем MAC|Находим выбираем нужние строки|Обрезаем лишний текст|удалем скобки и что в них
MACP='\n'`echo "${data}"|grep -E "MAC Address: "|sed 's/MAC Address: //'|sed 's/ (.*//g'`
# Получаем Имя если есть|Выбираем нужные строки|Обрезаем заголовок|Оставляем заначение из скобок|Удаляем закрывающую скобку
NAMEMACP='\n'`echo "${data}"|grep -E "MAC Address: "|sed 's/MAC Address: //'| sed 's|.*(||'|tr -d ')'`

# Хост Доступен значение up|Выбираем нужние строки|обрезаем заголовок|Удаляем скобки и что в них
UPP='\n'`echo "${data}"|grep -E "Host is up"|sed 's/Host is //'|sed 's/ (.*//g'`

#Убираем пустые строки где нет совпадения, так как это цикл и они появляются
OUTSTR=`echo -e "${IP}"|sed '/^[ ]*$/d'`
MACSTR=`echo -e "${MACP}"|sed '/^[ ]*$/d'`
NAMEMACSTR=`echo -e "${NAMEMACP}"|sed '/^[ ]*$/d'`
UPSTR=`echo -e "${UPP}"|sed '/^[ ]*$/d'`

# Собираем данные для одной строки Переменные|Убираем пустые переменные|удалить переходы строк|Разбиваем строки где есть значение IP (ip оно же dns если в начале будут символы оно не пройдет регулярку)
STR=$STR echo "IP:"${OUTSTR}" MAC:"${MACSTR}" NAMEMAC:"${NAMEMACSTR}" UP:"${UPSTR}" "|sed 's/IP: //;s/MAC: //;s/NAMEMAC: //;s/UP: //'|tr -d '\n'|sed 's/\IP:[A-Z|a-z|0-9]/\nIP:/g'

done

echo "${STR}"
Предыдущие варианты
Показать
#!/bin/bash

# Получим переменную IP для подстановки
#IPDNS=`grep "nameserver" /etc/resolv.conf |tr -d 'nameserver'|grep -E '.5'|tr -d ' '`
# Выводим строки из файла resolv содержащие nameserver | убираем само слово nameserver | оставляем строку содержащую .5 | удаляем все пробелы
IP=`grep "nameserver" /etc/resolv.conf |sed 's/nameserver//'|grep -E '.5'|tr -d ' ' |awk -F'.' '{print $1,$2,$3}' OFS='.'`

#Сканирование сети
scan=`nmap -sn "${IP}".0/24`

IFS=$'\n'
JSON="{\"data\":["
SEP=""

# Цикл Перебор строк в переменную data
for data in $scan
do
# Обрабать строки
echo "${data}"
case "${data}" in
*"Nmap scan report for"*)
OUTIP=`echo "${data}"|grep -E "Nmap scan report for "|sed 's/Nmap scan report for //'`
;;
*"MAC Address"*)
MAC=`echo "${data}"|grep -E "MAC Address: "|sed 's/MAC Address: //'|sed 's/ (.*//g'`
NAMEMAC=`echo "${data}"|grep -E "MAC Address: "|sed 's/MAC Address: //'| sed 's|.*(||'|tr -d ')'`
;;
*"Host is up"*)
UP=`echo "${data}"|grep -E "Host is up"|sed 's/Host is //'|sed 's/ (.*//g'`
;;
esac

JSON=$JSON"$SEP\n{\"{#OUTIP}\":\"$OUTIP\", \"{#MAC}\":\"$MAC\", \"{#NAMEMAC}\":\"$NAMEMAC\", \"{#UP}\":\"$UP\"}"
SEP=", "
done
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON


вторая попытка

#!/bin/bash

# Получим переменную IP для подстановки
#IPDNS=`grep "nameserver" /etc/resolv.conf |tr -d 'nameserver'|grep -E '.5'|tr -d ' '`
# Выводим строки из файла resolv содержащие nameserver | убираем само слово nameserver | оставляем строку содержащую .5 | удаляем все пробелы
IP=`grep "nameserver" /etc/resolv.conf |sed 's/nameserver//'|grep -E '.5'|tr -d ' ' |awk -F'.' '{print $1,$2,$3}' OFS='.'`

#Сканирование сети
scan=`nmap -sn "${IP}".0/24`

IFS=$'\n'
JSON="{\"data\":["
SEP=""

# Цикл Перебор строк в переменную data
for data in $scan
do
# Обрабать строки
#echo "${scan}"
# Получаем IP построчно набираем 1 переменную с пустыми строками где не найдено совпадение
IP='\n '`echo "${data}"|grep -E "Nmap scan report for "|sed 's/Nmap scan report for //'`

# Получаем MAC и Имя
MACP='\n'`echo "${data}"|grep -E "MAC Address: "|sed 's/MAC Address: //'|sed 's/ (.*//g'`
NAMEMACP='\n'`echo "${data}"|grep -E "MAC Address: "|sed 's/MAC Address: //'| sed 's|.*(||'|tr -d ')'`

case "${data}" in
*report)
# Убираем пустые строки
OUTIP=`echo -e "${IP}"|sed '/^[ ]*$/d'`
;;
# *"MAC Address"*)
# MAC=`echo -e "${MACP}"|sed '/^[ ]*$/d'`
# NAMEMAC=`echo -e "${NAMEMACP}"|sed '/^[ ]*$/d'`
# ;;
# *"Host is up"*)
# UP=`echo "${data}"|grep -E "Host is up"|sed 's/Host is //'|sed 's/ (.*//g'`
# ;;
esac

JSON=$JSON"$SEP\n{\"{#OUTIP}\":\"$OUTIP\", \"{#MAC}\":\"$MAC\", \"{#NAMEMAC}\":\"$NAMEMAC\", \"{#UP}\":\"$UP\"}"
SEP=", "
done

#echo "${OUTIP}"
# Выводим результат в json data
JSON=$JSON"\n]}"
echo -e $JSON


Третья попытка
#!/bin/bash

# Получим переменную IP для подстановки
#IPDNS=`grep "nameserver" /etc/resolv.conf |tr -d 'nameserver'|grep -E '.5'|tr -d ' '`
# Выводим строки из файла resolv содержащие nameserver | убираем само слово nameserver | оставляем строку содержащую .5 | удаляем все пробелы
IP=`grep "nameserver" /etc/resolv.conf |sed 's/nameserver//'|grep -E '.5'|tr -d ' ' |awk -F'.' '{print $1,$2,$3}' OFS='.'`

#Сканирование сети
scan=`nmap -sn "${IP}".0/24`

IFS=$'\n'
JSON="{\"data\":["
SEP=""

# Цикл Перебор строк в переменную data
for data in $scan
do
# Обрабать строки
#echo "${scan}"
# Получаем IP построчно набираем 1 переменную с пустыми строками где не найдено совпадение
IP='\n'`echo "${data}"|grep -E "Nmap scan report for "|sed 's/Nmap scan report for //'| sed 's/[()]//g'`

# Получаем MAC и Имя
MACP='\n'`echo "${data}"|grep -E "MAC Address: "|sed 's/MAC Address: //'|sed 's/ (.*//g'`
NAMEMACP='\n'`echo "${data}"|grep -E "MAC Address: "|sed 's/MAC Address: //'| sed 's|.*(||'|tr -d ')'`

# Хост Доступен
UPP='\n'`echo "${data}"|grep -E "Host is up"|sed 's/Host is //'|sed 's/ (.*//g'`

#Убираем пустые строки где нет совпадения
OUTSTR=`echo -e "${IP}"|sed '/^[ ]*$/d'`
MACSTR=`echo -e "${MACP}"|sed '/^[ ]*$/d'`
NAMEMACSTR=`echo -e "${NAMEMACP}"|sed '/^[ ]*$/d'`
UPSTR=`echo -e "${UPP}"|sed '/^[ ]*$/d'`

# Собираем данные для одной строки
STR=$STR echo IP:"${OUTSTR}" MAC:"${MACSTR}" NAMEMAC:"${NAMEMACSTR}" UP:"${UPSTR}"|tr -d '\n'

JSON=$JSON"$SEP\n{\"{#OUTIP}\":\"$OUTIP\", \"{#MAC}\":\"$MAC\", \"{#NAMEMAC}\":\"$NAMEMAC\", \"{#UP}\":\"$UP\"}"
SEP=", "
done

red=`echo "${STR}"|sed 's/\IP:[A-Z|a-z|0-9]/\nIP:/g'`
echo "${red}"
# Выводим результат в json data
JSON=$JSON"\n]}"
#echo -e $JSON
Скачать
scan-seti3.1.zip
scan-seti3.1.zip
(1.22 КБ) 0 скачиваний
scan-seti-linux.jpg
scan-seti-linux.jpg

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 231
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

Сканирование Сети Скриптами

Сообщение Артём Мамзиков » Чт авг 27, 2020 16:15 #3

Вытаскиваем Логин пользователя из Spark на Windows

@echo off
color 1a

:: Текущий IP Хоста
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FIND /I "192.168.1"') do set IPDNS=%%a
Set IP=%IPDNS%

:: Определение версию Windows
::For /f "tokens=4" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName^|FIND /I "Windows"') do (
For /f "tokens=4,5" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName^|FIND /I "ProductName"') do (
if /i %%b==XP (goto :WindowsXP) else (if /i %%a==Vista (goto :Windows7) else if /i %%a==7 (goto :Windows7) else if /i %%a==8 (goto :Windows7) else if /i %%a==8.1 (goto :Windows7) else if /i %%a==10 (goto :Windows7) else (goto :end)))

:WindowsXP
:: Запрос содержание данной директории профилей пользователй, В файле spark.properties найти строку username=Логин
for /f "tokens=1 " %%c in ('dir /B "C:\Documents and Settings"') do (
for /f "tokens=1 " %%d in ('FINDSTR /I "username=[a-z]" "C:\Documents and Settings"\%%c\Spark\spark.properties') do (
:: Учетка пользователя спарк, Имя, IP Хоста
if %%d == %%d (for /f "tokens=2 delims==" %%e in ('echo %%d') do echo %%e %COMPUTERNAME% %IP%)
))
pause
goto:eof

:Windows7
:: Запрос содержание данной директории профилей пользователй, В файле spark.properties найти строку username=Логин
for /f "tokens=1 " %%c in ('dir /B C:\Users\') do (
for /f "tokens=1 " %%d in ('FINDSTR /I "username=[a-z]" C:\Users\%%c\AppData\Roaming\Spark\spark.properties') do (
:: Учетка пользователя спарк, Имя, IP Хоста
if %%d == %%d (for /f "tokens=2 delims==" %%e in ('echo %%d') do echo %%e %COMPUTERNAME% %IP%)
))
pause
goto:eof

:end

:: Автозапуск
::C:\>reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v LoginSpark /d C:\1.bat /f
:: Планировщик задач создание задачи
::SCHTASKS /Create /SC DAILY /tn "LoginSpark" /TR "'C:\1.bat'" /ST 10:01:00 /F
:: Уже готовая задача в XML делаем импорт (от Администратора)
::SCHTASKS /Create /tn "LoginSpark" /XML "%~dp0OLoginSpark.xml"
До вывода в одну строку
Показать
@echo off
color 1a

:: Текущий IP Хоста
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IPv4"^|FIND /I "192.168.1"') do set IPDNS=%%a
echo %IPDNS%

:: Текущее Имя Хоста
echo %COMPUTERNAME%

:: Определение версию Windows
::For /f "tokens=4" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName^|FIND /I "Windows"') do (
For /f "tokens=4,5" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName^|FIND /I "ProductName"') do (
if /i %%b==XP (goto :WindowsXP) else (if /i %%a==Vista (goto :Windows7) else if /i %%a==7 (goto :Windows7) else if /i %%a==8 (goto :Windows7) else if /i %%a==8.1 (goto :Windows7) else if /i %%a==10 (goto :Windows7) else (goto :end)))

:WindowsXP
:: Запрос содержание данной директории профилей пользователй, В файле spark.properties найти строку username=Логин
for /f "tokens=1 " %%c in ('dir /B "C:\Documents and Settings"') do (
for /f "tokens=1 " %%d in ('FINDSTR /I "username=[a-z]" "C:\Documents and Settings"\%%c\Spark\spark.properties') do (
:: Учетка пользователя спарк
if %%d == %%d (echo %%d)
)
)
pause
goto :end

:Windows7
:: Запрос содержание данной директории профилей пользователй, В файле spark.properties найти строку username=Логин
for /f "tokens=1 " %%c in ('dir /B C:\Users\') do (
for /f "tokens=1 " %%d in ('FINDSTR /I "username=[a-z]" C:\Users\%%c\AppData\Roaming\Spark\spark.properties') do (
:: Учетка пользователя спарк
if %%d == %%d (echo %%d)
)
)
pause
goto :end

:end

:: Автозапуск
::C:\>reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v LoginSpark /d C:\1.bat /f
:: Планировщик задач создание задачи
SCHTASKS /Create /SC DAILY /tn "LoginSpark" /TR "'C:\1.bat'" /ST 10:01:00 /F
:: Уже готовая задача в XML делаем импорт (от Администратора)
SCHTASKS /Create /tn "LoginSpark" /XML "%~dp0OLoginSpark.xml"
Скачать
Windows-Spark-Login.zip
Windows-Spark-Login.zip
(2.81 КБ) 0 скачиваний

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 231
Зарегистрирован: Вс фев 17, 2019 17:47
Репутация: 4
Откуда: Вологодская область
Контактная информация:

Сканирование Сети Скриптами

Сообщение Артём Мамзиков » Пт авг 28, 2020 15:37 #4

Вытаскиваем Логин пользователя из Spark на Linux

#!/bin/bash

# Запрашиваем папки в домашней папке home циклом
for dirp in $(ls -F /home|grep -E "*/")
do
# Ищем строку логина в файле подставляя папки пользователей|обрезаем начало оставляя логин (Не работает если 2 папки пользователя user user*)
LOGIN=$(grep -i "username=*" /home/"${dirp}".Spark/spark.properties|sed 's/username=//')
LOGIN="${LOGIN}"
done

# IP аддрес хоста
for ip in $(ip addr|grep -E "192.168.2*"|sed 's/inet //'|sed 's|/.*||g')
do
set ip="${ip}"
done

# Вывод Логина Имени IP Хоста
echo "${LOGIN}" $HOSTNAME "${ip}"

Ответить Вложения 5

Вернуться в «OCS INVENTORY»