
Kylix. Сканер портов заказывали?
Xakep, номер #034, стр. 034-073-1
Horrific (smiandr@mail.ru) www.x-c-r.com
Ко мне почти каждый день идут письма с просьбой выслать исходники какой-нибудь сетевой проги. Оно и понятно, потому что сетевой хак интереснее и адреналинистее (любим же мы коверкать русский язык :). Чаще всего народ просит порт-сканеры, поэтому сегодня я расскажу тебе, как самому создать это чудо природы.
Начнем-сссс...
Постоянные читатели уже должны знать, как самому написать порт-сканер. Год назад, в спецвыпуске "Кодинг" я уже рассказывал об этом чуде. Тогда я написал порт-сканер с использованием WinAPI. В этом ничего плохого нет, просто в Linux нет WinAPI, поэтому тот пример нельзя так просто перенести на Kylix.
Продвинутые должны знать, что работа с сетью в Linux и Win построена одинаково на использовании сокетов. Но в Linux - это нормальные сокеты, а в Win - это WinSocks. Они не совместимы между собой, хотя и имеют много общего в названиях функций.
Поэтому я решил сегодня написать порт-сканер на основе компонентов. Такой сканер скомпилируется в Linux или Win без малейшего изменения исходника. А работать он будет даже быстрее, чем синхронные сокеты.
Песни и пляски
Запусти Kylix. Брось на форму одну кнопку (имя по умолчанию Button1), два компонента TLabel (с именами Label1 и Label 2) и два компонента TEdit (c именами Edit1 и Edit2). Теперь у кнопки поменяй свойство Caption на "Scan", у Label1 на "Start Port", а у Label2 на "End Port".
Если ты все сделал правильно, то у тебя должно получиться нечто похожее на рисунок 1. По нажатию кнопки мы будем сканировать порты, начиная от номера, указанного в Edit1, по номер, указанный в Edit2.
Теперь нужно бросить на форму самый важный компонент - TCPClient. В нем дядя Борман уже реализовал для нас все необходимые функции для работы с сокетами и, конечно же, сканирования.
Прежде чем приступить к кодингу, давай еще немного улучшим форму. Установи у Edit1 свойство Text в "1", а у Edit2 в "2". Этим мы задаем значения по умолчанию для начального и конечного портов. И, наконец, брось еще TMemo. Желательно растянуть ее на всю оставшуюся свободную часть формы. Здесь мы будет отображать состояние сканирования. В итоге у тебя должно получиться нечто похожее на рисунок 3.
Теперь с оформлением покончено, пора переходить к кодингу. В принципе, код достаточно легкий и помещается всего-то в 8 строчек. Так что скоро ты увидишь свой сканер в действии.
Шкодинг
Для начала создадим событие OnClick для кнопки. Это событие отлавливает сообщение "нажатие на кнопку". Обработчик можно создать двумя способами:
1. Выделить кнопку, перейти в объектный инспектор и дважды щелкнуть по строке OnClick.
2. Просто дважды щелкнуть по кнопке. По умолчанию двойной клик по компоненту создает для него обработчик события OnClick.
Выбирай то, что тебе по душе, и двигаемся дальше.
Как я уже сказал, по нажатию этой пимпы мы будем сканировать порты. Вот и давай напишем сюда этот текст. Перепиши все, что написано во врезке "Обработчик события OnClick". Комментарии переписывать не обязательно, я их вставил для большей ясности происходящего. Как только перепишешь, можешь продолжить читать дальше, я объясню, что здесь происходит.

















































































































