Переход к предыдущей публикации Анализ логов веб сервера и представление статистики посещаемости веб сайта посредством AwStats phpMyAdmin - веб интерфейс для управления сервером MySQL Переход к следущей публикации
 
Я хочу добавить Daemony`s Live RSS ленту в Google Reader Я хочу добавить Daemony`s Live RSS ленту в Яндекс.Лента Я хочу получать RSS ленту Daemony`s Live Blog по электронной почте Я хочу добавить Daemony`s Live RSS ленту в My Yahoo Я хочу добавить Daemony`s Live RSS ленту в My MSN

 

Добавить комментарий

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

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, и ручками вставляем код.

 

Ключевые слова


| | | | | | | | | | |
 

Публикации по теме

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

Подпишись на RSS ленту и будь в курсе обновлений

Я хочу добавить Daemony`s Live RSS ленту в Google Reader Я хочу добавить Daemony`s Live RSS ленту в Яндекс.Лента Я хочу получать RSS ленту Daemony`s Live Blog по электронной почте Я хочу добавить Daemony`s Live RSS ленту в My Yahoo Я хочу добавить Daemony`s Live RSS ленту в My MSN

Я хочу подписаться на Daemony`s Live RSS ленту комментариев к записям
  1. Комментарии (4) к публикации “Cистемные сетевые утилиты через интерфейс Wordpress (ping, whois, dig и т.д.). Простые PHP скрипты”

  2. № 1 .:. Виктор говорит:

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

    2008-05-26 14:50:10 EEST
  3. № 2 .:. Daemony говорит:

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

    2008-05-26 21:47:43 EEST
  4. № 3 .:. miki говорит:

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

    2008-07-27 16:39:26 EEST
  5. № 4 .:. Daemony говорит:

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

    2008-07-27 17:04:57 EEST

Добавить комментарий

Быстрая вставка HTML тегов

Подсказки:
  • Для вставки фрагментов кода используйте "быстрый" тег <PRE></PRE>.
  • Для цитирования фрагментов текста используйте "Цитата".
  • Поддерживаются также другие HTML теги.

Поля, помеченные красной "звездочкой" обязательны к заполнению.