如何在PHP中找到所有的监听端口?

时间:2016-01-15 16:20:04

标签: php sockets networking port

我正在研究PHP应用程序,我需要找出所有具有监听状态的端口。

注意:fsockopen()仅适用于已建立的连接。

1 个答案:

答案 0 :(得分:1)

这应该为您提供本地IP地址的侦听端口列表。我在这里使用system()和netstat命令,确保你的PHP安装可以使用该函数并首先测试终端的netstat输出以查看它是否有效。

编辑:增加了对windows和linux的支持。

<PagerStyle HorizontalAlign="Center" CssClass="gvwCasesPager"/>

输出:

function get_listening_ports()
{
    $output  = array();
    $options = ( strtolower( trim( @PHP_OS ) ) === 'linux' ) ? '-atn' : '-an';

    ob_start();
    system( 'netstat '.$options );

    foreach( explode( "\n", ob_get_clean() ) as $line )
    {
        $line  = trim( preg_replace( '/\s\s+/', ' ', $line ) );
        $parts = explode( ' ', $line );

        if( count( $parts ) > 3 )
        {
            $state   = strtolower( array_pop( $parts ) );
            $foreign = array_pop( $parts );
            $local   = array_pop( $parts );

            if( !empty( $state ) && !empty( $local ) )
            {
                $final = explode( ':', $local );
                $port  = array_pop( $final );

                if( is_numeric( $port ) )
                {
                    $output[ $state ][ $port ] = $port;
                }
            }
        }
    }
    return $output;
}