QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4574|回复: 4

[PHP开发] PHP监控服务器的TCP连接数?

[复制链接]

3

主题

10

帖子

64

积分

新手上路

Rank: 1

积分
64
发表于 2016-4-15 17:51:47 | 显示全部楼层 |阅读模式
5Z币
如何通过PHP来获取一个服务器的端口上,当前有多少个连接数?

0

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2016-4-16 09:30:57 来自手机 | 显示全部楼层
杨若风 发表于 2016-4-15 17:51
如何通过PHP来获取一个服务器的端口上,当前有多少个连接数?

可以用php调用系统命令来获取到

3

主题

10

帖子

64

积分

新手上路

Rank: 1

积分
64
 楼主| 发表于 2016-4-21 10:18:49 | 显示全部楼层
Jacky 发表于 2016-4-16 09:30
可以用php调用系统命令来获取到

那得PHP服务器的用户有权限访问才行,如果要监控另一台服务器呢,上面没有PHP环境,调不了系统命令啊?

0

主题

6

帖子

28

积分

新手上路

Rank: 1

积分
28
发表于 2016-4-22 20:57:51 | 显示全部楼层
在国外论坛找的一段代码,给修改了一下子, 也许能帮助你, Windows 与Linux 服务器的命令少许不同。<?php
class netstat {
    public $PortsInUse = 0;
    public $AvailablePorts = 0;
    public $TotalPorts = 0;
    public $Ports = array();
    #this is which port you want to monitor.
    public $find_port = '80';
    public $count = 0;
    public function __construct () {
        // $p = popen('netsh int ipv4 show dynamicport tcp', 'r');
        // $this->TotalPorts = rtrim(trim(explode("Number of Ports : ", stream_get_contents($p))[1]));
        // pclose($p);
        #Windows 服务器与Linux 服务器命令稍微不同
            #for Windows Server run
        // $netstat = popen('netstat -no', 'r');
        #for Linux Server
        $netstat = popen('netstat -ntu','r');
        $log = stream_get_contents($netstat);
        pclose($netstat);

        $this->Ports = array_slice(explode("\n", $log), 4);
        array_pop($this->Ports);

        foreach($this->Ports as &$port) {
            $port = explode(" ", $port);
            foreach($port as $k => $p) {
                if ($p=='')
                    unset($port[$k]);
            }

            // $port = array_values($port);
            // $port = (object)array(
            //     "LocalAddress" => $port[0],
            //     "ForeignAddress" => $port[1],
            //     "Status" => $port[2],
            //     "ProcessId" => $port[3]
            // );
            $j = 0;       
            $bz =0;
                        $port_array = array();
                        #打印每个端口
                        var_dump($port);
                        #this is for windows server
            // foreach ($port as $key =>$value){
            //         #when count how many port, then only calculate once if local port or remote port when in one line.
            //         if ($j==1){
            //                 $port_array['LocalAddress'] = $value;
            //                 if (stristr($value,$this->find_port)&& $bz==0){
                          //                    $this->count++;
                          //                    $bz=1;
                          //   }
            //         }
            //         else if ($j==2){
            //                 $port_array['ForeignAddress'] = $value;
            //                 if (stristr($value,$this->find_port)&& $bz==0){
                          //                           $this->count++;
                          //                           $bz =1;
            //                 }
            //         }
            //         else if ($j==3){
            //                 $port_array['Status'] =$value;
            //         }
            //         else if($j==4){
            //                 $port_array['ProcessId'] =$value;
            //         }
            //         $j++;
            // }
            #this is for Linux server, var_dump($port) 后,根据数组,可能需要改变$j 坐标
            foreach ($port as $key =>$value){
                    #when count how many port, then only calculate once if local port or remote port when in one line.
                    if ($j==3){
                            $port_array['LocalAddress'] = $value;
                            if (stristr($value,$this->find_port)&& $bz==0){
                                             $this->count++;
                                             $bz=1;
                            }
                    }
                    else if ($j==4){
                            $port_array['ForeignAddress'] = $value;
                            if (stristr($value,$this->find_port)&& $bz==0){
                                                    $this->count++;
                                                    $bz =1;
                            }
                    }
                    else if ($j==5){
                            $port_array['Status'] =$value;
                    }
                   
                    $j++;
            }
            #只打印,本地ip, 远程访问ip,状态
            var_dump($port_array);
            $port_array = array();
            $bz =0;
        }

        $this->PortsInUse = count($this->Ports);
        $this->AvailablePorts = $this->TotalPorts - count($this->Ports);
    }
}
$netstat = new netstat();
echo "there are $netstat->count connectings in server $netstat->find_port port<br> ";


?>

0

主题

6

帖子

28

积分

新手上路

Rank: 1

积分
28
发表于 2016-4-22 21:01:28 | 显示全部楼层
参考资料
http://stackoverflow.com/questions/33397010/monitor-tcp-ip-port-consumption-via-php

http://www.blackmoreops.com/2014/09/25/find-number-of-unique-ips-active-connections-to-web-server/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

     
    战略合作|联系方式|广告赞助|商务合作|手机版|小黑屋|( 京ICP备14036609号-6 )

GMT+8, 2017-12-18 15:01

© 2013-2017 Powered by Discuz! X3.3. 本站由 又拍云 提供 CDN 图片存储服务

快速回复 返回顶部 返回列表