Кто в тереме живет?...
Автор: Andy Bogdanov
Источник: https://unixdoc.ua-i.net/mirrors/unix.stat.burnet.ru/rexx/scanip.html
Мне частенько надо было выяснить кто живет по какому-то адресу. Конечно, адреса меняются - но не настолько быстро... Поэтому я написал этот скриптик, узнал блок адресов для нашего провайдера, запустил на ночь скрипт и теперь если мне надо узнать кто на каком адресе сидит - просто смотрю логи. Скрипт с минимальными переделками пойдет и под виндами и под юниксом. Можно было обойтись без временных файлов - но как обычно моя лень меня победила :)
----------------------
/* сканирование сети на предмет ответа */
/* by Andy Bogdanov. Rexx/2 27.05.1999 */
/* */
/* Предупреждение! */
/* */
/* Это не хакерский инструмент! Эта маленькая программулина */
/* служит одним из инструментов в моем наборе для проверки */
/* локальной сети. Как вы ее будете использовать - это ваше */
/* дело... У меня нет никакого желания отвечать за ваши грешки... */
/* Для чего этот скрипт предназначен? Для сканирования блока */
/* IP-адресов (сети) и вывода результатов в лог-файл. */
/* При запуске вы все поймете сразу :) Если у вас поставлены */
/* англоязычные сетевые утилиты - надо будет заменить в трех */
/* местах строчки на соответсвующие английские. Мне просто было */
/* лень их добавлять :) у меня и так все работает... */
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs
arg IPaddress
if (IPaddress='') | (LastPos('.',IPaddress) \= Length(IPaddress)) | (LastPos('.',IPaddress)=0) then errARG()
IPbad = IPaddress
do i=1 to 3
if IPbad ='.' then errARG()
if IPbad ='..' then errARG()
IPbad = DelStr(IPbad,i,Pos('.',IPbad,i)-i)
end
if IPbad \='...' then errARG()
'echo off'
'del scanIP'IPaddress'log'
do i=0 to 255
IP=IPaddress''i
say 'Scanning IP: 'IP
'ping 'IP' 10 3 >>temp.log'
do while Lines('temp.log') \=0
lin = LineIn('temp.log')
if (LastPos('PING 'IP,lin) > 0) then Call CharOut 'scanIP'IPaddress'log',IP' - '
if (LastPos('100% пакетов потеряно',lin) > 0) then Call LineOut 'scanIP'IPaddress'log','NO'
if (LastPos('байтов от ',lin) > 0)then
do
Call CharOut 'scanIP'IPaddress'log','YES'
'host 'IP' >>temp1.log'
do while Lines('temp1.log')
lin1 = LineIn('temp1.log')
if (LastPos('имя',lin1) > 0) then Call LineOut 'scanIP'IPaddress'log',' - 'lin1
else
do
lin1 = Word(lin1,3)
Call LineOut 'scanIP'IPaddress'log',' - 'lin1
end
end
call Stream 'temp1.log','c','close'
'del temp1.log'
leave
end
end
call Stream 'temp.log','c','close'
'del temp.log'
end
call Stream 'scanIP'IPaddress'log','c','close'
'echo on'
exit
errARG: procedure
say ''
say 'Bad argument!'
say 'Example: scanIP.cmd 192.168.3.'
exit
return
-----------------------