使用端口 Ping ip,没有返回任何内容,PHP/APACHE

问题描述 投票:0回答:4

我正在使用以下内容来获取 IP 或域的状态

<?php
 system('ping -c1 -w1 193.33.186.70') ;
?>

我如何 ping 端口 80?一旦提供端口,就什么也不返回。尝试通过 ':80' 和 ' 80' 将其添加到末尾

任何想法表示赞赏!

php apache
4个回答
4
投票

如果您想要了解给定主机是否接受端口 80 上的 TCP 连接,您可以这样做:

$host = '193.33.186.70';
$port = 80;
$waitTimeoutInSeconds = 1;
if ($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)) {
  // It worked
} else {
  // It didn't work
}
fclose($fp);

对于 TCP 以外的任何其他协议,都会更困难(尽管由于您指定了 80,我猜您正在寻找一个活动的 HTTP 服务器,所以 TCP 就是您想要的)。 TCP 是排序和确认的,因此当连接成功建立时,您将隐式收到返回的数据包。大多数其他传输协议(通常是 UDP,但也有其他协议)不会以这种方式运行,除非覆盖的应用层协议实现它,否则数据报将不会被确认。 刷新您对传输层协议的了解。您应该阅读 ICMPTCP,以及 OSI 模型


2
投票

Ping 命令使用的不是

TCP
协议,而是
ICMP
协议。所以你不能使用 TCP 端口 80。

您可以使用 fsockopen()cURL 来 ping 服务器并使用 gethostbyaddr() 来获取域名。


1
投票

通常,您无法 ping 端口:

ping
通过 ICMP 工作,它没有端口抽象。

如果您只想检查给定端口是否处于活动状态,请使用套接字或(对于端口 80)

curl


0
投票

ping 发送 ICMP 数据包。要测试 TCP 端口,您需要发送 TCP 数据包。

但是,即使打开并立即关闭 TCP 连接通常也不是您想要的。相反,只需测试您期望在那里的服务。例如,测试 HTTP 服务器是否正常工作:

<?php
$ch = curl_init("http://www.example.com/");
curl_setopt($ch, CURLOPT_NOBODY, true);
$ping_result = curl_exec($ch);
curl_close($ch);
echo 'Service ' . ($ping_result ? 'up' : 'down');
© www.soinside.com 2019 - 2024. All rights reserved.