Zmap使用教程#
软件介绍#
Zmap是一款高性能的网络扫描器,专为互联网级别的扫描设计,能够在几分钟内扫描整个IPv4地址空间。它的特点是速度极快,同时保持资源占用低。
入门级使用#
基本扫描#
功能说明:扫描目标网络的指定端口
使用示例:
# 扫描单个IP的80端口
zmap -p 80 192.168.1.1
# 扫描IP范围
zmap -p 80 192.168.1.1-192.168.1.100
# 扫描网段
zmap -p 80 192.168.1.0/24
# 扫描多个端口
zmap -p 80,443 192.168.1.0/24参数说明:
-p:指定端口,可使用逗号分隔多个端口
结果输出#
功能说明:将扫描结果输出到文件
使用示例:
# 输出到文本文件
zmap -p 80 192.168.1.0/24 -o scan.txt
# 输出到CSV文件
zmap -p 80 192.168.1.0/24 -o csv:scan.csv
# 输出到JSON文件
zmap -p 80 192.168.1.0/24 -o json:scan.json
# 输出统计信息
zmap -p 80 192.168.1.0/24 -v参数说明:
-o:指定输出文件和格式-v:启用详细输出
初级使用#
速度控制#
功能说明:控制扫描速度
使用示例:
# 设置扫描速率(每秒数据包数)
zmap -p 80 192.168.1.0/24 --rate 1000
# 设置更高速率
zmap -p 80 192.168.1.0/24 --rate 100000
# 设置最大带宽(Mbps)
zmap -p 80 192.168.1.0/24 --bandwidth=10M
# 设置发包间隔
zmap -p 80 192.168.1.0/24 --interval=10ms参数说明:
--rate:设置扫描速率--bandwidth:设置最大带宽--interval:设置发包间隔
扫描控制#
功能说明:控制扫描行为
使用示例:
# 设置扫描的主机数量
zmap -p 80 192.168.1.0/24 --max-targets=100
# 设置扫描时间
zmap -p 80 192.168.1.0/24 --duration=60s
# 设置并发数
zmap -p 80 192.168.1.0/24 --probes=1000
# 设置超时时间
zmap -p 80 192.168.1.0/24 --timeout=5参数说明:
--max-targets:设置扫描的最大目标数--duration:设置扫描持续时间--probes:设置并发探测数--timeout:设置超时时间(秒)
中级使用#
高级选项#
功能说明:使用高级选项进行更灵活的扫描
使用示例:
# 设置源IP地址
zmap -p 80 192.168.1.0/24 --source-ip 192.168.1.100
# 设置源端口
zmap -p 80 192.168.1.0/24 --source-port 53
# 设置网卡接口
zmap -p 80 192.168.1.0/24 -i eth0
# 设置发包大小
zmap -p 80 192.168.1.0/24 --packet-size=64
# 设置TTL值
zmap -p 80 192.168.1.0/24 --ttl=64参数说明:
--source-ip:设置源IP地址--source-port:设置源端口-i:设置网卡接口--packet-size:设置发包大小--ttl:设置TTL值
排除目标#
功能说明:排除特定的IP或IP范围
使用示例:
# 排除单个IP
zmap -p 80 192.168.1.0/24 --exclude=192.168.1.5
# 排除多个IP
zmap -p 80 192.168.1.0/24 --exclude=192.168.1.5,192.168.1.10
# 排除IP范围
zmap -p 80 192.168.1.0/24 --exclude=192.168.1.5-192.168.1.10
# 从文件中读取排除列表
zmap -p 80 192.168.1.0/24 --excludefile=exclude.txt参数说明:
--exclude:排除指定的IP或IP范围--excludefile:从文件中读取排除列表
中上级使用#
防火墙绕过#
功能说明:使用各种技术绕过防火墙
使用示例:
# 设置TCP SYN标志
zmap -p 80 192.168.1.0/24 --probe-module=tcpsyn
# 设置TCP ACK标志
zmap -p 80 192.168.1.0/24 --probe-module=tcpack
# 设置UDP探测
zmap -p 53 192.168.1.0/24 --probe-module=udp
# 设置自定义TCP选项
zmap -p 80 192.168.1.0/24 --probe-module=tcpsyn --probe-args="SYN,ACK,FIN,RST,PSH,URG:U 1024:U 1460"参数说明:
--probe-module:设置探测模块--probe-args:设置探测参数
自定义探测#
功能说明:自定义探测数据包
使用示例:
# 使用HTTP探测模块
zmap -p 80 192.168.1.0/24 --probe-module=http --probe-args="GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
# 使用HTTPS探测模块
zmap -p 443 192.168.1.0/24 --probe-module=ssl
# 使用DNS探测模块
zmap -p 53 192.168.1.0/24 --probe-module=dns --probe-args="example.com"
# 使用ICMP探测模块
zmap 192.168.1.0/24 --probe-module=icmp_echos参数说明:
--probe-module:设置探测模块--probe-args:设置探测参数
高级使用#
大规模扫描#
功能说明:扫描大型网络或整个互联网
使用示例:
# 扫描B类网络
zmap -p 80 192.168.0.0/16 --rate=100000
# 扫描C类网络
zmap -p 443 10.0.0.0/8 --rate=1000000
# 扫描整个互联网
zmap -p 80 0.0.0.0/0 --rate=1000000 --excludefile=exclude.txt
# 分块扫描
zmap -p 80 0.0.0.0/0 --range=1.0.0.0-127.255.255.255 --rate=1000000 --excludefile=exclude.txt
zmap -p 80 0.0.0.0/0 --range=128.0.0.0-255.255.255.255 --rate=1000000 --excludefile=exclude.txt参数说明:
--rate:对于大规模扫描,建议设置较高的速率--range:分块扫描时使用
结果处理#
功能说明:处理和分析扫描结果
使用示例:
# 使用grep过滤结果
zmap -p 80 192.168.1.0/24 -o scan.txt | grep -E "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
# 使用awk处理结果
zmap -p 80 192.168.1.0/24 -o scan.txt | awk '{print $1}' > ip_list.txt
# 与Nmap结合使用
zmap -p 80 192.168.1.0/24 -o scan.txt
cat scan.txt | xargs -I {} nmap -sV {}
# 实时处理结果
zmap -p 80 192.168.1.0/24 | while read ip; do echo "Found HTTP server at $ip"; done参数说明:
-o:指定输出文件
大师级使用#
分布式扫描#
功能说明:使用多台机器进行分布式扫描
使用示例:
# 机器1:扫描1.0.0.0-127.255.255.255
zmap -p 80 0.0.0.0/0 --range=1.0.0.0-127.255.255.255 --rate=1000000 --excludefile=exclude.txt -o scan1.txt
# 机器2:扫描128.0.0.0-255.255.255.255
zmap -p 80 0.0.0.0/0 --range=128.0.0.0-255.255.255.255 --rate=1000000 --excludefile=exclude.txt -o scan2.txt
# 合并结果
cat scan1.txt scan2.txt > combined_scan.txt性能优化#
功能说明:优化Zmap的扫描性能
使用示例:
# 设置线程数
zmap -p 80 192.168.1.0/24 --threads=16
# 设置内存使用
zmap -p 80 192.168.1.0/24 --max-mem=1G
# 设置发包队列大小
zmap -p 80 192.168.1.0/24 --send-queue=10000
# 设置接收队列大小
zmap -p 80 192.168.1.0/24 --recv-queue=10000
# 调整内核参数
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
zmap -p 80 192.168.1.0/24 --rate=1000000参数说明:
--threads:设置线程数--max-mem:设置最大内存使用--send-queue:设置发包队列大小--recv-queue:设置接收队列大小
高级防火墙绕过#
功能说明:使用高级技术绕过复杂的防火墙
使用示例:
# 使用随机源端口
zmap -p 80 192.168.1.0/24 --source-port=1024-65535
# 使用特定的TCP选项
zmap -p 80 192.168.1.0/24 --probe-module=tcpsyn --probe-args="SYN,ACK,FIN,RST,PSH,URG:U 1024:U 1460"
# 使用分片数据包
zmap -p 80 192.168.1.0/24 --probe-module=tcpsyn --probe-args="SYN:M 0:1439"
# 使用欺骗MAC地址
zmap -p 80 192.168.1.0/24 --spoof-mac=00:11:22:33:44:55参数说明:
--source-port:设置源端口范围--probe-args:设置探测参数--spoof-mac:欺骗MAC地址
实战案例#
案例1:企业网络评估#
任务:快速评估企业网络的开放端口
执行步骤:
准备排除列表
echo "192.168.1.1" > exclude.txt # 排除网关执行快速扫描
zmap -p 1-10000 192.168.0.0/16 --rate=100000 --excludefile=exclude.txt -o scan.txt分析结果
# 统计开放端口 wc -l scan.txt # 按端口分组 cat scan.txt | cut -d':' -f2 | sort | uniq -c | sort -rn # 提取开放80端口的IP grep ':80' scan.txt | cut -d':' -f1 > http_servers.txt详细扫描
# 对发现的HTTP服务器进行详细扫描 cat http_servers.txt | xargs -I {} nmap -A -p 80,443 {}
案例2:互联网服务调查#
任务:调查互联网上特定服务的分布情况
执行步骤:
配置扫描参数
# 准备排除文件 curl https://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.csv | grep -E "RESERVED" | cut -d',' -f1 >> exclude.txt echo "192.168.0.0/16" >> exclude.txt echo "10.0.0.0/8" >> exclude.txt echo "172.16.0.0/12" >> exclude.txt执行大规模扫描
# 扫描互联网上的MongoDB服务 zmap -p 27017 0.0.0.0/0 --rate=1000000 --excludefile=exclude.txt -o mongodb_scan.txt结果分析
# 统计MongoDB服务器数量 wc -l mongodb_scan.txt # 按国家/地区分析 # 需要结合IP地理位置数据库
总结#
Zmap是一款专为速度设计的网络扫描器,特别适合大规模网络扫描。通过本教程的学习,您应该能够:
- 入门级:掌握基本的端口扫描和结果输出
- 初级:了解速度控制和扫描控制
- 中级:使用高级选项和排除目标
- 中上级:掌握防火墙绕过和自定义探测
- 高级:进行大规模扫描和结果处理
- 大师级:实现分布式扫描和性能优化
Zmap的优势在于其极高的扫描速度,而其劣势在于功能相对简单。在实际使用中,常常需要与其他工具结合使用,以获得更全面的信息。