Кто в тереме живет?...

 Автор: 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
-----------------------