我正在研究PHP应用程序,我需要找出所有具有监听状态的端口。
注意:fsockopen()
仅适用于已建立的连接。
答案 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;
}