我使用下列获得的地位和IP或域名执行ping IP与端口,没有返回值,PHP/Apache的
<?php
system('ping -c1 -w1 193.33.186.70') ;
?>
我怎么会ping通口80寿?一旦端口被提供,就不会返回任何东西..试图通过':80'和'80'将它添加到末尾
任何想法appreaciated!
我使用下列获得的地位和IP或域名执行ping IP与端口,没有返回值,PHP/Apache的
<?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,但其他传输协议)不以这种方式工作,除非重叠的应用层协议实现它,否则数据报将不会被确认。
您以这种方式询问这个问题的事实告诉我,您在Transport Layer协议方面的知识存在根本差距。您应该阅读ICMP和TCP以及OSI Model。
通常情况下,您无法ping通端口:ping
对ICMP没有端口抽象。
如果您想要的只是检查给定端口是否处于活动状态,请使用套接字或(对于端口80)curl
。
Ping命令没有使用TCP
协议,而是ICMP
协议。因此您不能使用TCP端口80.
您可以使用fsockopen()或cURL来ping服务器,并使用gethostbyaddr()来获取域名。
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');