Our Blog

PingScript v0.01a


Здравствуйте, уважаемые посетители ресурса. Сегодня решил написать скрипт, который может пинговать заданные адреса в сети и выводить все результаты в файл. Как показала практика пинговать может даже с локального сервера. Давайте разберем его.
В принципе в этом скрипте ничего замысловатого нет. Для начала создаются обьекты на форме, конечно это будет сильным отступлением в область веб-дизайна поэтому весь код графических обьектов вы можете взять из приложенного к статье файла. Далее мы создаем переменную и берем данные из тектового поля

$addr = $_POST['Addr'];

После того как мы получили адрес заносим в переменную $ping стандартную системную функцию system с параметрами «ping $addr»

$ping = system("ping $addr");

Уже в переменной $ping хранятся результаты потенциально выполненного действия.
Основные действия выполнены, теперь займемся дополнительной функцией вывода результатов в .log файл

$print = $_POST['Print'];

В переменную $pring мы вывели значение обьекта CheckBox на форме (0 выключен, 1 включен)
Далее в переменную $results выводим текст, полученный в качестве результата в текстовом поле

$results = $_POST['Text'];

И выводим все это в текстовое поле командой echo $ping
После этого идет обрыв php кода и начинается закрытие текстового поля. После анализа кода вы поймете почему. В следующем блоке php кода я написал функцию которая отвечает за вывод результатов в файл. Даже если вы ничего не введи в адресной строке, пинг не произойдет но системная информация с параметрами команды ping все равно будет выведена.

function printer($res)
{
    $file = fopen("results.log", "w");
    fwrite($file, $res);
    fclose($file);
}

Осталось написать пару обработчиков событий. Сперва я написал обработчик события пинг. Если в адресной строке пусто, скрипт попросит ввести адрес, если нет выведет сообщение об успешно выполненной задаче.

if (empty($ping))
{
    echo "<H3>Enter the address please!</H3>";
}
else
{
    echo "<H3>Pinged succesfully!</H3>";
}

Последний обработчик получает значение из переменной $print и если оно равно 1 начнет выводить результаты в .log

if($print == 1)
{
   printer($results);
}
else
{
    exit;
}

Далее идет благополучное закрытие блока php кода, формы и завершающие страницу теги.
P.S. Скрипт написал на английском, потому что в системе возникла проблема с кодировкой юникод. Скрипт очень хотелось выложить. Сразу хочется заметить что я не силен в php, можно сказать доучиваю. Более грамотно и подробно о скриптах знает и может рассказать мой коллега Codeserfer.
Благодарю за внимание!

P.P.S. Дело в том что скрипт в данном случае является клиентом, который имеет право отправить команду ping в случае с локальным сервером. Скрипт использует стандартную функцию системы. В случае с сервером сервер становится машиной-клиентом, на которой возможность передачи команды ping запрещена, адрес который мы хотим запинговать становится сервером. Почему была заблокирована стандартная функция system()? Ведь простой пинг не делает ничего плохого? Ответ прост. Несанкционированные операции с пользовательскими файлами, настройками, тот же ping можно запустить на исполнение с параметрами -65000 пакетов в секунду и -t бесконечный пинг. Правильно. Пока мы на своем компьютере слушаем музыку, ваш хостер совершает DDoS аттаку на удаленный сервер. К сожалению альтернативных функций в операционках нет. Преимуществом может являтся если у пользователя есть выделенный ip и возможность построить свой сервер. Благо с сегодняшними linux это не сложно, в принципе виндовый сервер тоже может работать

Comments ( 0 )
    -->