我需要检查一组服务器,路由器和交换机是否还活着。我一直在寻找可以与IP和端口一起工作超过一个小时的可靠的东西,有人可以帮忙吗?
结束使用
function ping($addr, $port='') {
if(empty($port)) {
ob_start();
system('ping -c1 -w1 '.$addr, $return);
ob_end_clean();
if($return == 0) {
return true;
} else {
return false;
}
} else {
$fp = fsockopen("udp://{$addr}", $port, $errno, $errstr);
if (!$fp) {
return false;
} else {
return true;
}
}
}
答案 0 :(得分:8)
服务器,路由器和交换机......它们共享的一个共性是在SNMP服务运行时接受SNMP请求的能力。听起来你正在尝试做的是为监控系统(nagios等等)实施一个有趣的解决方法。
根据:http://php.net/manual/en/book.snmp.php
<?php
$endpoints = array('10.0.0.1','10.0.0.2','10.0.0.3','10.0.0.4','10.0.0.5');
foreach ($endpoints as $endpoint) {
$session = new SNMP(SNMP::VERSION_2c, $endpoint, 'boguscommunity');
var_dump($session->getError());
// do something with the $session->getError() if it exists else, endpoint is up
}
?>
这将告诉您端点是否处于活动状态且SNMP服务是否正在运行。特定于查看端口是否可用/打开,您可以使用fsockopen()
:
http://php.net/manual/en/function.fsockopen.php
<?php
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
if (!$fp) {
echo "ERROR: $errno - $errstr<br />\n";
}
?>
答案 1 :(得分:0)
$ip = "123.456.789.0";
$ping = exec("ping -c 1 -s 64 -t 64 ".$ip);
var_dump($ping);
// and so forth.
答案 2 :(得分:0)
如果你正在检查mysql,你可以使用像
这样的东西 if (mysqli_ping($ip)) echo "sweet!";
else echo "oh dam";
我会有点担心使用ping选项,因为它可以被阻止,并且没有... ...