在 windows 机器上 ping 什么端口来检查它是否在线?

What port to ping on windows machine to check if it is online?

如问题所述,我正在使用此 PHP 函数来检查特定端口上的 IP 地址是否正在应答。

function ping($host) {

    $port = 5900;  //RealVNC default port
    $waitTimeoutInSeconds = 0.01;

    if ($fp = @fsockopen($host, $port, $errCode, $errStr,$waitTimeoutInSeconds)) {
        fclose($fp);
        echo '<img src="online.png"> ';
    } else {

        echo '<img src="offline.png"> ';
    }
}

windows (7,8,10) 上是否有任何默认端口可以通过此脚本 "pinged" 检查它是否可以在不启用或安装任何东西的情况下访问? - 我想检查我网络中 500 台电脑的状态。

如果您在 Windows 环境中,您可以使用查找免费的 IP 扫描器,或者您可以在 Linux 环境中使用 nmap 来 运行 对给定网络 ID 进行全面扫描.

下一个使用 nmap 的命令:

nmap -sP 192.168.2.1/24

将显示 192.168.2.x 网络上的所有在线客户端。

这是 link 到 php ip 扫描器脚本: https://gist.github.com/blazeeboy/808796

Nmap 通常默认带有 Linux 操作系统,除非它是最小安装。

参考:PHP: socket_create - Manual

<?PHP
        function ping($host, $timeout = 1) {
                /* ICMP ping packet with a pre-calculated checksum */
                $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
                $socket  = socket_create(AF_INET, SOCK_RAW, 1);
                socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
                socket_connect($socket, $host, null);

                $ts = microtime(true);
                socket_send($socket, $package, strLen($package), 0);
                if (socket_read($socket, 255))
                        $result = microtime(true) - $ts;
                else    $result = false;
                socket_close($socket);

                return $result;
        }
?>