运用php中的socket函数,可以简单的写出一个端口扫描工具,性能不怎么好,不过玩玩儿,够了。
运用fsockopen函数,探测过程中,可能会出现警告信息,加上@就可以了,该函数成功返回句柄,失败返回false。
函数原型如下:
resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
参数分别为,主机名,端口号,错误号,错误信息,检测的超时时间。
扫描函数如下:
function scan($ip){
$error_no = $error_str = "";
for ($p = 0; $p < 65535; $p++) {
if(@fsockopen($ip,$p,&$error_no,&$error_str,1)){
echo "$p opened!
";
}
}
}
可以检测一下本机的端口,如果是lamp结构的话,那么80端口应该是打开的,标准的web服务端口。3306应该也是打开的,是mysql的端口。
检测本地主机,速度还是可以的,不过加上远程主机就有点儿麻烦了,超时时间1秒钟,运行完整个程序估计要几个小时吧!建议用cli方式运行,或者用ini_set来调整运行的时间,否则,以网页方式会因为超过请求的限定时间而终止程序。