基于PHP实现端口批量查询工具

admin 轻心小站 关注 LV.19 运营
发表于php技术学习版块 教程

 基于PHP实现端口批量查询工具,你可以创建一个命令行脚本,该脚本能够接受一系列IP地址和端口号作为输入,并检查这些端口的开放状态。以下是一个简单的端口扫描器的实现示例:#!/usr

 基于PHP实现端口批量查询工具,你可以创建一个命令行脚本,该脚本能够接受一系列IP地址和端口号作为输入,并检查这些端口的开放状态。以下是一个简单的端口扫描器的实现示例:

#!/usr/bin/env php
<?php
// 确保脚本以命令行模式运行
if (php_sapi_name() !== 'cli') {
    exit('This script must be run on the command line.');
}

// 检查是否提供了IP地址和端口范围作为参数
if ($argc < 3) {
    exit('Usage: php port-scanner.php <IP_address> <start_port> <end_port> [threads]');
}

// 获取命令行参数
$ipAddress = $argv[1];
$startPort = intval($argv[2]);
$endPort = intval($argv[3]);
$threads = isset($argv[4]) ? intval($argv[4]) : 10; // 默认使用10个线程

// 确保端口范围有效
if ($startPort > $endPort) {
    exit('Start port must be less than or equal to end port.');
}

// 函数:检查端口是否开放
function isPortOpen($ip, $port, $timeout = 1) {
    $socket = @fsockopen($ip, $port, $errno, $errstr, $timeout);
    if (is_resource($socket)) {
        fclose($socket);
        return true;
    }
    return false;
}

// 多线程处理
class PortScannerThread extends Thread {
    private $ipAddress;
    private $startPort;
    private $endPort;

    public function __construct($ipAddress, $startPort, $endPort) {
        $this->ipAddress = $ipAddress;
        $this->startPort = $startPort;
        $this->endPort = $endPort;
    }

    public function run() {
        for ($port = $this->startPort; $port <= $this->endPort; $port++) {
            if (isPortOpen($this->ipAddress, $port)) {
                echo "{$this->ipAddress}:{$port} is open.\n";
            }
        }
    }
}

// 创建并启动线程
$threadsArray = [];
for ($i = 0; $i < $threads; $i++) {
    $thread = new PortScannerThread($ipAddress, $startPort, $endPort);
    $thread->start();
    $threadsArray[] = $thread;
}

// 等待所有线程完成
foreach ($threadsArray as $thread) {
    $thread->join();
}

将上述代码保存为port-scanner.php,并通过命令行运行。例如:

php port-scanner.php 192.168.1.1 1 1024 --threads 20

这个脚本会创建20个线程来检查IP地址192.168.1.1上的端口1到1024是否开放,并输出开放的端口。

请注意,端口扫描可能会违反某些网络的使用条款,或者在某些司法管辖区是非法的。在使用端口扫描器之前,请确保你有权限对目标IP地址进行扫描,并且你的行为符合当地法律和网络政策。此外,这个脚本是一个简单的示例,没有错误处理和优化,实际使用时可能需要进一步改进和增强安全性。

文章说明:

本文原创发布于探乎站长论坛,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,探乎站长论坛平台仅提供信息存储空间服务。

评论列表 评论
发布评论

评论: 基于PHP实现端口批量查询工具

粉丝

0

关注

0

收藏

0

已有0次打赏