轉載出處:http://hnytgl.blog.sohu.com/216935414.html
hping3可以發送任意定制的包給主機
hping3可以控制ip分層,定制包體和大小,很強大的安全測試工具,也是學習tcp/ip的一種途徑。加油咧!^ _ ^
從這裡開始介紹hping3。
基本選項:
《1》 -c:設定發送包個數,如要向目标發送2個包:
[root@localhost ~]# hping3 -c 2 192.168.0.106
HPING 192.168.0.106 (eth0 192.168.0.106): NO FLAGS are set, 40 headers + 0 data bytes
ICMP Unreachable type=10 from ip=192.168.0.106 name=UNKNOWN
--- 192.168.0.106 hping statistic ---
2 packets tramitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms
## 發現virtualbox負載過高,心疼了,是以臨時改變實驗環境,将virtualbox 的cnetos5.5換成vmware player上的peppermint(192.168.0.107)
《2》-i :發送的包的時間間隔,預設機關是s,可以使用u10,表示每10微秒發送一個包(1微秒=1/100000秒,慎用!),可以個和 -c 配合使用:
--每100秒發送一個包:
[root@localhost ~]# hping3 -i 100 192.168.0.107 《--這裡第一個包會在第一時間發送出去,等100s後再發送第二個包
--每1微秒發送一個包---》這是一種攻擊行為,大家慎用,我隻是做實驗
[root@localhost ~]# hping3 -i u1 192.168.0.107
HPING 192.168.0.107 (eth0 192.168.0.107): NO FLAGS are set, 40 headers + 0 data bytes
^C
--- 192.168.0.107 hping statistic ---
332388 packets tramitted, 0 packets received, 100% packet loss 《--到達一定速度後隻發不接
--每微秒發送一個包,總共發送10個包:
[root@localhost ~]# hping3 -i u1 -c 10 192.168.0.107
10 packets tramitted, 0 packets received, 100% packet loss
《3》--fast , --faster,--flood: 前兩個選項分别是 -i u10000 、-i u1 的别名,--flood 顧名思義,尤其是後面兩個選項,如果不是做壓力和防火牆過濾等測試時,強烈不建議使用,引起的不良後果自負,一切法律責任與本篇文章無關。
《4》-n:不進行lookup; -q :quiet模式,隻顯示最後的統計資料;
《5》-I : 制定需要使用的interface,在特定的os下為了滿足特定的需要才會用到這個選項;
《6》-D:進入debug模式
《7》-z : 加入這個選項後,可以通過ctrl +Z 來增加發送出去的包的TTL,按一次增加1,按兩次增加2,依次類推,按住不放是減小TTL,按Z的感覺自己去找。要看效果可以在目标主機上開啟iptables的日志記錄功能,就可以很直覺的看到TTL的變化。
[root@localhost ~]# hping -z 192.168.0.107
len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=1.0 ms
len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=0.6 ms
65: len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=2 win=0 rtt=0.6 ms
66: len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=3 win=0 rtt=0.5 ms
68: len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=4 win=0 rtt=0.8 ms
69: len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=5 win=0 rtt=0.4 ms
71: len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=6 win=0 rtt=0.8 ms
72: len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=7 win=0 rtt=0.9 ms
74: len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=8 win=0 rtt=0.5 ms
9 packets tramitted, 9 packets received, 0% packet loss
round-trip min/avg/max = 0.4/0.7/1.0 ms
《8》 --beep : 接受到傳回的包就發聲(我的不會叫,也不知道是什麼聲音,還是我了解錯了)
協定部分
《1》hping3預設是TCP模式,不設定任何flag,到對方的0 prot,以做到“hide ping”,這是在對方經由firewall保護下最好的發現方式了
《2》-0 : RAW IP 模式,可以單獨使用,但是多和 --ipproto 或者 --file 配合使用
由于是原始的ip封包,iptables會記錄下來,顯示的是INCOMPLETE,我們也得不到回應:
[root@localhost hping3-0.0.20051105]# hping3 -0 192.168.0.107
HPING 192.168.0.107 (eth0 192.168.0.107): raw IP mode set, 20 headers + 0 data bytes
3 packets tramitted, 0 packets received, 100% packet loss
《3》-1: ICMP 模式,預設是采用icmp echo-request, 可以通過 --icmptype 和 --icmpcode 來設定需要的icmp 類型,通常情況下防火牆隻允許icmp的回應要求(echo-request);
《4》-2:UDP模式,預設也是發往目标0 号port,可以通過選項 --baseport --destport --keep 來調整udp標頭;
《5》-8 : 掃描模式,這裡介紹他的通配符和端口範圍的表示方法:
all:所有端口,1-65535
known:/etc/services 中記錄的所有端口
多個不相連的端口用逗号分開,如:1,4,443;
表示一個端口範圍使用:1-4000
!表示非: !known
掃描對方在/etc/services中列出的端口:
[root@localhost 桌面]# hping3 -8 known -S 192.168.0.1 <---這裡-S 表示采用SYN掃描
Scanning 192.168.0.1 (192.168.0.1), port known
5458 ports to scan, use -V to see all the replies
+----+-----------+---------+---+-----+-----+-----+
|port| serv name | flags |ttl| id | win | len |
23 telnet : .S..A... 128 7458 16384 46
1780 dpkeyserv : .S..A... 128 64037 16384 46
80 http : .S..A... 128 60464 16384 46
掃描1-1024号端口:
[root@localhost 桌面]# hping3 -8 1-1024 -S 192.168.0.1
Scanning 192.168.0.1 (192.168.0.1), port 1-1024
1024 ports to scan, use -V to see all the replies
23 telnet : .S..A... 128 11064 16384 46
80 http : .S..A... 128 60475 16384 46
All replies received. Done.
Not responding ports:
《6》-9 : --listen signature <--監聽模式,監聽含有特定signature的包,并且将含有該signature的包dump;
從這部分開始,我會将iptables針對每次試探和掃描的記錄附上
IP 協定部分
《1》-a :(--spoof hostname)僞裝自己的位址,會造成自己收不到傳回的包,在進行idle掃描時候有用,
[root@localhost 桌面]# hping3 -a www.baidu.com 192.168.0.107
len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.5 ms
DUP! len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.5 ms
len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=0.4 ms
DUP! len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=0.5 ms
2 packets tramitted, 4 packets received, -100% packet loss 《--自己是收不到的
round-trip min/avg/max = 0.4/0.5/0.5 ms
記錄如下
Jul 28 04:48:22 linuxer-desktop kernel: [ 1955.489880] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=220.181.6.175 DST=192.168.0.107 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40048 PROTO=TCP SPT=1849 DPT=0 WINDOW=512 RES=0x00 URGP=0
Jul 28 04:48:22 linuxer-desktop kernel: [ 1955.489931] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=220.181.6.175 DST=192.168.0.107 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=40048 PROTO=TCP SPT=1849 DPT=0 WINDOW=512 RES=0x00 URGP=0
ip位址是成功的僞裝了,但是mac還是自己的
《2》--rand-source : 使用随機位址僞裝自己的位址
[root@localhost 桌面]# hping3 --rand-source 192.168.0.107
len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.6 ms
DUP! len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.7 ms
DUP! len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=0.6 ms
2 packets tramitted, 4 packets received, -100% packet loss
round-trip min/avg/max = 0.6/0.6/0.7 ms
記錄
Jul 28 04:53:19 linuxer-desktop kernel: [ 2252.836277] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=98.65.146.212 DST=192.168.0.107 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=20079 PROTO=TCP SPT=1841 DPT=0 WINDOW=512 RES=0x00 URGP=0
Jul 28 04:53:20 linuxer-desktop kernel: [ 2253.836351] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=152.101.28.151 DST=192.168.0.107 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=37500 PROTO=TCP SPT=1842 DPT=0 WINDOW=512 RES=0x00 URGP=0
《3》--rand-dest : 随機選擇目标,
如:hping3 --rand-dest -I eth0 192.168.0.x <--使用x代表0-255,要是在整個網絡中選擇目标可以換成4個x;在這種模式下一定要制定interface,
《4》-t :制定包的TTL ,具體要設定為多大要看是做什麼,最大是255;
[root@localhost 桌面]# hping3 192.168.0.107 -t 1 --tracerouteHPING 192.168.0.107 (eth0 192.168.0.107): NO FLAGS are set, 40 headers + 0 data bytes
len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.4 ms
round-trip min/avg/max = 0.4/0.5/0.6 ms
Jul 28 05:04:07 linuxer-desktop kernel: [ 2900.504384] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=192.168.0.101 DST=192.168.0.107 LEN=40 TOS=0x00 PREC=0x00 TTL=1 ID=8808 PROTO=TCP SPT=2828 DPT=0 WINDOW=512 RES=0x00 URGP=0
Jul 28 05:04:07 linuxer-desktop kernel: [ 2900.504416] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=192.168.0.101 DST=192.168.0.107 LEN=40 TOS=0x00 PREC=0x00 TTL=1 ID=8808 PROTO=TCP SPT=2828 DPT=0 WINDOW=512 RES=0x00 URGP=0
《5》-N : 指定ip -> id ,防火牆記錄時可以看到我們定制的id,哈哈
[root@localhost 桌面]# hping3 192.168.0.107 -N 888
len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.7 ms
1 packets tramitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.7/0.7/0.7 ms
Jul 28 05:08:36 linuxer-desktop kernel: [ 3170.026046] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=192.168.0.101 DST=192.168.0.107 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=888 PROTO=TCP SPT=2489 DPT=0 WINDOW=512 RES=0x00 URGP=0
《6》 -r : 顯示id的增量,而不顯示id
[root@localhost 桌面]# hping3 192.168.0.107 -r
len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=8.1 ms
len=40 ip=192.168.0.107 ttl=64 DF id=+0 sport=0 flags=RA seq=1 win=0 rtt=0.6 ms
len=40 ip=192.168.0.107 ttl=64 DF id=+0 sport=0 flags=RA seq=2 win=0 rtt=0.6 ms
len=40 ip=192.168.0.107 ttl=64 DF id=+0 sport=0 flags=RA seq=3 win=0 rtt=0.5 ms
4 packets tramitted, 4 packets received, 0% packet loss
《7》-m:設定 mtu 值; -f :進行fragment;mtu預設是16 bytes,當發送的包的大小超過16 bytes時,就啟動 fragment ,這樣可以用來進行防火牆的重組包能力的測試,當然這也是一種突破防火牆的方法,我這裡隻給一個很粗糙的原型,要想能在實際中運用需要進行一些計算,哈哈。還有兩個相關的選項 -x :more frag,-y :don‘t frag
[root@localhost 桌面]# hping3 192.168.0.107 -m 8 -f
HPING 192.168.0.107 (eth0 192.168.0.107): NO FLAGS are set, 40 headers + 0 data bytes 《--可以在包體裡做文章
round-trip min/avg/max = 0.6/0.7/0.7 ms
《9》-o : tos (type of service),預設是0x00,通過 --tos help 檢視可以設定為哪幾種值:
[root@localhost 桌面]# hping3 --tos help
tos help:
TOS Name Hex Value Typical Uses
Minimum Delay 10 ftp, telnet
Maximum Throughput 08 ftp-data
Maximum Reliability 04 snmp
Minimum Cost 02 nntp
如我要将tos 改為最小延遲類服務類型:
[root@localhost 桌面]# hping3 --tos 10 192.168.0.107 《--16進制的
len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=2 win=0 rtt=0.4 ms
3 packets tramitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.4/0.5/0.7 ms
Jul 28 05:38:59 linuxer-desktop kernel: [ 4992.379746] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=192.168.0.101 DST=192.168.0.107 LEN=40 TOS=0x10 PREC=0x00 TTL=64 ID=14192 PROTO=TCP SPT=1360 DPT=0 WINDOW=512 RES=0x00 URGP=0
Jul 28 05:38:59 linuxer-desktop kernel: [ 4992.379794] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=192.168.0.101 DST=192.168.0.107 LEN=40 TOS=0x10 PREC=0x00 TTL=64 ID=14192 PROTO=TCP SPT=1360 DPT=0 WINDOW=512 RES=0x00 URGP=0
《10》 -G: --rroute 顯示路由
[root@localhost 桌面]# hping3 -G 192.168.0.107
len=80 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.9 ms
RR: 1.2.3.4
192.168.0.107
Jul 28 05:44:41 linuxer-desktop kernel: [ 5334.394594] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=192.168.0.101 DST=192.168.0.107 LEN=80 TOS=0x00 PREC=0x00 TTL=64 ID=197 OPT (07270C01020304C0A8006B0000000000000000000000000000000000000000000000000000000000)
##這裡由于使用了 -G ,每個包都設定了記錄路由的選項,是以OPT有值了,長度LEN也變了,^_^##
PROTO=TCP SPT=1563 DPT=0 WINDOW=512 RES=0x00 URGP=0
TCP/UDP 協定相關
《1》-s:(--baseport)設定發送包的最開始的端口,如果要使用一個固定的端口的話,就要加上 -k(--keep)
[root@localhost 桌面]# hping3 -s 2 192.168.0.107
len=40 ip=192.168.0.107 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=0.5 ms
3 packets tramitted, 2 packets received, 34% packet loss
round-trip min/avg/max = 0.5/0.6/0.6 ms
記錄 《--可以看到SPT的起始端口是2,在依次加1,如果使用了 -k 選項,SPT 将會一直是 2 ;
Jul 28 07:54:44 linuxer-desktop kernel: [ 755.883483] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=192.168.0.101 DST=192.168.0.107 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=60381 PROTO=TCP SPT=2 DPT=0 WINDOW=512 RES=0x00 URGP=0
Jul 28 07:54:45 linuxer-desktop kernel: [ 756.883579] scan or attackIN=eth0 OUT= MAC=00:0c:29:80:6c:a2:00:1e:ec:c8:1f:b5:08:00 SRC=192.168.0.101 DST=192.168.0.107 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=47720 PROTO=TCP SPT=3 DPT=0 WINDOW=512 RES=0x00 URGP=0
《2》-p : (--destport),預設是發送到對方的0 端口,可以通過 -p 選項定制,+13 表示當接受到傳回的包後将目标端口增加13,++13表示每發送一個包就将目标端口增加13;
本文轉自Tenderrain 51CTO部落格,原文連結http://blog.51cto.com/tenderrain/1975730:,如需轉載請自行聯系原作者