Php 使用for循环和exec命令Ping多个IP地址

Php 使用for循环和exec命令Ping多个IP地址,php,for-loop,ping,Php,For Loop,Ping,我想用多个IP运行这个程序,并检查IP是否处于活动状态、无法访问或请求超时。我无法指出我哪里出错了。我在没有使用循环的情况下运行了这个程序,它运行得很好,但是在使用for-loop的情况下,它不适用于多个IP。将非常感谢您的帮助=) 对于($ipa=100;$ipa您可以将IP写入文本文件,然后使用该文件ping IP,如 for ($ipa=100; $ipa <= 110; $ipa++){ $ip = "192.168.254.{$ipa}"; exec ("pi

我想用多个IP运行这个程序,并检查IP是否处于活动状态、无法访问或请求超时。我无法指出我哪里出错了。我在没有使用循环的情况下运行了这个程序,它运行得很好,但是在使用for-loop的情况下,它不适用于多个IP。将非常感谢您的帮助=)


对于($ipa=100;$ipa您可以将IP写入文本文件,然后使用该文件ping IP,如

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/>";
    }

}

用于($ipa=100;$ipa查看您在Windows上运行的-n开关。在Windows上运行exec有一些注意事项,但因为它工作过一次,所以我不去那里。另一件事是,您需要每次取消设置$ping_输出,以便脚本使用最新的数据。否则exec只会将数据附加到此数组。最后是那些else if子句s将始终返回true。
如果您从var_转储行发布一些输出,以查看使用特定IP运行ping时是否出现错误,这将有所帮助

下面是我对这个脚本的建议。我已经将preg_匹配更改为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/>";
   }
}

for($ipa=100;$ipa)如何操作多个ip?“但不适用于多个ip”请详细说明一下。为什么用php来实现?为什么不使用一些专门的工具,比如nmap?我使用循环从IPS 192.168.254.100检查到110,并使用exec命令检查每一个。输出:192.168.254.100是不可访问的,192.168.254.101是不可访问的,192.168.254.102是不可访问的。在192.168.254.110之前,我得到了所有不可访问的结果.Hi Huseyin,如果我只使用for循环,可能吗?因为当我单独尝试时,它可以正常工作。据我说,最好使用for循环并逐个检查状态。但是,您希望使其成为批处理。我没有将其用于批处理文件。我正在浏览器上运行它。我认为您错过了重定向第2部分>&1。我更新了代码。我得到了192.168.254.105一直打开到192.168.254.110,它都打开了,但我只有两台实时计算机。
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/>";
   }
}