Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #30, МАЙ 2003 г.

Flash Ping - ода интерфейсу

Владимир Егоров aka Dr.NET

Спецвыпуск Xakep, номер #030, стр. 030-054-1


(vme@front.ru) & ilich (ilich@atrus.ru)

Взялся я как-то раз пинговать всех и вся. Долго пинговал, вспотел аж. Да вот только устал я не столько от того, что трудно это занятие, а от того, что не особо красивое с эстетической точки зрения. Интерфейс не катит, короче говоря. И задумал я тогда, что неплохо было бы слегка пинг приукрасить.

Flash MF

Красивые штучки в нете, как это общеизвестно, в большинстве своем красочные и отнюдь не статичные. А что же, как не Flash, скажешь ты, может справиться с такими потребностями? Вот и я про то же. Грузим прогу.

На самом деле, флешка в нашем случае делать практически ничего не будет. Вся суть ее существования сводится к организации посылки запроса, получении ответа и вывода его пред твои светлы очи.

Все по порядку. Для запроса позарез надо знать, кого пингуем :). Это я тебе точно говорю. Так вот, значит, нужно текстовое поле, у которого в параметрах текста указаны "Input text" и имя переменной (допустим, "addr"). В это поле можно, и даже нужно, будет вводить IP-адрес или имя хоста пингуемого.

Далее нужна какая-нибудь пимпа, ответственная за начало процесса (в принципе, можно не париться с пимпой, а отследить нажатие Enter'a - будет более похоже на виндовский пинг). Рисование кнопки доверяю всецело тебе, а покамест расскажу тебе про код, который в нее следует запихнуть. Код:

on(press){

link="http://localhost/handler/ping.ashx?address="+addr;

_root.getURL(link,_blank);

_root.f=1;

}

При нажатии мы формируем строку урла, где обращаемся к некоторому "ping.ashx" с некоторым параметром. Хотя этот параметр не такой уж некоторый. Это не что иное, как наша строка с IP-шником. Переменная "f" нужна, чтобы замять чуть-чуть время, ибо ответ получится не сразу.

Тянуть время и выдавать ответ будем через клип. Он не обязательно должен быть виден во время проигрывания, в него просто достаточно вставить маленький скриптик:

onClipEvent(enterFrame){

if(_root.f!=0){

_root.f=_root.f++

};

if (_root.f>25) {

loadVariables("http://localhost/handler/output.txt");

}

}

onClipEvent(data){

if(p=="Неверный адрес!") {_root.output="Неправильный формат адреса"}

else{

_root.output=p;

}

_root.f=0;

}

Первым делом по событию "enterFrame" (каждый кадр) к "f" плюсуется единица. Когда переменная перевалит за 24 (при 12 кадрах в секунду это 2 секунды - нам хватит), грузим переменные их текстовика. Когда загружаются переменные, проверяем их и, если все OK, выводим в текстовое поле "output".

Не забудь, кстати, создать это самое динамическое поле и дать ему нужное имя.

МегаКод

Используем для наших целей так называемый WebHandler, который вызывается по HTTP с единственным параметром GET - адресом тестируемого узла. После обращения этот WebHandler будет создавать текстовый файл с записанным в него выводом программы ping.exe или сообщением об ошибке. Создаем уже известный нам файл "ping.ashx" (расширение *.ashx соответствует .NET WebHandler'у). В его начало пишем строку <%@ WebHandler Language="C#" Class="Ping"%>, которая говорит, что собственно содержит этот файл.

Содержание  Вперед на стр. 030-054-2