PHP ping IP:端口

时间:2014-01-11 11:23:35

标签: php ping

我想基于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。 提前谢谢

2 个答案:

答案 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:端口之间获得延迟。