|
|
Анализ логов веб сервера и представление статистики посещаемости веб сайта посредством AwStats | phpMyAdmin - веб интерфейс для управления сервером MySQL |
|
|
Cистемные сетевые утилиты через интерфейс Wordpress (ping, whois, dig и т.д.). Простые PHP скрипты
Понадобилось мне как-то дать возможность пользователям локалки, сидящих естественно, под Win, использовать всякие dig, whois, traceroute… Давать всем подряд SSH доступ на роутер - нет смысла. Хотя бы даже потому, что многие просто не знают что такое командная строка. Выход нашелся просто. На внутреннем сайте этой самой локалки наваял на скорую руку странички буквально в несколько строк. Вставил в них элементарные скрипты на PHP, которые производят передачу параметров запроса $_POST к программе в системе, а потом выводят на страницу результаты того, что ответила команда.
Оговорюсь сразу: в целях безопасности эти скрипты лучше использовать только в личных целях или же для ограниченного числа людей, которым Вы доверяете (например, нескольким пользователям в локальной сети). На весь мир лучше эти страницы не демонстрировать. По этой причине и я не стану показывать здесь демо-страницу.
Кроме этого, Вам понадобится Unix подобная ось и, в зависимости от того, какими утилитами собираетесь пользоваться, соответствующее ПО на самом сервере. Мне понадобились: ping, traceroute, dig, nslookup и whois. Уточним пути, по которым программы установлены в системе.
$ which ping traceroute dig nslookup whois /sbin/ping /usr/sbin/traceroute /usr/bin/dig /usr/bin/nslookup /usr/bin/whois
Все эти программы должны быть с такими правами, чтобы их мог выполнять пользователь от имени которого работает Apache (у меня это www).
-r-sr-xr-x 3 ноя 2005 /sbin/ping -r-xr-xr-x 3 ноя 2005 /usr/bin/dig -r-xr-xr-x 3 ноя 2005 /usr/bin/nslookup -r-xr-xr-x 3 ноя 2005 /usr/bin/whois -r-sr-sr-x 3 ноя 2005 /usr/sbin/traceroute
Права соответствуют? Отлично! Вот примеры самих скриптов.
dig
<!-- DIG PHP START HERE -->
<!-- - сначала сделаем форму ввода -->
<form action="" method="POST" align="center">
$ dig
<select name="what">
<option value="ANY">ANY</option>
<option value="A">A</option>
<option value="MX">MX</option>
<option value="NS">NS</option>
<option value="PTR">PTR</option>
<option value="CNAME">CNAME</option>
<option value="HINFO">HINFO</option>
<option value="SOA">SOA</option>
<option value="TXT">TXT</option>
</select>
<strong>@</strong>
<input type="text" name="ns" value="localhost" size=10>
<input type="text" name="domain" size=25 value="">
<input type="submit" value="Send">
</form>
<!-- теперь собственно сам обработчик php -->
<?php
if ($_POST["domain"])
{
echo("<PRE>");
$what=$_POST["what"];
$domain=trim($_POST["domain"]);
$ns=trim($_POST["ns"]);
if($ns!="")
{
if (preg_match("/^[a-zA-Z0-9\.\-]*$/",$ns))
{
$ns="@".$ns;
}
else
{
die("Вы неверно указали адрес DNS сервера!");
};
};
if (preg_match("/^[a-zA-Z0-9\.\-]*$/",$domain))
{
if (preg_match("/^[a-zA-Z0-9\.\-]*$/",$what))
{
passthru("/usr/bin/dig $domain $what $ns 2>&1");
}
else
{
echo("Вы делаете неверный запрос!");
}
}
else
{
echo("Неверный ввод!");
}
echo("</PRE>");
}
?>
<!-- DIG PHP END HERE -->
ping
<!-- PING PHP START HERE -->
<form action="" method="POST" align="center">
$ ping -c 4
<input type="text" name="domain" size=30 value="">
<input type="submit" value="Ping">
</form>
<?php
if ($_POST["domain"])
{
echo("<PRE>");
$domain=trim($_POST["domain"]);
if (preg_match("/^[a-zA-Z0-9\.\-]*$/",$domain))
{
passthru("/sbin/ping -c 4 $domain 2>&1");
}
else
{
echo("Неверный ввод!");
}
echo("</PRE>");
}
?>
<!-- PING PHP END HERE -->
whois
<!-- WHOIS PHP START HERE -->
<form action="" method="POST" align="center">
$ whois -h
<select name="host">
<option value=""></option>
<option value="whois.com.ua">whois.com.ua</option>
<option value="whois.ripn.net">whois.ripn.net</option>
<option value="whois.ripe.net">whois.ripe.net</option>
<option value="whois.internic.net">whois.internic.net</option>
</select>
<input type="text" name="domain" size=25 value="">
<input type="submit" value="Send">
</form>
<?php
if ($_POST["domain"])
{
echo("<pre>");
$host=$_POST["host"];
$domain=trim($_POST["domain"]);
if ($host!="")
{
$host="-h '".$host."'";
}
echo($host."\n");
if (preg_match("/^[a-zA-Z0-9\.\-]*$/",$domain))
{
passthru("/usr/bin/whois $host $domain 2>&1");
}
else
{
echo("Неверный ввод!");
}
echo("</pre>");
}
?>
<!-- WHOIS PHP END HERE -->
nslookup
<!-- NSLOOKUP SCRIPT START HERE -->
<form action="" method="POST" align="center">
$ nslookup -q=
<select name="what">
<option value="ANY">ANY</option>
<option value="A">A</option>
<option value="MX">MX</option>
<option value="NS">NS</option>
<option value="PTR">PTR</option>
<option value="CNAME">CNAME</option>
<option value="HINFO">HINFO</option>
<option value="SOA">SOA</option>
<option value="TXT">TXT</option>
</select>
<input type="text" name="domain" size=25 value="">
<input type="text" name="ns" value="localhost" size=10>
<input type="submit" value="Send">
</form>
<?php
if ($_POST["domain"])
{
echo("<pre>");
$what=$_POST["what"];
$domain=trim($_POST["domain"]);
$ns=trim($_POST["ns"]);
if($ns!="")
{
if (!preg_match("/^[a-zA-Z0-9\.\-]*$/",$ns))
{
die("Вы неверно указали имя DNS сервера!");
};
};
if (preg_match("/^[a-zA-Z0-9\.\-]*$/",$domain))
{
if (preg_match("/^[a-zA-Z0-9\.\-]*$/",$what))
{
passthru("/usr/bin/nslookup -q=$what $domain $ns 2>&1");
}
else
{
echo("Неверный ввод!");
}
}
else
{
echo("Неверный ввод");
}
echo("</pre>");
}
?>
<!-- NSLOOKUP SCRIPT END HERE -->
traceroute
<!-- TRACEROUTE PHP START HERE -->
<form action="" method="POST" align="center">
$ traceroute -n -m 15
<input type="text" name="domain" size=30 value="">
<input type="submit" value="Send">
</form>
<?php
if ($_POST["domain"])
{
echo("<pre>");
$domain=trim($_POST["domain"]);
if (preg_match("/^[a-zA-Z0-9\.\-]*$/",$domain))
{
passthru("/usr/sbin/traceroute -n -m 15 $domain 2>&1");
}
else
{
echo("Неверный ввод");
}
echo("</pre>");
}
?>
<!-- TRACEROUTE PHP END HERE -->
Что касается traceroute - не делайте значение -m слишком большим. Оно указывает максимальное количество хопов. Дело в том, что если заданный в $domain хост будет недоступен, ну или по каким-то причинам до него будут идти "звезды", то выполнение скрипта затянется. Результаты работы скрипта не будут отображены, пока он не закончит свое выполнение. Traceroute без ключа -m может по-умолчанию пройти максимум 64 хопа. Ждать прийдется ооочень долго. К тому же это лишняя нагрузка на сервер. По аналогии с этими скриптами можно в принципе реализовать использование любой системной команды. Только это далеко не самым лучшим образом скажется на защищенности сервера. Потому повторяю еще раз: давайте доступ к использованию этих инструментов только ограниченному числу людей, которым Вы доверяете.
Как вставить эти скрипты в шаблон Wordpress
Очень просто. Для каждой отдельной утилиты заготовим отдельный файл page.php, который является шаблоном статической страницы темы оформления Wordpress. Пример для создания страницы с утилитой whois.
$ cd sitefolder/wp-content/themes/$MY-WP-THEME/ $ cp page.php page-whois.php
Открываем page-whois.php в текстовом редакторе и в самом начале файла пишем такое заглавие:
<?php /* Template Name: "Whois Page" */ ?>
А дальше просто вставляем приведенный выше PHP код для вызова whois в тело page-whois.php после функции
<?php the_title(); ?>
Теперь:
- Сохраняем файл, заливаем его обратно на сервер в папку с файлами темы.
- Проверяем права.
- Заходим в админку Wordpress, переходим "Создание новой записи" -> "Создание страницы".
- Создаем новую страницу, озаглавливаем ее, присваиваем пермалинк и т.д. в общем делаем все что нужно. Самое главное: выбираем в выпадающем меню "Шаблон страницы" наш шаблон. В данном случае он будет называться "Whois Page". По желанию, здесь же можно вставить какой-то текст, который будет отображен на странице вместе с формой Whois.
- Сохраняем страницу и пользуемеся.
По аналогии поступаем так же и с другими скриптами. Для каждого создаем свой отдельный page-$UTIL.php, и ручками вставляем код.
Ключевые слова
dig | net tools | nslookup | php | php script | system | traceroute | whois | Wordpress | пинг | сетевые утилиты | скрипты



Комментарии (4) к публикации “Cистемные сетевые утилиты через интерфейс Wordpress (ping, whois, dig и т.д.). Простые PHP скрипты”