SuperAPI AI 工具集

port-scan

安全与审计

查看项目

更新于 10-16 05:38

技能介绍

用途

该技能使用 nmap 检测目标主机上的开放端口,并收集服务版本与操作系统信息。它执行分阶段扫描:从快速的热门端口扫描开始,再到详细的服务版本探测和操作系统指纹识别,并将结果保存为结构化格式。

重要提示:该技能必须仅在已获得明确书面授权的系统上使用。未经授权的端口扫描在多数司法管辖区属于违法行为,且违反服务条款。

适用场景

  • 在渗透测试范围内建立服务清单
  • 检测不必要暴露的服务
  • 验证服务版本以映射 CVE
  • 定期审计网络防御态势

前提条件

安装 nmap:

# Ubuntu/Debian
sudo apt-get install -y nmap
# CentOS/RHEL
sudo yum install -y nmap
  • 需要目标系统的书面授权。
  • 操作系统检测和部分扫描技术需要 root/sudo 权限。
  • 环境变量 SECSKILL_TARGET:目标 IP、IP 范围或主机名。

输入

变量 是否必填 说明
SECSKILL_TARGET 必填 扫描目标(IP、CIDR、主机名)
SECSKILL_OUTPUT_DIR 可选 结果输出目录(默认:./output)
SECSKILL_SCAN_SPEED 可选 nmap 速度模板 T1-T5(默认:T3)
SECSKILL_TOP_PORTS 可选 快速扫描中检查的热门端口数量(默认:1000)

工作流程

步骤 1:确认授权并准备环境

export TARGET="${SECSKILL_TARGET:?Set the SECSKILL_TARGET environment variable}"
export OUTDIR="${SECSKILL_OUTPUT_DIR:-./output}"
export SPEED="${SECSKILL_SCAN_SPEED:-T3}"
export TOP_PORTS="${SECSKILL_TOP_PORTS:-1000}"
mkdir -p "$OUTDIR"

echo "================================================================"
echo " WARNING: This scan must only be performed on authorized targets."
echo " Unauthorized scanning is illegal and carries legal liability."
echo "================================================================"
echo "[*] Scan target: $TARGET"
echo "[*] Output path: $OUTDIR"

SAFE_NAME=$(echo "$TARGET" | tr '/:' '__')

步骤 2:快速热门端口扫描

echo "[*] Step 1: Starting fast scan of top $TOP_PORTS ports..."
nmap -$SPEED \
  --top-ports "$TOP_PORTS" \
  -oN "$OUTDIR/quick_scan_${SAFE_NAME}.txt" \
  -oX "$OUTDIR/quick_scan_${SAFE_NAME}.xml" \
  "$TARGET" 2>/dev/null

echo "[+] Fast scan complete"
echo "[*] Discovered open ports:"
grep "^[0-9].*open" "$OUTDIR/quick_scan_${SAFE_NAME}.txt" | tee /tmp/open_ports.txt
OPEN_COUNT=$(wc -l < /tmp/open_ports.txt)
echo "[+] Open port count: $OPEN_COUNT"

步骤 3:详细服务版本扫描

# Extract open ports only for detailed scan
OPEN_PORTS=$(grep "^[0-9].*open" "$OUTDIR/quick_scan_${SAFE_NAME}.txt" \
  | awk -F'/' '{print $1}' | tr '\n' ',' | sed 's/,$//')

if [ -z "$OPEN_PORTS" ]; then
  echo "[-] No open ports found. Exiting scan."
  exit 0
fi

echo "[*] Step 2: Detailed service version scan (ports: $OPEN_PORTS)..."
nmap -$SPEED \
  -p "$OPEN_PORTS" \
  -sV \
  --version-intensity 7 \
  -sC \
  -oN "$OUTDIR/service_scan_${SAFE_NAME}.txt" \
  -oX "$OUTDIR/service_scan_${SAFE_NAME}.xml" \
  "$TARGET" 2>/dev/null

echo "[+] Service version scan complete"

步骤 4:操作系统检测(需要 root)

echo "[*] Step 3: Attempting OS detection..."
if [ "$(id -u)" -eq 0 ]; then
  nmap -$SPEED \
    -p "$OPEN_PORTS" \
    -O \
    --osscan-guess \
    -oN "$OUTDIR/os_scan_${SAFE_NAME}.txt" \
    "$TARGET" 2>/dev/null

  OS_INFO=$(grep -iE "OS details:|Aggressive OS guesses:" "$OUTDIR/os_scan_${SAFE_NAME}.txt" | head -3)
  echo "[+] OS detection results:"
  echo "${OS_INFO:-(OS detection failed - more open ports may be required)}"
else
  echo "[-] OS detection skipped (root required). Re-run with sudo to enable."
fi

步骤 5:UDP 关键服务扫描(可选,需要 root)

if [ "$(id -u)" -eq 0 ]; then
  echo "[*] Step 4: UDP key service scan (DNS/SNMP/NTP etc.)..."
  nmap -$SPEED \
    -sU \
    -p 53,67,68,69,123,161,162,500,514,1900 \
    -oN "$OUTDIR/udp_scan_${SAFE_NAME}.txt" \
    "$TARGET" 2>/dev/null
  echo "[+] UDP scan complete"
else
  echo "[-] UDP scan skipped (root required)"
fi

步骤 6:结果汇总

echo ""
echo "===== Port Scan Results Summary ====="
echo "Target         : $TARGET"
echo "Open port count: $OPEN_COUNT"
echo ""
echo "[ Service list ]"
grep "^[0-9].*open" "$OUTDIR/service_scan_${SAFE_NAME}.txt" 2>/dev/null \
  || grep "^[0-9].*open" "$OUTDIR/quick_scan_${SAFE_NAME}.txt"
echo ""
echo "Output files:"
echo "  - $OUTDIR/quick_scan_${SAFE_NAME}.txt"
echo "  - $OUTDIR/service_scan_${SAFE_NAME}.txt"
echo "  - $OUTDIR/service_scan_${SAFE_NAME}.xml (structured data)"
echo "====================================="

完成标志

  • 快速扫描和服务版本扫描结果文件已创建
  • 结构化 XML 结果文件已保存
  • 已打印开放端口列表和服务信息

失败模式

症状 原因 解决方法
nmap: command not found 未安装 运行 apt-get install nmap
所有端口被过滤 防火墙或 IPS 拦截 添加 -Pn 参数,尝试不同的扫描技术
扫描非常慢 网络延迟或 T1/T2 速度 使用 SECSKILL_SCAN_SPEED=T4 提升速度
操作系统检测失败 开放端口不足或无权限 使用 sudo 运行,扫描更多端口后重试
连接被拒绝 目标离线或被过滤 使用 -Pn 跳过 ping

注意事项

  • 法律警告:未经授权的端口扫描可能面临刑事起诉。务必获得书面授权。
  • -T4 或 -T5 很可能触发 IDS/IPS 告警。隐蔽测试请使用 -T1 或 -T2。
  • XML 输出可与 nuclei-scan 技能和漏洞管理平台集成。
  • NSE 脚本(-sC)也会执行一些基础漏洞检查(例如 SMB 签名、SSL 证书信息)。