我想基于IP和端口ping服务器。为什么港口? 因为我正在构建的系统将在不同的PORTS上具有登录服务器和游戏服务器 现在我正在使用fsockopen
$start = microtime(true);
$fp = @fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fp) {
return false;
}
else {
$ping = microtime(true) - $start;
$ping = round($ping * 1000);
$res['ip'] = $host;
$res['port'] = $port;
$res['ping'] = $ping;
$res['msg'] = 'success';
return $res;
}
我不能和我不想使用exec()1。IP和端口将由用户输入,而exec()不能在端口上ping。
使用fsockopen我只能采用延迟(不太正确)。
如果有人知道我怎么不能得到Latensy,数据包发送,recitter,Jitter等。
也许某种用于PHP Ping的第三方API。 提前谢谢
答案 0 :(得分:1)
您必须使用socket_create(),因为ping使用ICMP,而fsockopen仅用于TCP和UDP。 ICMP echo数据包不指定任何端口。在socket_create手册中,在用户注释中有几个ping()示例实现。
答案 1 :(得分:1)
您可以在RFC 792
中查看ICMP数据包格式虽然ICMP是layer3协议,但端口号在layer4中定义。所以你永远不会在ICMP数据包中找到端口号
这意味着,您可以在两个主机(IP)之间获得延迟,但是您无法在IP:端口之间获得延迟。