1

Тема: Получить ping traceroute nslookup

Как организовать на php (как модуль к apache) реализацию выполнения утилит ping traceroute nslookup? Те у пользователя есть форма в браузере, например сделать пинг с кнопочкой "начать". Он вводит адрес, жмет кнопочку - сервер ему выдает ответ на ввод  ping traceroute nslookup? Спасибо заранее.
Вот как здесь, например сделано http://tools.nettools.ru/ctrl.php

2

Re: Получить ping traceroute nslookup

Надо выключать Safe mode и юзать system('/bin/nslookup')
или тоже-самое с exec() или passthru()

3

Re: Получить ping traceroute nslookup

google "php ping" третий результат. Так проблема в поиске скрипта или всетаки в в его выполнении?

<?php  
//  This script was writen by [email protected], Aug. 2001  
//  http://www.theworldsend.net  
//  This is my first script. Enjoy.  
//    
// Put it into whatever directory and call it. That\'s all.  
//  
//-------------------------  
$max_count = "10\"; //maximum count for ping command  
// -------------------------  
//  
// nothing more to be done.  
If ($submit ==\"Ping!\") {  
  If ($count > $max_count) {  
   echo \'Maximum for count is \'.$max_count;  
   echo \'<a href=\"php-ping.php\">Back</a>\';  
     $again = True;}  
    else {  
      If (ereg(\" \",$host))  {  
          echo \'No Space in Host field allowed !\';  
                    echo \'<a href=\"php-ping.php\">Back</a>\';  
         $again= True;}  
        else {  
           echo \'  
         <body bgcolor=\"#000000\" text=\"#FFFFFF\" link=\"#FFFFFF\" vlink=\"#EEEEEE\" LINK=\"#EEEEEE\" background=\"\">  
      <b><h2>The WorldsEnd.NET</h2>  
       <TABLE><TR><TD WIDTH=360 HEIGHT=2 BGCOLOR=#CCCCCC></TD></TR></TABLE>  
            \';         
                       echo(\"Ping Output:<br>\");   
           exec(\"ping -n $count $host\",$list);   
         //  sleep($count + 1);  
           for ($i = 0; $i < count($list); $i++)   
           print $list[$i].\"<br>\"; }}  
           echo (\"</b>\");  
           }   
else {  
    $ip = getenv(REMOTE_ADDR);  
    echo \'  
    <html><body>  
     <body bgcolor=\"#000000\" text=\"#FFFFFF\" link=\"#FFFFFF\" vlink=\"#EEEEEE\" ALINK=\"#EEEEEE\" background=\"\">  
       <b><h2>The WorldsEnd.NET</h2>  
       <TABLE><TR><TD WIDTH=360 HEIGHT=2 BGCOLOR=#CCCCCC></TD></TR></TABLE>  
       Ping to your server or to somewhere else from here...<BR>  
       <p><font size=\\\"2\\\">Your IP is: \'.$ip.\'</font></p>  
     <form methode=\"post\" action=\"php-ping.php\">  
     Enter IP or Host <input type=\"text\" name=\"host\" value=\"www.yahoo.com\"></input>  
     Enter Count <input type=\"text\" name=\"count\" size=\"2\" value=\"4\"></input>  
     <input type=\"submit\" name=\"submit\" value=\"Ping!\"></input>  
     </form></b>  
     </body></html>\';}  
?>

4

Re: Получить ping traceroute nslookup

Так - один ответ слишком короткий, второй очень подробный - разбираюсь, как окончу - отпишусь. Спасибо smile

Добавлено спустя   1 час   37 минут   50 секунд:
Ну что - я тоже сделал, у меня правда все получилось гораздо короче, учитывая и тот факт, что мой скриптик считает целых три утилитки, а не один пинг ))) но да ладно -  хотя и не факт что так лучше smile Один скрипт на стороне сервера встречает любой из трех запросов либо пинг, либо трасер либо whois и в зависимости от того что именно введено - его и вычисляет, результат отдает в браузер. Соответсвенно p2 p3 p4 - переменные формы, введенные пользователем. Если интересна сама html форма, я выложу - не хочу засорять форум.

<?php
$ping = $HTTP_POST_VARS['p2'];
$traceroute = $HTTP_POST_VARS['p3'];
$whois = $HTTP_POST_VARS['p4'];
if (isset($ping))
{
    $ping=`ping  -c10 $ping`;
    echo  '<pre>'.$ping.'</pre>';
exit0;
}
    if (isset($traceroute))
    {
   $traceroute=`traceroute  -m5 $traceroute`;
   echo  '<pre>'.$traceroute.'</pre>';
   exit0;
   }
$whois=`whois   $whois`;
echo  '<pre>'.$whois.'</pre>';
?>

Добавлено спустя   1 час   50 минут   17 секунд:
Для Alexander - Safe mode выключать не надо Саня smile

5

Re: Получить ping traceroute nslookup

В твоем случае сайфмоде тебя не спасет wink
Переменные надо проверять! А то ломанут...

А чем нонструкция else неугодила? Разницу между " ' и ` знаешь? Ну и на закуску не $HTTP_POST_VARS  а $_POST

6

Re: Получить ping traceroute nslookup

ломанут что именно?Обращений к базе нет, а  ввод данных в системные утилиты контролируются самими утилитами. попробуй ввести что нибудь не то в утилиту ping или nslookup - что получится? Ровным счетом ничего smile Кстати, порядок и правила использования самих утилит в системе ну вот у меня , например, регулирует система контроля bastille wink  http://www.bastille-unix.org/  Так что если есть желание - я дам ссылку на реальный сайт где это уже работает - сломайте smile  smile
Насчет HTTP_POST_VARS  smile   уже писали сами разработчики, что такая нотация более приемлемая, чем все остальные, во всяком случае в 4 версии. Остальное - кому как, кому else, а кому и нет " Кому и кобыла невеста smile  " как говорили в свое время Ильф и Петров wink
Не понял - причем здесь "разницу между " ' и ` знаешь?"  знаю разницу и что? Причем это?

7 (24-04-2008 02:02:22 отредактировано SatanaClause)

Re: Получить ping traceroute nslookup

Про контралирует это хорошо загнул... зачет!

$ ping -c10 google.com && cat /etc/passwd

Аналогично

$ ping -c10 google.com && echo '<?php echo "test\n" ?>' > /tmp/test.php && /usr/local/bin/php -e /tmp/test.php

Обрати внимание на первые две функции, они не зря придуманы.

LXXXII. Функции выполнения программы
escapeshellarg - escape-ирует строку для использования в качестве аргумента оболочки
escapeshellcmd - escape-ирует метасимволы оболочки
exec - выполняет внешнюю программу
passthru - выполняет внешнюю программу и выводит необработанный вывод
proc_close - закрывает процесс открытый proc_open и возвращает exit-код этого процесса
proc_open - выполняет команду и открывает указатели файла для ввода/вывода
shell_exec - выполняет команду в оболочке и возвращает полный вывод как строку
system - выполняет внешнюю программу и отображает вывод

Конечто все зависит от конструкции, но зачем оставлять потенциальные дырки? Элементарный пример, если даже и нет на сервере ничего что можно сломать, то можно создать файлик с функцией отправки почты на рута и сделать бесконечный цикл... Ну или просто копирывать какоенить гавно пока место не кончится... Вреда как такового никакова, но система скорее всего к утру упадет.

У меня недавно клиенту сайт поломали, а все почему, програмист посчитал лишним проверять типы закачеваемых файорв в галерею... Клиенту бэкап дорого обошелся, а программер думаю не отделается легким испугом...

8

Re: Получить ping traceroute nslookup

ну тут конечно - ситуаций может быть уйма и на каждый случай не подстрахуешься smile Спасибо за дельные советы.

9

Re: Получить ping traceroute nslookup

Подстрахуешся, если смотреть на задание как на проблему... Просто наверно у нас немного род деятельности разный, я работаю над обеспичением безопасности на серверах, поэтоме и смотрю на каждого пользователя как на врага народа.

Разничца в том что ты делаеш так чтобы работало, а я чтобы не ломалось... Разнича небольшая, но результат ощутим.

Логику проверки можно отсюда взять http://pleac.sourceforge.net/pleac_groo … ching.html

Суть в следующем, все что приходит от пользователя заведомо сомнительно и требудет проверки (в идеале все проверять надо, ошибки/ошибочный данные выдает любая среда...) Может я и параноик, но с опытом непоспориш...

в тваем случае простая схевма с регуляраыми выражентямт

1. если домен (и его вид соответствует стандартам) то делаем с ним -> чтото
2. иначе если ип (и его вид соответствует стандартам) то делаем с ним  -> чтото
3. иначе всех в бабруйск
4. делаем чтото и если нас результат устраивает, то показываем его, если нет то пишем что не получилось. Зачем сообщения о системных ошибках, если такие будут.

10

Re: Получить ping traceroute nslookup

Логика хорошая - главное не увлекаться,  а то тогда надо проверять, правильно ли сам парсер работает, правильно ли он выдает ошибки, если они есть, а ошибки ли это на самом деле..а так ли они выводятся, когда парсер гавкает? Может надо изменить и это?? Ну и ..проверить разработчиков самого языка тоже тогда...не помешает - вдруг что?? Вдруг они там зажрались и туфту гонят????       )))))))))   ;-)   Спасибо Саня.

11

Re: Получить ping traceroute nslookup

Я не Саня wink

12

Re: Получить ping traceroute nslookup

Это я себя благодарил за такой длиннющий ответ )))))))))))))   у меня театр одного актера, - я знаю что тебя Алан зовут.

13

Re: Получить ping traceroute nslookup

Главно что работает. А когда сломают, приходи снова smile Поможем чем сможем wink

PS: Саша, мы же от чистого сердца smile

Добавлено спустя     4 минуты   11 секунд:

$p2 = $_REQUEST['p2'];
preg_match("/^[a-z0-9\.-]\.[a-z]{2,3,4}$/i", $p2, $ping_match);
$ping = $ping_match[0];
?>

и так для всех остальных переменных нужно сделать обязательно.
.............
$traceroute = $HTTP_POST_VARS['p3'];
$whois = $HTTP_POST_VARS['p4'];

14

Re: Получить ping traceroute nslookup

спасибо )