我使用下列獲得的地位和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');