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

Ping Master - трансляция cmd2html на ASP

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

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


Сделаем это немедленно. Для этого снова на помощь приходят регулярные выражения.

Создаем новый экземпляр класса "Regex" - класса для работы с регулярными выражениями. Нам нужно отделить IP-адреса во вводимых данных. Для этой цели подходит регулярное выражение (\d{1,3}.){3}(\d{1,3}){1}, которое записываем как параметр при вызове конструктора класса "Regex". Далее ищем соответствие формату (метод "Match") и, если оно найдено (то есть введенный текст - IP-адрес), проверяем правильность IP-адреса, перехватывая исключение при вызове метода "IPAddress.Parse(string addr)". Этот метод преобразует строковую запись IP-адреса в экземпляр класса "IPAddress". Если при этом строка "addr" имеет неправильный формат, то возникает исключение "FormatException", и мы записываем в метку l3 сообщение об ошибке и прекращаем выполнение процедуры.

Ну а если все нормально, то приступаем к непосредственному пингованию. Для этого сначала будем использовать стандартную виндовскую прогу ping.exe, находящуюся в каталоге "%SystemRoot%\system32\". Наша цель состоит в том, чтобы запустить данный программный продукт и перенаправить его вывод с консоли (с экрана) на нашу страницу. Чтобы это сделать, создаем новый экземпляр класса "Process" (это будет новый процесс, который мы собираемся запустить).

Справка дня: класс "Process" принадлежит к пространству имен "System.Diagnostics". Пишем: Process p = new Process();. Далее надо задать свойства процесса и перенаправить его вывод. Свойству "p.StartInfo.UseShellExecute" присваиваем значение "false". Это нужно для того, чтобы не использовать шелл операционной системы для запуска нашего процесса. Следующее свойство - "p.StartInfo.RedirectStandardOutput" - указывает, перенаправить или нет вывод данного процесса со стандартного в какой-нибудь другой. Даже ежу по пьяни очевидней ясного, что нам нужно присвоить этому свойству значение "true".

Свойство "p.StartInfo.FileName", как несложно понять, задает имя файла того приложения, которое мы хотим запустить. Ну и, наконец, свойству "p.StartInfo.Arguments" присваиваем значение адреса плюс параметр "-n 1". Это параметр пинга, который устанавливает число посылаемых эхо-запросов, в данном случае будет послан один запрос. После этого запускаем процесс с помощью метода "p.Start()" и записываем в метку l2 вывод программы "ping", который считываем при помощи метода "p.StandardOutput.ReadToEnd()".

После этого закрываем процесс, смело юзая метод "p.WaitForExit()". Хотя в данном случае делать это не обязательно (поскольку процесс будет закрыт автоматически сразу после завершения приема ответа на эхо-запрос), я рекомендую все же это делать для других приложений, дабы не засорять и без того не резиновую память своей машины. Ибо... кому щас легко?! Наконец, надо освободить ресурсы, занятые объектом "p", с помощью метода "Dispose()". Опять же, делать это не обязательно, но полезно. Вот и все с обычным пингом.

Назад на стр. 030-050-2  Содержание  Вперед на стр. 030-050-4