首頁  >  文章  >  後端開發  >  php實作的ping端口函數實例代碼

php實作的ping端口函數實例代碼

怪我咯
怪我咯原創
2017-07-16 11:18:211842瀏覽

Ping是Windows、Unix和Linux系統下的一個指令。 ping也屬於一個通訊協議,是TCP/IP協定的一部分。利用「ping」指令可以檢查網路是否連通,可以很好地幫助我們分析和判定網路故障。應用程式格式:Ping空格IP位址。此指令還可以加許多參數使用,具體是鍵入Ping按回車即可看到詳細說明。

PING (Packet Internet Groper),因特網包探索器,用於測試網路連線量的程式。 Ping發送一個ICMP(Internet Control Messages Protocol)即因特網信報控制協定;迴聲請求訊息給目的地並報告是否收到所希望的ICMPecho (ICMP迴聲應答)。它是用來檢查網路是否通暢或網路連線速度的命令。身為一個生活在網路上的管理員或駭客來說,ping指令是第一個必須掌握的DOS指令,它所利用的原理是這樣的:利用網路上機器IP位址的唯一性,給目標IP位址發送一個資料包,再要求對方回傳一個同樣大小的資料包來決定兩台網路機器是否連接相通,時延是多少。

ping指的是端對端連通,通常用來作為可用性的檢查, 但是某些病毒木馬會強行大量遠端執行ping命令搶佔你的網路資源,導致系統變慢,網速變慢。嚴禁ping入侵作為大多數防火牆的基本功能提供給使用者進行選擇。通常的情況下你如果不用作伺服器或進行網路測試,可以放心的選中它,保護你的電腦。

這篇文章主要介紹了php實現的ping端口函數,以實例形式較為詳細的分析了PHP使用socket編程的技巧,需要的朋友可以參考下,具體實現代碼如下:

<?php
/*
 * @function   可以ping端口的php函数
 *
 */
    error_reporting(E_ERROR);
    header("content-Type: text/html; charset=utf-8");
    set_time_limit(120);
    $host = isset($_POST[&#39;url&#39;]) ? chop(str_replace(&#39;http://&#39;,&#39;&#39;,$_POST[&#39;url&#39;])) : &#39;www.baidu.com&#39;;
    $port = isset($_POST[&#39;duankou&#39;]) ? chop($_POST[&#39;duankou&#39;]) : &#39;80&#39;;
    $num  = 10;
    function microtime_float()
    {
            list($usec, $sec) = explode(" ", microtime());
            return ((float)$usec + (float)$sec);
    }
    function getsoft($host,$port)
    {
            $fp = @fsockopen($host,$port,&$errno,&$errstr,3);
            if(!$fp) return &#39;unknown&#39;;
            $get = "GET / HTTP/1.1\r\nHost:".$host."\r\nConnection: Close\r\n\r\n";
            @fputs($fp,$get);
            $data = &#39;&#39;;
            while ($fp && !feof($fp))
            $data .= fread($fp, 1024);
            @fclose($fp);
            $array = explode("\n",$data);
            $k = 2;
            for($i = 0;$i < 20;$i++)
            {
                    if(stristr($array[$i],&#39;Server&#39;)){$k = $i; break;}
            }
            if(!stristr($array[$k],&#39;Server&#39;)) return &#39;unknown&#39;;
            else return str_replace(&#39;Server&#39;,&#39;服务器软件&#39;,$array[$k]);
    }
    function ping($host,$port)
    {
            $time_start = microtime_float();
            $ip = gethostbyname($host);
            $fp = @fsockopen($host,$port,&$errno,&$errstr,1);
            if(!$fp) return &#39;Request timed out.&#39;."\r\n";
            $get = "GET / HTTP/1.1\r\nHost:".$host."\r\nConnection: Close\r\n\r\n";
            @fputs($fp,$get);
            @fclose($fp);
            $time_end = microtime_float();
            $time = $time_end - $time_start;
            $time = ceil($time * 1000);
            return &#39;Reply from &#39;.$ip.&#39;: time=&#39;.$time.&#39;ms&#39;;
    }
    if(isset($_POST[&#39;url&#39;]) && isset($_POST[&#39;duankou&#39;]))
    {
            echo &#39;<font color="#FF0000">&#39;.getsoft($host,$port).&#39;</font>&#39;;
            echo &#39;Pinging &#39;.$host.&#39; [&#39;.gethostbyname($host).&#39;] with Port:&#39;.$port.&#39; of data:&#39;."\r\n";
            ob_flush();
            flush();
            for($i = 0;$i < $num;$i++)
            {
                    echo ping($host,$port);
                    ob_flush();
                    flush();
                    sleep(1);
            }
    }
?>
<form method="POST">
域名/IP:<input type="text" name="url" value="<?php echo $host;?>" size="50"> 
端口:<input type="text" name="duankou" value="<?php echo $port;?>" size="10"> 
<input type="submit" value="ping">
</form>

以上是php實作的ping端口函數實例代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn