使用for loop和exec命令ping多个IP地址

时间:2014-01-18 13:23:00

标签: php for-loop ping

我想用多个IP运行它并检查IP是否存活,无法访问或请求超时。我无法指出我错误的地方。我没有使用循环运行它,它工作正常,但不适用于for循环的多个IP。帮助将不胜感激=)

for ($ipa=100; $ipa <= 110; $ipa++){

    $ip = "192.168.254.{$ipa}";

    exec ("ping -n 1 -w 1 $ip && exit", $ping_output);

    if(preg_match("/TTL/i", $ping_output[2])) {
      echo "{$ip} is On <br/>";
    } else if("unreachable"){
      echo "{$ip} is unreachable <br/>";
    } else if("Request"){
        echo "{$ip} is Off <br/>";
    }

}

2 个答案:

答案 0 :(得分:1)

查看-n开关,您在Windows上运行它。在Windows上运行exec有一些警告但是因为它曾经工作过一次我不会去那里。另一件事是你需要每次都取消设置$ ping_output,以便脚本使用最新的数据。否则exec只会将数据附加到此数组。最后那些if子句总是会返回true。 如果您从var_dump行发布一些输出以查看是否存在使用特定IP运行ping的错误,将会有所帮助。

以下是我对此脚本的建议。我已经将preg_match更改为stripos,这是检查子字符串是否存在的更快的方法。

for ($ipa=100; $ipa <= 110; $ipa++){
   $ip = "192.168.254.".$ipa;
   $ping_output=array();
   exec ("ping -n 1 -w 1 $ip 2>&1", $ping_output, $return_val);
   echo $ip." -> ".$return_val."<br/>".implode('<br/>',$ping_output).'<br/>';

   if(stripos($ping_output[2],"TTL")!==false) {
     echo $ip." is On <br/>";
   } else if(stripos($ping_output[2],"unreachable")!==false){
     echo $ip." is unreachable <br/>";
   } else if(stripos($ping_output[2],"request")!==false){
     echo $ip." is Off <br/>";
   }
}

答案 1 :(得分:0)

您可以将您的ips写入文本文件,然后使用该文件ping ips;

for ($ipa=100; $ipa <= 110; $ipa++){

    $ip = "192.168.254.{$ipa}";

    exec ("ping -n 1 -w 1 $ip 2>&1", $ping_output, $return_val);
    var_dump(array($ping_output,  $return_val));
    if(preg_match("/TTL/i", $ping_output[2])) {
      echo "{$ip} is On <br/>";
    } else if("unreachable"){
      echo "{$ip} is unreachable <br/>";
    } else if("Request"){
        echo "{$ip} is Off <br/>";
    }

}