Создаем собственный сканер IP адресов

Создаем собственный сканер IP адресов Примеры скриптов и макросов для Word и WSH

Всем привет, с вами автор блога scriptcoding.ru. В этой статье мы рассмотрим, как можно программным путем создать собственный сканер IP адресов.

IP сканер – это, как правило, некая программа, которая позволяет определить наличие работающей службы или сервиса в заданном диапазоне. IP сканеры, как правило, используются для анализа определенной сети, например, можно просканировать изнутри локальную сеть, или диапазон ІР адресов, выделенных провайдеру. Прежде чем приступить к рассмотрению данной статьи, давайте посмотрим, что именно в ней будет рассмотрено:

  • Вкратце я расскажу про IP адреса.
  • Познакомимся с ActiveX компонентами WindowSystemObjectи XMLHTTP.
  • Рассмотрим исходный программный код скрипта для сканера IP адресов на языке программирования JScript и проведем его анализ.
  • В конце, я немного затрону тему «Сканер портов«.

И так, давайте продолжим…

IP сканер сети — немного про интернет адреса…

Прежде чем приступать к написанию сканера IP адресов, давайте немного вспомним теорию. В четвертой версии ІР протокола (IPv4) каждый адрес состоит из 4 байт (1 байт равен 8 битам), в простом варианте это 4 десятичных числа (от 0 до 255), которые разделенные между собой точками. Если вспомнить уроки информатики, то увидим, что 2 в 8 степени ровно 256, так как у нас 4 байта (4 по 8 бит ровно 32 бита), то общие число возможных комбинаций ровно: 2 в 32 степени – 4294967296 комбинаций. Так как количество вариаций не бесконечно, то сейчас уже используется версия IPv6. Но, старые ІР никто не отменял, поэтому и сценарий будет рассчитан на версию IPv4. Более подробно, данную тему и работу интернета в целом я рассмотрел в статье — «Как работает интернет»

Сканер IP адресов — пакуем сумку с компонентами

Для работы нашего сценария нам понадобятся всего два компонента.

  • XMLHTTP – позволит нам отправлять HTTP запросы на заданный ІР, если ошибки не возникнет (то есть, скрипт получит ответ на отправленный запрос), то мы заносим данный хост в список.
  • WindowSystemObject – данный компонент позволяет создавать форму для сценария Windows Script Host, плюс, в нем есть одно преимущество – метод CreateIPAddress который позволит добавить на форму форматированные поля для ввода ІР.

Сканер IP адресов в сети – приступаем к программированию

Создание сканера ip адресов в сети

Давайте для начала посмотрим на программный код в общем, а потом его разберем. Открываем редактор Notepad++ и прописываем строки кода, файл сохраним под именем ip_scaner.js.

// ***********************************************************// IP сканер сети// ip_scaner.js// ***********************************************************var wso, f, MSG, ListBox, IPAddress1, IPAddress2, Button;// Создаем экземпляр объекта WindowSystemObjectwso =new ActiveXObject("Scripting.WindowSystemObject"); // Задаем начальные размеры и отступыf = wso.CreateForm(0,0,0,0);with(f){//Задаем через свойства ширину и высоту ClientWidth =500; ClientHeight =400;//Центрируем форму CenterControl();//Заголовок окна Text ="Сканер ip адресов в сети"//нельзя менять размеры SizeGrip =false;//нельзя развернуть форму MaximizeBox =false;} MSG="Сайт: scriptcoding.ru nАвтор:Владимир Баталий nПоиск производится по последним двум байтам";f.TextOut(10,10,MSG); // Компонент списокListBox = f.CreateListBox(5,80,300,300);f.TextOut(320,80,"Начальный ІР адрес:"); // Компонент для ввода ІРIPAddress1 = f.CreateIPAddress(320,100,150,25);IPAddress1.Text="195.225.228.0";f.TextOut(320,140,"Конечный ІР:"); IPAddress2 = f.CreateIPAddress(320,160,150,25);IPAddress2.Text="195.225.228.178"; Button = f.CreateButton(320,200,75,25,"Поиск");// Вызов функции searchIP после нажатия на кнопкуButton.OnClick= searchIP; //метод делает форму видимойf.Show();wso.Run(); //Собственно, функция определяющая работу IP сканераfunction searchIP(){var timer=0, ip_list="", i, j, host, inc, fromIP, toIP, iFrom, iTo, jFrom, jTo, browser;Wscript.Echo("Начинаем сканирование!!!");//Преобразуем начальный IP в массив, разделителем является точкаromIP=IPAddress1.Text.split(".");//Преобразуем конечный IP в массив, разделителем является точка toIP=IPAddress2.Text.split(".");//Переменная ІР хранит первые два байта IP=fromIP[0]+"."+fromIP[1]; iFrom=fromIP[2];//Начальный третий байт iTo=toIP[2];//Конечный третий байт jFrom=fromIP[3];//Начальный четвертый байт jTo=toIP[3];//Конечный четвертый байт  browser =new ActiveXObject("MSXML2.XMLHTTP");  //Цикл, в котором IP сканер сети перебирает адресаfor(i=iFrom; i<=iTo; i++){for(j=jFrom; j<=jTo; j++){host=IP+"."+i+"."+j;browser.open("GET","http://"+host,false);timer++;try{inc=0;browser.send(null);}catch(e){if(e!=0){ inc=1;}}if(inc==0){ip_list+="n";//Добавляем найденный хост в списокListBox.Add(host);ip_list+=host;//Записываем список хостов в файлwrite_data(ip_list);}if(timer==50){WScript.echo("IP сканер прошел 50 адресов, нажмите ОК для продолжения, текущий IP: "+host);timer=0;}}} WScript.echo("IP сканер сети завершил работу!!!!");} //Функция, отвечающая за запись списка в файлfunction write_data(data){var FSO=WScript.CreateObject("Scripting.FileSystemObject");var F=FSO.CreateTextFile("ip_scan.txt",true); F.WriteLine(data);F.Close();}

Начнем с конца, в нашем сценарии есть переменная timer, значение которой обнуляется после каждых найденных 50 хостов, при желании вы можете ее убрать, она является счетчиком для информирования пользователя о том, что уже пройдено 50 адресов. Ошибка обрабатывается с помощью конструкции try … catch. Перед отправкой запроса переменная inc ровна 0, если ошибка возникнет, то inc присваивается 1. Как вы уже догадались, список будет наполняться только тогда, если inc ровно 0. Сканер IP адресов в сети будет записывать список с результатом работы в файл ip_scan.txt и в текстовое поле на форме. Сам скрипт использует два цикла для перебора диапазона, то есть, третий и четвертый байт.

Теперь рассмотрим немного сам программный код, точнее его синтаксис. Обратите внимание, что для подключения внешних классов мы использовали как внутреннюю функцию ActiveXObjectязыка JSCRIPT, так и метод CreateObjectкласса WScript, в данном случае особой разницы нет. Обработка начальных и конечных байт происходит в цикле FOR, в котором задается диапазон для начального и конечного четвертого и третьего байта. Текстовый файл будет создан в текущем каталоге с помощью метода CreateTextFile класса FileSystemObject.

Сканер IP адресов и портов в сети

сканер IP - внешний вид

Скачать архив с примером

Хотелось бы обратить ваше внимание, что на одном ІР-шнике может работать несколько служб (сервисов или приложений, называйте как хотите), каждая будет использовать свой порт (прописывается в конце после двоеточия), если вы просто введете айпишник в браузере, то фактически отправите запрос на 80 порт, но, как я сказал, на других портах тоже что то может быть. Наш IP сканер адресов фактически отправляет HTTP запрос на 80 порт – работу с HTTP протоколом можно изучить в статье «Штурмуем протокол HTTP — методы, заголовки и запросы«. Для анализа остальных портов я в следующей статье напишу пример сканера портов, поэтому подписывайтесь на новые стать, что бы быть всегда в курсе и всегда первым, удачи вам.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий