我想用多个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/>";
}
}
答案 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/>";
}
}