input('host'); $port = $request->input('port', 22); $transport = $request->input('transport', 'tcp'); $timeout = $request->input('timeout', 0.5); if (empty($host)) { echo "使用方法:"; echo "
"; echo "GET /api/ping?host=www.baidu.com&port=80&transport=tcp&timeout=0.5"; echo "
"; echo "host:检测地址,必传,可以是域名、IPv4、IPv6"; echo "
"; echo "port:检测端口,可不传,默认22"; echo "
"; echo "transport:检测协议,可不传,默认tcp,可以是tcp、udp"; echo "
"; echo "timeout:检测超时,单位秒,可不传,默认0.5秒,建议不超过3秒"; echo "
"; echo "成功返回:1,失败返回:0"; exit(); } // 如果不是IPv4 if (false === filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { // 如果是IPv6 if (filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { $host = '[' . $host . ']'; } else { $host = gethostbyname($host); } } $transport = $transport . '://'; try { $fp = stream_socket_client($transport . $host . ':' . $port, $errno, $errstr, $timeout); if (!$fp) { Log::info("$errstr ($errno)"); $ret = 0; } else { $ret = 1; } fclose($fp); return $ret; } catch (\Exception $e) { Log::info($e); return 0; } } }