Rumah  >  Artikel  >  pembangunan bahagian belakang  >  php实现的ping端口函数实例代码

php实现的ping端口函数实例代码

怪我咯
怪我咯asal
2017-07-16 11:18:211867semak imbas

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>

Atas ialah kandungan terperinci php实现的ping端口函数实例代码. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn