跳转至

信息收集 - 端口扫描

工具对比

工具 速度 原理 适用场景
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/普通程序:  应用层 → 内核协议栈 → 自动路由/封装 → 兼容所有接口
masscan:       应用层 → 自造以太网帧 → 直接写网卡 → 只能走有 L2 的物理接口

解决方案: - 直接用 nmap -Pn -p- -T4 --min-rate=1000 - 或在 Linux(Kali/Parrot)虚拟机中跑 masscan


速查

场景 推荐命令
本机端口 ss -tlnplsof
局域网主机发现 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>