2011-03-16 5 views
-2

Eh bien, je suis nouveau php et j'ai ce problème ....php ping une adresse IP de gamme

<?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 

l'idée est:

  • 1: ping Range
  • 2: monter un serveur éventuellement (si est vivant)
  • 3: envoyez-moi un email
  • 4: mettre tout hôte vivant dans db

quelqu'un peut m'aider ?!

tnx à l'avance

+2

ce n'est même pas php:/au moins essayer! – RobertPitt

+1

Ceci est un script shell. Voulez-vous son équivalent en PHP? – codaddict

+0

Quel est votre problème? Qu'est-ce qui ne marche pas, qu'attendez-vous? – TJHeuvel

Répondre

2

Vous pouvez vérifier les hôtes et les ports d'hôtes avec fonction 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 
    } 
} 
+0

..grande .... tnx beaucoup ... c'est ce que je cherchais ... – user662556

2

Je suppose que vous pouvez essayer quelque chose comme ça. Soyez averti cependant, je n'ai pas testé ce code.

$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; 
    } 
} 

Vous pourriez avoir besoin d'un délai d'attente pour chaque boucle. À la fin, vous pouvez parcourir le tableau errors-array pour gérer chaque erreur donnée. Si possible, j'utiliserais fsockopen pour vérifier les ports au lieu de pingcommands comme Osaman recommande.

+0

je vais essayer !;) tnx beaucoup;) – user662556