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

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

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

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


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

Здравствуй, дружище! Знаешь ли ты, что именуется термином "ping"? Ну конечно же знаешь! А знаешь ли, что такое Web-страница? Вижу, ты отчасти смутился :)... Ну так вот, а о том, что эти две вещи можно неплохо совместить, интегрируя одну в другую, ты наверняка и не подозревал! Для таких случаев и в казематах НИИ имени Кащенко (да-да, есть и такой :))) разработаны мы - Spez-Crew то есть.

Постановка вопроса

Итак, наша с тобой задача - перенаправить стандартный вывод программы ping.exe вместо консоли на Web-страницу. Зачем это может быть нужно, решишь сам на досуге за чашкой пива, а я лишь скажу, что этот пример в любом варианте полезен, ибо по этому принципу можно перенаправить в Web-страницу вывод практически любой консольной проги. А это тебе не хухры-мухры! Так что дальше все зависит только от твоей фантазии и ловкости твоих конечностей, то есть как всегда :).

Пример я написал на моем любимом C# в среде ASP.NET. Если тебе на прошлой неделе только годик стукнуло, то объясню, что для того, чтобы все написанное здесь работало, тебе нужно установить Microsoft.NET Framework. А это штука такая, что не на всяком диске имеется :).

Сначала создаем файл с расширением *.aspx и записываем туда между символами "<%@" и "%>" директиву ASP.NET "Import Namespace=". После знака равенства в кавычках пишем имена тех пространств имен, которые потребуются нам для написания этой паги. Это нужно для того, чтобы, например, вместо названия класса "System.Text.RegularExpressions.Regex" писать просто "Regex". Короче говоря, это настолько удобно, что ведет к практически полному расслаблению твоих членов во время написания кода :). Нам нужно будет таким образом импортировать четыре пространства имен: "System.Diagnostics", "System.Text.RegularExpressions", "System.IO" и "System.Net".

Теперь вбиваем известный с пеленок заголовок HTML и пишем тело документа между <body> и </body>. Для отправки запроса на сервер создаем форму с атрибутом runat="server".

<%@ Import Namespace="System.Diagnostics"%>

<%@ Import Namespace="System.Text.RegularExpressions"%>

<%@ Import Namespace="System.IO"%>

<%@ Import Namespace="System.Net"%>

<html>

<head>

<title>Ping</title>

<meta http-equiv="Content-Type" content="text/html;charset=windows-1251">

<script language="C#" runat="server">

protected void do_Ping(object sender, EventArgs e)

{

Regex rx = new Regex(@"(\d{1,3}.){3}(\d{1,3}){1}");

if (rx.Match(addr.Text).Success)

try

{

IPAddress.Parse(addr.Text);

}

catch (FormatException)

{

l3.Text = "Неверный IP-адрес!";

return;

}

Process p = new Process();

p.StartInfo.UseShellExecute = false;

p.StartInfo.RedirectStandardOutput = true;

p.StartInfo.FileName = "d:\\winnt\\system32\\ping.exe";

p.StartInfo.Arguments = addr.Text+" -n 1";

p.Start();

l2.Text = p.StandardOutput.ReadToEnd();

p.WaitForExit();

p.Dispose();

}

</script>

</head>

<body>

<form id="frm1" method="post" runat="server">

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