信息收集 - 端口扫描¶
工具对比¶
| 工具 | 速度 | 原理 | 适用场景 |
|---|---|---|---|
| nmap | 中等 | 系统网络栈(L3+) | 通用,服务识别,VPN 环境 |
| masscan | 极快 | 自造以太网帧(L2),绕过内核 | 大范围快扫,物理网卡/Linux 环境 |
| ss/netstat | 即时 | 读内核信息 | 查看本机监听端口 |
| lsof | 即时 | 读内核信息 | 本机端口 + 进程关联 |
| nc (netcat) | 慢 | 系统网络栈 | 测试单个端口 |
nmap¶
常用命令¶
# 扫描常见 1000 端口
nmap <目标IP>
# 全端口扫描(推荐日常用法)
nmap -Pn -p- -T4 --min-rate=1000 <目标IP>
# 节省时间
nmap -Pn -sT --top-ports 1000 -T4 <目标IP>
# 服务版本识别(对已发现端口精扫)
nmap -Pn -sV -p <端口列表> <目标IP>
# 局域网主机发现
nmap -sn 192.168.1.0/24
# 批量扫描
nmap -T4 192.168.1.10-50
关键参数¶
| 参数 | 作用 |
|---|---|
-Pn | 跳过主机发现,直接扫端口(VPN/防火墙场景必加) |
-p- | 扫全部 65535 端口 |
-p 22,80,443 | 指定端口 |
-T4 | 速度与准确性最佳平衡(T5 太激进易漏) |
--min-rate=1000 | 保证最低发包速率 |
-sV | 探测服务版本 |
-sn | 只做主机发现,不扫端口 |
masscan¶
常用命令¶
# 扫描指定端口(需 sudo)
sudo masscan 192.168.1.0/24 -p22,80,443,3306,8080,8443 --rate=1000
# 全端口扫描
sudo masscan 192.168.1.0/24 -p1-65535 --rate=1000
# 输出到文件
sudo masscan 192.168.1.0/24 -p1-65535 --rate=1000 -oL result.txt
# 查看 masscan 会用哪个接口(排错用)
sudo masscan <目标IP> -p80 --rate=100 --echo
关键参数¶
| 参数 | 作用 |
|---|---|
--rate=N | 发包速率,局域网可设 1000~10000,外网建议 ≤1000 |
--adapter=<接口> | 指定网卡 |
-oL | 输出为列表格式 |
--send-ip | 发纯 IP 包(Linux 支持,macOS 不支持) |
masscan + nmap 组合(最佳实践)¶
# 1. masscan 快速发现开放端口
sudo masscan <目标IP> -p1-65535 --rate=1000 -oL scan.txt
# 2. nmap 精细识别服务
nmap -sV -p <masscan发现的端口> <目标IP>
本机端口查看¶
# Linux - 查看所有监听端口
ss -tlnp # TCP
ss -ulnp # UDP
# macOS
sudo lsof -iTCP -sTCP:LISTEN -P -n
# 通用
lsof -i -P -n | grep LISTEN
netstat -tlnp
踩坑记录¶
macOS + VPN(tun) + masscan = 不可用¶
现象: sudo masscan 扫描 VPN 隧道对端主机,结果为空。
根因: - masscan 绕过内核协议栈,直接构造 L2 以太网帧 往网卡上发 - VPN 隧道接口(utun)是 L3 接口,只接受 IP 包,没有以太网帧头的概念 - masscan 塞以太网帧进 utun → 接口不认 → 包被丢弃 - macOS 版 masscan 不支持 --send-ip(会报 unsupported, we only do --send-eth)
原理对比:
解决方案: - 直接用 nmap -Pn -p- -T4 --min-rate=1000 - 或在 Linux(Kali/Parrot)虚拟机中跑 masscan
速查¶
| 场景 | 推荐命令 |
|---|---|
| 本机端口 | ss -tlnp 或 lsof |
| 局域网主机发现 | nmap -sn 192.168.x.0/24 |
| 快速全端口扫描 | nmap -Pn -p- -T4 --min-rate=1000 <IP> |
| 大范围快扫(Linux) | sudo masscan <网段> -p1-65535 --rate=5000 |
| VPN 隧道对端 | nmap -Pn(masscan 不可用) |
| 服务版本识别 | nmap -sV -p <端口> <IP> |