---
name: rate-control-detail
description: 速率控制与并发限制详细规范 — 所有渗透测试技能在执行网络请求时必须遵守
---

# 速率控制与并发限制详细规范

> 引用: pentest-boundary §3 — 本文件为 §3 的详细补充

## 1. 各类工具的并发限制配置

### 1.1 扫描类工具

| 工具 | 安全配置 | 最大并发/速率 |
|------|---------|-------------|
| Nmap | `-T2 --max-rate=10 --min-hostgroup=1` | 10 包/秒 |
| Masscan | `--rate 100` (内网) / `--rate 50` (外网) | 100 包/秒 |
| Naabu | `-rate 50 -c 10` | 并发 10 |
| Zmap | `--rate 100` | 100 包/秒 |

### 1.2 Web 扫描/爆破类

| 工具 | 安全配置 | 最大并发/速率 |
|------|---------|-------------|
| ffuf | `-t 10 -rate 50 -p 0.5` | 线程 10, RPS 50 |
| Gobuster | `-t 10 --delay 200ms` | 线程 10, 延迟 200ms |
| Dirsearch | `-t 10 --delay=0.5` | 线程 10, 延迟 0.5s |
| Feroxbuster | `-t 10 --rate-limit 50` | 线程 10, RPS 50 |
| httpx | `-t 10 -rl 50` | 线程 10, RPS 50 |

### 1.3 注入/漏洞利用类

| 工具 | 安全配置 | 最大并发/速率 |
|------|---------|-------------|
| SQLMap | `--threads 5 --delay 2` | 线程 5, 延迟 2s |
| Hydra | `-t 4 -W 5` | 线程 4, 超时 5s |
| Medusa | `-t 5` | 线程 5 |
| John/Hashcat | 本地计算，无网络请求 | 不限 |

### 1.4 自定义脚本并发控制

```python
# ✅ 安全的自定义请求代码
import requests
from concurrent.futures import ThreadPoolExecutor
import time

MAX_CONCURRENCY = 10       # 不超过 10
MAX_RPS = 50               # 每秒不超过 50 请求
REQUEST_DELAY = 0.2        # 每个请求间隔 200ms

def safe_request(url):
    """带速率控制的请求函数"""
    try:
        resp = requests.get(url, timeout=10,
                           headers={'User-Agent': 'Mozilla/5.0'})
        time.sleep(REQUEST_DELAY)
        return resp
    except Exception as e:
        return None

# 使用 ThreadPoolExecutor 控制并发
with ThreadPoolExecutor(max_workers=MAX_CONCURRENCY) as executor:
    results = list(executor.map(safe_request, urls))
```

## 2. 请求量梯度控制

### 2.1 测试启动检查流程

```
Step 0: 发送 1 个请求确认目标可达 → ✅ / ❌ 不可达
Step 1: 发送 5 个请求评估响应速度 → avg response time
Step 2: 根据响应速度计算安全并发数
   ├─ avg < 100ms → 可用并发: 10 (满配)
   ├─ avg 100-500ms → 可用并发: 5
   ├─ avg 500-1000ms → 可用并发: 3
   └─ avg > 1000ms → 限制并发: 1 + 检查目标是否过载
Step 3: 逐步增加请求量，每次增加 ≤5，观察响应速度和错误率
```

### 2.2 错误率监控

| 响应模式 | 判断 | 操作 |
|---------|------|------|
| 5xx 错误率 > 5% | 目标可能过载 | 降低速率 50% |
| 5xx 错误率 > 20% | 目标已过载 | 停止测试，等待 5 分钟后以 1/4 速率恢复 |
| 连接超时 > 10% | 目标过载/网络问题 | 停止测试 |
| 请求全部超时 | 目标可能已宕机 | **立即停止所有操作，记录事故报告** |

## 3. 禁止的操作场景

| 场景 | 原因 | 替代方案 |
|------|------|---------|
| 对登录页面大量字典爆破 | 可能触发账户锁定/导致登录拥堵 | 使用小字典(≤50)，确认锁定策略后再扩展 |
| 对搜索接口模糊测试 | 搜索是数据库密集型操作 | 使用精确参数测试，避免通配符模糊搜索 |
| 对文件上传接口大量上传 | 消耗存储和带宽 | 每次仅上传 1 个文件验证，测试后立即删除 |
| 对邮件发送接口批量测试 | 导致大量邮件发送 | 每次仅发 1 封，修改邮件内容而非批量发送 |
| WebSocket 连接大量创建 | 消耗连接池资源 | 每次仅建 1 个连接，验证完立即关闭 |
| GraphQL 批量查询 | 深度递归查询消耗数据库 | 限制嵌套深度 ≤3，单次查询 ≤10 条 |

## 4. 速率控制检查清单

在每次执行批量请求操作前，逐项检查:

```
速率控制检查清单:
□ 并发数是否 ≤ 10？
□ RPS 是否 ≤ 50？
□ 目标响应速度是否已评估？
□ 字典大小是否在安全范围内？
□ 是否有自动停止机制（超时/错误率阈值）？
□ 是否为目标业务低峰期？
□ 是否有回滚/恢复方案？
□ 是否通知了相关系统管理员？
```

---

> *配合 pentest-boundary SKILL.md §3 使用 | 速率控制：测试不干扰业务*
