PDA

Просмотр полной версии : PHP скрипт, ping


MisteriX
18.12.2007, 22:28
Помогите написать скрипт на ПХП, каторый будет выполнять следующее:
Пинговать определенный ip адрес и если есть ответ то возвращать true , а если ответа нет - false


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

Sn@k3
18.12.2007, 22:35
<?php
echo'
<html>
<head>
<title>Пинг на IP</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<h2></h2>
<br />
<form method="post" action="#">
<input name="ip" type="text"> <b>Введите IP</b><br>
<input type="submit">
</form>
<br> ';

if ($_POST["ip"]) {
$ip = $_POST["ip"];
}
if (preg_match('/ |\|/', $ip)){
echo "Ввели недопустимые знаки";
die;
}
$p = "ping -c 3 $ip"; //для *nix
//$p = "ping -n 3 $ip"; //Windows
$p = preg_replace('/\n/',"<br>\n",$p);

$ft ="Вернуть данные при вызове <b>ping</b>:<br> $p</body></html>";
echo $ft;
?>

типа того

MisteriX
18.12.2007, 22:40
чет не фурычит.... но идею понял... буду думать! СПС Большое

MisteriX
18.12.2007, 22:45
Только вот.... там нада както через системную функцию system() нужно делать.... от того что просто написать $p = "ping -n 3 $ip"; ничего не выполниться

MisteriX
18.12.2007, 22:53
Вот както так... но всегда true возвращает...

<?php
$p = system('ping 192.168.50.1');
if($p)
{
echo("Есть ответ");
}
else
{
echo("Хост не активен");
}
?>

Sn@k3
18.12.2007, 23:08
хм, ну попробуй:
C:\Documents and Settings\Snak3>ping lollll.ru
При проверке связи не удалось обнаружить узел lollll.ru. Проверьте имя узла и по
вторите попытку.

и C:\Documents and SettingsSnak3>ping antichat.ru

Обмен пакетами с antichat.ru [89.108.80.80] по 32 байт:

Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.

Статистика Ping для 89.108.80.80:
Пакетов: отправлено = 4, получено = 0, потеряно = 4 (100% потерь),

C:\Documents and Settings\Snak3>

Видишь в чем разница? пробуй после с, допустим, началом вхождения, если ищет "обмен пакетами" ну или и т.д. по длинне например и т.д., вариантов множество, парсить нужно

Sn@k3
18.12.2007, 23:10
чет не фурычит.... но идею понял... буду думать! СПС Большое


этот скрипт на компе валялся, может и сам его писал)))) хз))

demonoid
19.12.2007, 00:01
.....
это но других языках, то выложите исходники....

perldoc Net::Ping
"исходники" _http://perldoc.perl.org/Net/Ping.html

presidentua
19.12.2007, 03:09
to MisteriX
В книге Фролова ПХП для хакера (как всегда оригинальное название :) ) есть робота с сокетами и там он пишет как написать сканер портов и ФТП-клиент. Думаю будет интересно почитать

Isis
19.12.2007, 03:44
<?php
$unix = 0;
$register_globals = (bool) ini_get('register_gobals');
$system = ini_get('system');
$unix = (bool) $unix;

if($register_globals)
{
$ip = getenv(REMOTE_ADDR);
$self = $PHP_SELF;
}
else
{
$submit = $_GET['submit'];
$count = $_GET['count'];
$host = $_GET['host'];
$ip = $_SERVER['REMOTE_ADDR'];
$self = $_SERVER['PHP_SELF'];
}

if ($submit == "Ping!")
{
$count = 4;
$host = preg_replace ("/[^A-Za-z0-9.-]/", "", $host);
$count = preg_replace ("/[^0-9.]/", "", $count);
echo '<body bgcolor="#FFFFFF" text="#000000"></body>';
echo("Ping Output:<br>");
echo '<pre>';

if ($unix)
{
system ("ping -c$count -w$count $host");
system("killall ping");
}
else
{
system("ping -n $count $host");
}
echo '</pre>';
}
else
{
echo '<body bgcolor="#FFFFFF" text="#000000"></body>';
echo '<p><font size="2">Your IP is: '.$ip.'</font></p>';
echo '<form methode="post" action="'.$self.'">';
echo ' Enter IP or Host <input type="text" name="host" value="'.$ip.'"></input>';
echo ' Enter Count <input type="text" name="count" size="2" value="4"></input>';
echo ' <input type="submit" name="submit" value="Ping!"></input>';
echo '</form>';
echo '<br><b>'.$system.'</b>';
echo '</body></html>';
}
?>

nerezus
19.12.2007, 07:45
В книге Фролова ПХП для хакера (как всегда оригинальное название ) есть робота с сокетами и там он пишет как написать сканер портов и ФТП-клиент. И хрен ты напишешь пинг на пхп. Это невозможно.

Теоретическая возможность, кстати, есть. Через сырые сокеты. И вебсервер с правами рута, что уже полный бред.

MisteriX
19.12.2007, 11:52
2 Isis
Скрипт харош... ну идея не в этом!
Кароч конечный результат работы скрипта должен показывать слудующее:
Тоесть ты запускаеш скрипт и оно показует кто в твоеей подсети онлайн, кто офф
Для этого оно должно не просто пинговать, а возвращать true или false, тоесть мне самим пинги не важны главное узнать этот ip щас занят или нет....

Но я придумал идею круче пинга, кароч через сокеты конектиться на 445 порт (Mirosof-DS), так как если ждать выполнения каждого пинга пройдет очень много времени... Вобщем как закончу, то выложу исходник.

Sn@k3
19.12.2007, 12:19
Вот чисто кусок кода, который будет показывает какие есть ИП на искомой странице, пригодться может....
<?
$timelim=1; ///лимит времени в секундах допустимого бездействия пользоваеля
session_id("hfJKcbJssJ");
session_start();
$f=1;
if(!isset($_SESSION['kolvo']))
$_SESSION['kolvo']=0;
if($_SESSION['kolvo']>0)
{
for($i=0;$i<$_SESSION['kolvo'];$i++)
if($_SESSION['users']['ip'][$i]==$_SERVER['REMOTE_ADDR'])
{
$_SESSION['users']['date'][$i]=date('U');
$f=0;
break;
}

if($_SESSION['kolvo']>0)
for($i=0;$i<$_SESSION['kolvo'];$i++)
if(date('U')-$_SESSION['users']['date'][$i]>$timelim)
{ for($j=$i;$j<$_SESSION['kolvo']-1;$j++)
{
$_SESSION['users']['date'][$j]=$_SESSION['users']['date'][$j+1];
$_SESSION['users']['ip'][$j]=$_SESSION['users']['ip'][$j+1];
}
$_SESSION['kolvo']--;
}
}
if($f)
{
$_SESSION['users']['ip'][$_SESSION['kolvo']]=$_SERVER['REMOTE_ADDR'];
$_SESSION['users']['date'][$_SESSION['kolvo']]=date('U');
$_SESSION['kolvo']++;
}
print$_SERVER['REMOTE_ADDR'];
?>

p0is0n
19.12.2007, 21:35
показывает какие есть ИП на искомой странице, пригодться может....

Уверен?

ZEXEL
10.01.2008, 13:47
Isis у меня выдает ошибку
Warning: system() has been disabled for security reasons in /home/czexel/public_html/z.php on line 37

что зделать надо что бы работало дальше нормально ?

NNNS
10.01.2008, 13:50
zexel, ничего не сделаешь. Хостер отключил эту функцию на сервере

ZEXEL
10.01.2008, 13:57
zexel, ничего не сделаешь. Хостер отключил эту функцию на сервере
А вообще хостера попросить мона что бы функцию ету включил или ета как бы функция что опасна для их системы ?

AFoST
10.01.2008, 14:12
Ну system() дает юзеру командную строку в пользование :) Конечно опасно. Конечно можешь попросить :)

Scipio
10.01.2008, 14:15
Попросить то можно, но врядли он включит
узнай, мож другие какие нить функции включены passthru, exec,popen, proc_open... хотя врядли
если без пинга этого никак и php не принципиально важен, и есть поддержка cgi-сценариев (папка cgi-bin) то пользуй perl например, мдя... слишком много условий