Переход к предыдущей публикации Анализ логов веб сервера и представление статистики посещаемости веб сайта посредством AwStats phpMyAdmin - веб интерфейс для управления сервером MySQL Переход к следущей публикации

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

Воскресенье, 2 марта, 2008 10:47:31 EET

Исправления от 17 марта, 2009 00:22:22

Выделенные сервера дешевле обычного хостинга

Cистемные сетевые утилиты через интерфейс Wordpress (ping, whois, dig и т.д.). Простые PHP скрипты. | dig, net tools, nslookup, php, php script, system, traceroute, whois, Wordpress, пинг, сетевые утилиты, скрипты Понадобилось мне как-то дать возможность пользователям локалки, сидящих естественно, под 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, и ручками вставляем код.

Похожие публикации

Выделенные сервера дешевле обычного хостинга

Комментариев 4

Daemony 27 июля, 2008 17:04:57 EEST .:. ID #742 .:.

Клиентский скрипт к ограничениям на whois сервере отношения не имеет и никак на такие ограничения повлиять не может.

miki 27 июля, 2008 16:39:26 EEST .:. ID #741 .:.

но лимит на обращения к whois убить нельзя

Daemony 26 мая, 2008 21:47:43 EEST .:. ID #642 .:.

Пожалуйста. :)
Только все-таки, использовать это все для широкого круга людей не стоит. Люди разные бывают…

Виктор 26 мая, 2008 14:50:10 EEST .:. ID #641 .:.

Довольно удобно, надо взять на заметку, благодарю!
Полезные скрипты.

Возник вопрос по этой теме, или есть что добавить? Говорите!

  1. Зарегистрированным пользователям вводить защитный код (captcha) не приходится.
  2. Загрузить свою аватарку Вы сможете, зарегистрировавшись на сервисе www.gravatar.com
Публикуя комментарий Вы подтверждаете, что ознакомились c Правилами и принимаете их!
HOMOSAPIENS ONLY! :)