Их разыскивают бойцы 139-го порта!

Xakep, номер #037, стр. 037-071-2


FindResult := IdWhoIs.WhoIs(Edit1.Text);

В качестве единственного параметра этого метода я передаю содержимое строки ввода Edit1. Результат поиска сохраняется в переменной FindResult. Хотя результат состоит из многих строк, в переменной он выглядит в виде одной длинной строки, в которой разделителем для строк является шестнадцатиричный символ #10. Чтобы текст выглядел наглядно, мы должны отформатировать это содержимое переменной FindResult.

Для форматирования я запускаю цикл:

while Length(FindResult) > 0 do

begin

end;

Как это работает? Пока длина (Length) строки, содержащейся в переменной FindResult, больше нуля, выполнять код, расположенный между begin и end. Внутри цикла я в первой строчке кода ищу первый символ #10 в строке переменной FindResult с помощью Pos (#10, FindResult). Результат сохраняется в переменной iPos. Например, если в FindResult находится строка, в которой десятый символ это #10, то в переменную iPos попадет цифра 10.

В следующей строке кода (Line:=Copy(FindResult, 1, iPos - 1)) я копирую текст в переменную Line из переменной FindResult, начиная с 1-го символа по символ #10. Этим я выделяю первую строку текста. После этого я со смелой душой могу добавить этот результат в мой компонент TMemo с помощью команды ResultsMemo.Lines.Add(Line).

В последней строке цикла я удаляю уже выбранный мною текст с помощью команды Delete(FindResult, 1, Length(Line)+1). Теперь в переменной FindResult нет текста, который я уже вытащил из нее и добавил в TMemo.

После этого произойдет проверка; если длина строки в переменной FindResult больше нуля, то продолжить цикл. Если переменная FindResult пустая, то цикл прекратит работу.

Напутствие

Что такое символ #10? Это код символа перевода каретки (перехода на новую строку), который используется в ОС семейства *nix. В окнах принято использовать пару кодов #13 и #10 (конец строки и перевод каретки). Если ты пишешь только под *nix, то весь код по форматированию результирующего текста тебе не нужен. Ты мог просто написать

ResultsMemo.Text:=FindResult;

В окнах такой прикол не пройдет, потому что текст в компоненте TMemo получится неформатированным и просто противным для восприятия. Поэтому мне пришлось немного помучиться. В любом случае мы с тобой должны писать межплатформенный код, который без проблем должен переходить от Linux к Windows и тем более обратно. Поэтому ручное форматирование тут достаточно уместное занятие.

Coding complete

Простенькая утила для работы с сервисом WhoIs готова. Теперь тебе не надо заходить на какой-нибудь сайт в Инете, чтобы выяснить инфу о каком-то имени домена. Ты просто запускаешь свою прогу, и она сама обращается куда надо и показывает тебе инфу в удобном для восприятия виде. Конечно же, ты мог бы воспользоваться творением другого программера, но как приятно юзать свои собственные проги.

На сегодня это все, что я хотел тебе рассказать. Результат работы программы ты можешь увидеть на скрине где-то рядом с этим текстом. Я думаю, что утила получилась достаточно удобная и быстрая. Ты же можешь добавить в нее возможность изменять имя сервера и порта, с которого нужно получать информацию о разыскиваемом домене.

Назад на стр. 037-071-1  Содержание  Вперед на стр. 037-071-3