Products
GG网络技术分享 2025-03-18 16:17 0
基于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地址进行扫描,并且你的行为符合当地法律和网络政策。此外,这个脚本是一个简单的示例,没有错误处理和优化,实际使用时可能需要进一步改进和增强安全性。
Demand feedback