PHP пинг диапазона IP-адрес - PullRequest
0 голосов
/ 16 марта 2011

ну, я новичок в php, и у меня есть эта проблема ....

<?php
$RANGE = 192.168.1.1/254;

for  in $RANGE
do
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if ! ping -c $COUNT $myhost; then
# 100% failed

fi
fi
done
echo "Host : $myHost is down (ping failed) at $(date)" | mail -s "$SUBJECT" $EMAILID

Идея такова:

  • 1: пинг диапазона
  • 2: смонтировать конечный сервер (если он жив)
  • 3: отправьте мне письмо
  • 4: положить всех хостов живыми в db

Кто-нибудь может мне помочь?!

Заранее

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

Думаю, вы могли бы попробовать что-то вроде этого. Будьте осторожны, я не проверял этот код.

$mainpart = "192.168.1.";
$errors = array();
foreach(range(1, 254) as $ip) {
    $adr = $main . $ip;
    $msg = exec("ping {$adr} blablabla");
    if($msg == "bad error") {
        $errors[$adr] = $msg;
    }
}

Может потребоваться какое-то время ожидания для каждого цикла. В конце вы можете перебрать массив ошибок, чтобы обработать каждую данную ошибку. Если возможно, я бы хотел использовать fsockopen для проверки портов вместо команд ping, как рекомендует Osaman.

2 голосов
/ 16 марта 2011

Вы можете проверить хосты и порты хостов с помощью функции fsockopen

$hosts = array(/* array of hosts list */)

foreach ($hosts as $host) {
$hostname = $host;
$port = 80;
$timeout = 3;
$fp = fsockopen ($hostname, $port ,$errno ,$errstr, $timeout);
    if($fp) {
     // Port is alive 
     // Mount, send an email, insert to db
    } else {
     // Port is dead. Reason : $errstr
    }
}
...