精通hping3:定制TCP数据包的终极指南
目录导读
- hping3基础概述 – 工具定位与核心功能
- TCP数据包结构拆解 – 理解你将要定制的每一层
- 发送定制TCP数据包的五步法 – 从命令行到高级参数
- 实战案例:五种典型场景 – SYN Flood / 端口探测 / 窗口大小测试等
- 常见问题与排错 – 为何数据包被丢弃?Wireshark如何验证?
- 安全合规提醒 – 合法使用与风险规避
hping3基础概述
Q1: hping3是什么?它和普通ping有何不同?
A: hping3是一个基于命令行的网络测试工具,它能构造并发送几乎任意类型的IP数据包,与仅支持ICMP Echo的ping不同,hping3支持TCP、UDP、ICMP、RAW-IP等多种协议,在网络渗透测试、防火墙规则验证、性能压测中,hping3被誉为“瑞士军刀”。

核心能力:
- 自定义TCP flag(SYN、ACK、FIN、RST、PSH、URG)
- 调整TCP窗口大小(
-w)、序列号(--seq)、确认号(--ack) - 设置IP分片(
-f)、TTL(-t)、TOS(-o) - 支持从文件读取载荷(
-E file)或随机载荷(--rand-source)
TCP数据包结构拆解
在发送定制包之前,必须理解TCP首部的关键字段:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 源端口 | 目的端口 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 序列号 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 确认号(如ACK置位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据偏移 | 保留 |U|A|P|R|S|F| 窗口大小 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 校验和 | 紧急指针 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
hping3可操控的字段:
-s源端口 /-p目的端口--seq序列号 /--ack确认号-w窗口大小(影响流量控制)-MTCP时间戳(用于高级探测)
发送定制TCP数据包的五步法
步骤1:选择基础模式
hping3 -S <目标IP> # 发送SYN包(最常用) hping3 -A <目标IP> # 发送ACK包 hping3 -F <目标IP> # 发送FIN包 hping3 -P <目标IP> # 发送PSH包 hping3 -U <目标IP> # 发送URG包
步骤2:控制包速率与数量
hping3 -S --flood <目标IP> # 洪水模式(不等待回复) hping3 -S -c 1000 <目标IP> # 发送1000个包后停止 hping3 -S --interval 100 <目标IP> # 每100微秒发一个包
步骤3:修改TCP首部关键参数
# 自定义序列号与确认号 hping3 -S --seq 12345 --ack 67890 -p 80 <目标IP> # 设置窗口大小为65535(常用于绕过某些防火墙) hping3 -S -w 65535 -p 443 <目标IP> # 设置TTL为1(仅链路层可达) hping3 -S -t 1 -p 8080 <目标IP>
步骤4:载荷与伪装
# 从文件读取载荷(模拟HTTP请求) echo "GET /admin HTTP/1.1\r\nHost: target.com\r\n\r\n" > payload.txt hping3 -S -p 80 -E payload.txt -d 100 <目标IP> # 随机源IP(谨慎使用,可能违法) hping3 -S --rand-source -p 80 --flood <目标IP>
步骤5:高级组合与检测
# SYN+ACK+RST组合(用于TCP复位测试) hping3 -C 2 -c 1 -p 53 <目标IP> # -C 2 表示RST标志 # 带TCP选项(MSS=1460,时间戳) hping3 -S -m 1460 --timestamp -p 22 <目标IP>
实战案例:五种典型场景
场景1:SYN Flood压力测试(仅限授权环境)
hping3 -S -p 80 --flood --rand-source -w 0 <目标IP>
原理: 发送大量不完整的TCP三次握手请求,消耗服务器连接表资源。
场景2:防火墙规则探测(端口过滤测试)
hping3 -S -p 80 -c 5 <目标IP> # 观察是否收到SYN/ACK hping3 -A -p 80 -c 3 <目标IP> # 检测ACK是否被丢弃
分析:
- 收到SYN/ACK → 端口开放
- 收到RST → 端口关闭但不被过滤
- 无响应 → 被防火墙丢弃或黑洞
场景3:窗口大小欺骗测试
hping3 -S -w 0 -p 443 <目标IP> # 窗口为0,告诉服务器“我无法接收数据”
用途: 测试服务器是否尊重TCP流量控制(零窗口探测)。
场景4:Traceroute替代(使用TCP而非ICMP)
hping3 -S -t 1 -p 80 <目标IP> # TTL=1,第一个路由器返回ICMP超时 hping3 -S -t 2 -p 80 <目标IP> # TTL=2... 逐跳增加直到到达目标
场景5:自定义HTTP请求伪造
hping3 -I eth0 -S -p 80 -E http_payload.txt -d 200 -c 1 <目标IP>
其中http_payload.txt包含:
POST /login.php HTTP/1.1
Host: example.net
Content-Length: 27
username=admin&password=test
常见问题与排错
Q2:为什么我发送的定制TCP包没有收到回复?
A: 检查以下三点:
- 防火墙拦截:
iptables -L -n查看是否DROP了入站SYN包 - 目标未运行服务:向关闭端口发SYN会收到RST,若无响应则可能是状态检测防火墙
- 路由不可达:使用
hping3 -S -t 1 <目标>测试第一跳是否可达
Q3:如何用Wireshark验证我发送的包?
A: 在发送端执行:
hping3 -S -p 80 --seq 1000 -w 8192 <目标IP>
同时在Wireshark设置过滤:tcp.port == 80 and ip.src == <你的IP>
检查:
- Sequence number是否为1000(十进制)
- Window size是否为8192
- TCP flags是否正确置位
Q4:--flood模式为什么无法结束?
A: --flood 不等待回复,持续以最快速度发包,按 Ctrl+C 终止,或预先设置 -c 数量限制,若网络卡顿,可用 killall hping3 强行结束。
安全合规提醒
🚨 重要声明:
未经授权对第三方网络发送定制TCP数据包可能违反以下法规:
- 《中华人民共和国网络安全法》 第二十七条:不得从事非法侵入他人网络、干扰他人网络正常功能等危害网络安全的活动
- 《刑法》第285、286条:破坏计算机信息系统罪
- 美国《Computer Fraud and Abuse Act (CFAA)》
合法使用场景:
- 对自己拥有的服务器做安全测试(先配置iptables白名单)
- 在搭建的私有实验网(如VirtualBox内部网络)中演练
- 获得书面授权的渗透测试项目(附范围说明)
Hping3通过精细的TCP数据包构造能力,成为网络工程师和渗透测试者的必备工具,从修改序列号、窗口大小,到组合TCP flag、附加载荷,每一步都需要对协议有深刻理解。知识是中立的,但使用知识的选择决定了你是否合规。 建议所有读者在完全可控的环境下练习,并始终获得授权后再进行外部探测。
(如需深入学习,建议结合《TCP/IP详解》卷一和Wireshark抓包分析)
标签: hping3 TCP定制