Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » В помощь вебмастеру » Ping-скрипты

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

KAPJICOH

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, очень нужен скрипт, который бы пинговал заданный ip в локалке и показывал статус. Перерыл кучу всего есть только платные-навороченные.
Помогите!

 
Ping-скрипты

 
[SSI]

Цитата:
djelektronik: ета фича ни на одном нормальном сервере не будет включена

Код:
<pre><!--#exec cmd="ping 127.0.0.1 -n 1" --></pre>

 
[Perl]
http://cgi.resourceindex.com/Programs_and_Scripts/Perl/Internet_Utilities/
http://www.hotscripts.com/Perl/Scripts_and_Programs/Networking_Tools/Ping/index.html
Простейший случай:

Код:
#!/usr/bin/perl
# by Haze
print "ping 127.0.0.1";

 
* WebUtilНабор сетевых утилит для браузера, включающий  ping, whois, finger, nslookup, traceroute, dnsquery, host и календарь.
 
[PHP]
http://www.hotscripts.com/PHP/Scripts_and_Programs/Networking_Tools/Ping/index.html
http://php.resourceindex.com/Complete_Scripts/Internet_Utilities/
 
© by Cheery

Код:
<?  
$ip='адрес_машины';  
exec("ping -n 1 -w 200 $ip",$output, $status);
// под *nix заменить -n 1 на -c 1  
if ($status==0)  
echo "Online";  
else  
echo "Offline";  
?>  

Параллельное выполнение..
ping.php

Код:
 
<?    
$ip=$_GET['ip'];  
if (!preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/',$ip)) {echo "Sorry, wrong request"; exit;}
$down='down.gif';  
$up='up.gif';    
exec("ping -n 1 -w 200 $ip",$output, $status);  
header('Content-type: image/gif');  
// под *nix заменить -n 1 на -c 1    
if ($status==0)    
readfile($up);    
else    
readfile($down);    
?>
 
   
page.html  

Код:
 
....  
<img src='ping.php?ip=1.1.1.1'>  
<img src='ping.php?ip=1.1.1.2'>  
....  
 

 
 
 
© by Uriel:
windows:
Код:
<?php  
function pingIP($IP)  
{  
exec('ping ' .$IP, $past);  
$convert=convert_cyr_string($past[3],d,w);  
if (strpos($convert, "Ответ")===false)  
echo ("<font color=#000099><b>OFFLINE!</b></font>");  
else echo ("<font color=#00ff33><b>ONLINE!</b></font>");  
 
$convert1=convert_cyr_string($past[0],d,w);  
echo $convert1;  
}  
 
pingIP("127.0.0.1");  
?>  

Linux:  

Код:
<?php  
function ping($IP)  
{exec('ping -c 2 -i 0.2 ' .$IP,$ping);  
$nachalo = substr($ping[1],0,4);  
if ($nachalo!=="From")  
echo "<font color=green><b>ONline</b></font>";  
else  
echo "<font color=red><b>OFFline</b></font>";  
}  
 
echo "User - is ";  
ping('192.168.0.2');  
?>

 
 
[ASP]
http://www.hotscripts.com/ASP/Scripts_and_Components/Networking_Tools/Ping/index.html
 
[всё вместе ]
http://www.hotscripts.com/cgi-bin/search.cgi?bool=AND&query=ping&catid=all
 
 

Другие темы по скриптам:
* клиентские скрипты   (JavaScript, JScript, VBScript)
* серверные скрипты (Perl, PHP, ASP и т.д.)

    ~ скрипты для создания/редактирования HTML-кода в браузере и скрипты для редактирования файлов из браузера
    ~ скрипты службы знакомств
    ~ whois-скрипты
    ~ баннерообменные скрипты
    ~ скрипты счетчиков посещений
    ~ скрипты файлового обменника
    ~ скрипты чатов
    ~ скрипты фотогалереи
    ~ новостные скрипты  
    ~ скрипты и программы для рассылки
    ~ скрипты поиска
    ~ скрипты магазинов
    ~ сервисы, скрипты, софт для ведения дневников онлайн
    ~ скрипты гостевых книг
    ~ скрипты и службы голосований/опросов
    ~ скрипты и программы для создания карты сайта
    ~ доски объявлений
    ~ защита ссылок (antileech)
    ~ скрипт аукциона
    ~ скрипты каталогов (catalogue)
    ~ админ-панели для хостинга
    ~ скрипты для конвертации XLS и DOC/RTF-файлов в HTML
    ~ переадресовка по дням недели
    ~ phpMyAdmin: установка, настройка, проблемы
    ~ скрипты для открытия новых окон: на весь экран, заданного размера, в определённом месте экрана, неизменяемого размера и мн.др.

Всего записей: 10 | Зарегистр. 26-02-2002 | Отправлено: 02:02 13-03-2002 | Исправлено: Cheery, 00:33 16-04-2005
woffer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
djelektronik

Цитата:
обычный поиск как всегда рулит

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

Всего записей: 935 | Зарегистр. 11-10-2002 | Отправлено: 19:12 22-06-2003 | Исправлено: woffer, 01:09 23-06-2003
Uriel

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помнится писал когда то себе, чтоб глядеть кто в сетке есть
 
Windows
<?php
function pingIP($IP)
{
exec('ping ' .$IP, $past);
$convert=convert_cyr_string($past[3],d,w);
if (strpos($convert, "Ответ")===false)
echo ("<font color=#000099><b>OFFLINE!</b></font>");
else echo ("<font color=#00ff33><b>ONLINE!</b></font>");
 
$convert1=convert_cyr_string($past[0],d,w);
echo $convert1;
}
 
pingIP("127.0.0.1");
?>
 
 
Linux
<?php
function ping($IP)
{exec('ping -c 2 -i 0.2 ' .$IP,$ping);
$nachalo = substr($ping[1],0,4);
if ($nachalo!=="From")
echo "<font color=green><b>ONline</b></font>";
else
echo "<font color=red><b>OFFline</b></font>";
}
 
echo "User - is ";
ping('192.168.0.2');
?>

----------
ох уж эти сети... local.com.ua

Всего записей: 269 | Зарегистр. 26-06-2002 | Отправлено: 23:47 10-07-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
самый простой и универсальный метод (для локалки).. на php

Код:
 
<?  
$ip='адрес_машины';  
exec("ping -n 1 -w 200 $ip",$ouptut, $status);    
if ($status==0)    
  echo "Online";  
else  
 echo "Offline";  
?>


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:06 14-02-2004
roma



skydiver
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а кто чего скажет про пинг на пёрле?
 
имеем ping.pl
Код:
#!/usr/bin/perl
use CGI qw(:standard);
use Net::Ping;
$host = '1.1.1.1';
$p = Net::Ping->new('icmp');
if ($p->ping($host)) {$output .= qq~$host is alive.\n~;
}
else {$output .= qq~$host is not alive.\n~;}
$p->close();
print header();
print $output;

ну и соответственно при http://адриск_сервера/путь_к_пинг_пл/ping.pl в логах апачика имеем
Цитата:
icmp ping requires root privilege at /roma/test/ping.pl line 5  

лайн 5 я подсветил...
чего делать-то?
может чего-то как-то дать типа рутовую привелегию апачику при выполнении скрипта?
чего-то я не догоняю короче...
 
само сабой скрипт при запуске из шела из под рута пашет...

----------
ну и на кой мне эта подпись?

Всего записей: 2908 | Зарегистр. 10-09-2001 | Отправлено: 12:54 12-12-2004
Pleshkov



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
roma судя по логу  

Цитата:
icmp ping requires root privilege at /roma/test/ping.pl line 5

перевожу - Команда PING требует для своего выполнения привилегий суперпользователя root, т.е по установкам системы безопастности на серверах никто кроме пользователя root и группы wheel не имеет права выполнять команду ping.  

Цитата:
само сабой скрипт при запуске из шела из под рута пашет...

Он и должен пахать из под рута.

Цитата:
может чего-то как-то дать типа рутовую привелегию апачику при выполнении скрипта?
 
chown root root ping.pl - пробовали? может помочь .... если не поможет, тогда прилется апач из под рута запускать .... а это нельзя делать ....


----------
С уважением, Павел

Всего записей: 452 | Зарегистр. 15-06-2004 | Отправлено: 00:37 13-12-2004
roma



skydiver
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pleshkov
спасибо за перевод я так и думал впринципе...

Цитата:
если не поможет, тогда прилется апач из под рута запускать .... а это нельзя делать ....

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

----------
ну и на кой мне эта подпись?

Всего записей: 2908 | Зарегистр. 10-09-2001 | Отправлено: 15:23 13-12-2004
Pleshkov



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
нельзя ли сдеалать как нибудь типа чтобы апачик начал выполнять крипт потом сделал скажем su - и от имени рута уже выполнил этот пинг, а результаты тавой?

у меня щас нет документации по PERL под рукой, но там кажется была такая фишка как SUID - выполнение скриптов с правами определенного пользователя (но это 50/50 что такая функция есть.)


----------
С уважением, Павел

Всего записей: 452 | Зарегистр. 15-06-2004 | Отправлено: 18:43 13-12-2004
Preston



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
самый простой и универсальный метод (для локалки).. на php  
 
Код:
 <?    
$ip='адрес_машины';  
exec("ping -n 1 -w 200 $ip",$ouptut, $status);    
if ($status==0)    
  echo "Online";    
else    
 echo "Offline";    
?>

А если машин штук 50 (если проверять статус каждой из  них), то каждый раз при загрузки страницы уходит много времени. Нельзя ли как-нить это время ускорить?

Всего записей: 296 | Зарегистр. 15-08-2003 | Отправлено: 13:01 15-04-2005
Pleshkov



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Preston
функцию exec я например прибиваю в PHP сразу ....... что мешает сделать fsockopen?

Всего записей: 452 | Зарегистр. 15-06-2004 | Отправлено: 21:52 15-04-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Preston

Цитата:
А если машин штук 50 (если проверять статус каждой из  них), то каждый раз при загрузки страницы уходит много времени. Нельзя ли как-нить это время ускорить?

сделать скрипт, который будет проверять и выдавать картинку состояния..
и в html страницу вставить картинки, через ссылку на этот скрипт.
браузер будет делать запросы параллельно.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:59 15-04-2005
Preston



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pleshkov
Cheery
Честно говоря я в php не шарю. Не подскажете как это сделать (реализовать в виде картинки)?

Всего записей: 296 | Зарегистр. 15-08-2003 | Отправлено: 23:26 15-04-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Preston
ping.php

Код:
 
<?  
$ip=$_GET['ip'];
$down='down.gif';
$up='up.gif';  
exec("ping -n 1 -w 200 $ip",$output, $status);
header('Content-type: image/gif');
// под *nix заменить -n 1 на -c 1  
if ($status==0)  
readfile($up);  
else  
readfile($down);  
?>  
 

page.html

Код:
 
....
<img src='ping.php?ip=1.1.1.1'>
<img src='ping.php?ip=1.1.1.2'>
....
 

 
то, что написано, опасно с точки зрения безопасности, так как можно заставить выполняться любой код.
 
поэтому под $ip=$_GET['ip']; пишем
if (!preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/',$ip)) {echo "Sorry, wrong request"; exit;}
 
 
ps:добавил в шапку

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:03 16-04-2005 | Исправлено: Cheery, 00:33 16-04-2005
Preston



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо Cheery! Все работает. Чтоб я без тебя делал...
P.S. А можно чтобы показывать тех, кто в онлайне?

Всего записей: 296 | Зарегистр. 15-08-2003 | Отправлено: 00:41 16-04-2005 | Исправлено: Preston, 00:48 16-04-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Preston

Цитата:
P.S. А можно чтобы показывать тех, кто в онлайне?

он показывает и те машины, что пигуются и что не пингуются.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:55 16-04-2005
Preston



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А это понимаю, у меня все работает, я говорю про другой какой-нить скрипт, который бы показывал тех, кто в онлайне

Всего записей: 296 | Зарегистр. 15-08-2003 | Отправлено: 01:07 16-04-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Preston

Цитата:
А это понимаю, у меня все работает, я говорю про другой какой-нить скрипт, который бы показывал тех, кто в онлайне

не по адресу. при чем тут ping скрипты?  
http://forum.ru-board.com/topic.cgi?forum=31&topic=5762#1

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:16 16-04-2005
igorel

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
$fp = @fsockopen($IPAddr, $port, $errno, $errstr, 1);

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

Всего записей: 48 | Зарегистр. 16-03-2003 | Отправлено: 22:52 25-06-2005
Shader



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Столкнулся с проблемой пинга с опцией -f. При выполнении через exec(), system(), shell_exec() или passthru() возвращается только первая строка. Скрипт будет работать строго в интранет-сети, поэтому вопросы безопасности можно не рассматривать.
 
Вариант 1

Код:
exec('ping -f -c '.$num.' -s '.$size.' -q '.$ip, $a);
print_r($a);

 
-q используется для подавления возвращаемых пингом промежуточных результатов и отображения только конечной статистики. Но если хост отвалился и потерялись все пакеты, то -f надо брейкать, иначе он не вернёт статистику. Поэтому попробовал вариант два:
 

Код:
exec('ping -i 0 -c '.$num.' -s '.$size.' -q '.$ip, $a);
print_r($a);

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

Код:
exec( 'ping -c 4 -i 0.5 -n '.$_GET[i], $a );
foreach ( $a as $b ) echo $b.'<br>';

работает корректно. Буду благодарен за любые идеи.

Всего записей: 54 | Зарегистр. 14-09-2003 | Отправлено: 15:23 25-04-2008 | Исправлено: Shader, 15:24 25-04-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shader
ну посмотрели бы мануал.. ясно же сказано

Цитата:
The last line from the result of the command. If you need to execute a command and have all the data from the command passed directly back without any interference, use the passthru() function


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:51 25-04-2008
Shader



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я пробовал passthru(). В том-то и дело.
 
Выполнение команды из шелла:

Код:
# ping -i 0.1 -c 10 -q 172.16.130.137
PING 172.16.130.137 (172.16.130.137) 56(84) bytes of data.
 
--- 172.16.130.137 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 910ms
rtt min/avg/max/mdev = 1.436/2.445/4.238/0.914 ms
#

PHP код:

Код:
passthru(''ping -i 0.1 -c 10 -q '.$ip');

Выдаёт следующее:

Код:
PING 172.16.130.137 (172.16.130.137) 56(84) bytes of data.

 
И всё.
-i 0.1 - это искусственная маленькая задержка. Если ее сделать -i 0, то это будет почти то же самое, что и опция -f. А теперь интереснее. Если 0.1 заменить на 0.2, то команда прекрасно выполняется и даёт полноценный вывод:

Код:
PING 172.16.130.137 (172.16.130.137) 56(84) bytes of data.
 
--- 172.16.130.137 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 1816ms
rtt min/avg/max/mdev = 1.449/1.938/2.905/0.517 ms

 
Загвоздка в том, что мне нужно посылать несколько сотен пакетов без задержки вообще. Так сказать стресс-тест.
Единственный альтернативный вариант который я пока придумал - написать шелловский скрипт, который будет делать вывод файл, вызывать его через exec(), а далее ждать пока спадёт flock на файл и тогда читать из него контент. Но очень хочется решить это стандартными средствами PHP.

Всего записей: 54 | Зарегистр. 14-09-2003 | Отправлено: 19:47 25-04-2008 | Исправлено: Shader, 19:48 25-04-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Интернет » В помощь вебмастеру » Ping-скрипты


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru