使用端口ping ip,不返回任何内容,PHP / APACHE

时间:2011-10-17 23:10:49

标签: php apache

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

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

我如何ping 80端口?一旦提供端口,就什么都不返回..试图通过':80'和'80'

将它添加到最后

任何想法都是适用的!

4 个答案:

答案 0 :(得分: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,但也包括其他传输协议)不会以这种方式运行,并且除非覆盖的应用层协议实现数据报,否则将无法确认数据报。

您以这种方式提出这个问题的事实告诉我,您对Transport Layer协议的知识存在根本性差距。您应该阅读ICMPTCP以及OSI Model

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

通常,您无法ping端口:ping适用于没有端口抽象的ICMP。

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

答案 3 :(得分: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');