ping一个端口的ip,什么都不返回,PHP / APACHE

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

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

我将如何ping 80端口? 一旦提供了端口,就不会返回任何东西。试图用':80'和'80'来添加它,

任何想法appreaciated!

如果你想要做的是找出一个给定的主机是否接受端口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,但也有其他协议)不以这种方式工作,除非重叠的应用层协议实现它,否则数据报将不会被确认。

你这样问这个问题的事实告诉我,你在传输层协议方面的知识有一个根本性的差距。 你应该阅读ICMP和TCP以及OSI模型 。

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

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

一般情况下,您不能Ping一个端口: ping工作在没有端口抽象的ICMP上。

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

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');