來到第六天Live host identificaction
的環節,主軸在於活的主機,也就是在開機狀態,處於活動中的主機偵測,那廢話不多說,直接開始今天的主題,但在開始工具介紹之前,可能需要先大概說明一下IP位址以及實體位址的關係。
192.168.1.1
(IPv4)這樣組成方式用來表示在網路上的虛擬地址,但IP位址是服務商給你的,或是處於私有網路下私有IP08:00:27:0e:34:8d
就是一個MAC地址,其中前6位08:00:27代表硬體製造商的編號,由IEEE電氣與電子工程師協會分配,可以藉由OUI來查詢到。另外每張網卡的MAC地址是唯一的。而IP跟MAC之間的關係不是綁定的,可以想像一下當家裡的電腦壞掉或是換了張網卡,這時候就使得MAC不一樣,但依然能夠使用原本電信服務商分配的IP來上網。之所以要提到MAC,也是因為這環節是要收集Live host的資訊,需要透過MAC來判斷是否是同一目標主機。
而提到IP與MAC之間的關係,就不得不提到ARP
了,ARP是利用乙太網路的廣播功能所設計出來的位址解析協定,它的主要特性是它的位址對應關係是動態的,以查詢的方式來獲得IP與MAC之間的對應關係。
arp
+ ping
,後者在先前文章就提過了,所以先講講arp
,前言有提到ARP本身是一個協定,但Linux也有個同名arp
的命令工具,其作用就是檢視目前arp cache裡IP跟MAC關係的紀錄。觀察當前cache
arp -a
刪除cache裡指定host的紀錄
arp -d 192.168.1.1
刪除後如果重新ping該host,就能夠重新透過ARP協定再次取得該host的IP與MAC的對應關係,如果透過wireshark
抓包工具去觀察,甚至能看到ARP詢問的過程。
而回到arping
,這個指令能夠像目標主機發送arp請求,具體使用方式如下,指定網路介面向目標發送請求
arping -I eth0 10.0.2.2
從結果能看到有回覆並且帶有目標主機的MAC資訊
ARPING 10.0.2.2
60 bytes from 52:54:00:12:35:02 (10.0.2.2): index=0 time=252.753 usec
60 bytes from 52:54:00:12:35:02 (10.0.2.2): index=1 time=212.884 usec
60 bytes from 52:54:00:12:35:02 (10.0.2.2): index=2 time=431.741 usec
或是透過shell腳本,去找出區網內的主機,要特別注意因為使用了&
將arping執行的process以背景執行,所以建議給定-w
參數來指定請求的次數,不然arping的預設行為是會不間斷的發出請求,腳本就沒有結束的時候,而grep是用來篩選我們想看到的內容,因為我關注的只有實際有回覆的主機跟其MAC資訊,而不在意最後ping值的統計,因此只濾出from
字串的結果,而最後的wait
是用來確認所有背景執行的process都結束。
#!/bin/bash
for ip in 192.168.1.{1..254}; do
arping -I eth0 -w 1 -f $ip | grep from &
done
wait
執行結果會像
60 bytes from 52:54:00:12:35:01 (192.168.1.1): index=0 time=252.753 usec
60 bytes from 52:54:00:12:35:02 (192.168.1.12): index=0 time=212.884 usec
常用的用法可以是列舉式
fping 192.168.1.1 192.168.1.2
或是測試一整個網段
fping -g 192.168.1.0/24
結果會像是
192.168.1.1 is alive
ICMP Host Unreachable from 192.168.1.70 for ICMP Echo sent to 192.168.1.2
192.168.1.2 is unreachable
或是加入其他參數-a
只顯示alive結果-r 0
不retry-q
quiet不顯示每次ping的結果-s
產生最後報表
fping -a -r 0 -q -g 192.168.1.0/24 -s 1 ⨯
192.168.1.1
192.168.1.70
192.168.1.66
254 targets
3 alive
251 unreachable
0 unknown addresses
251 timeouts (waiting for response)
254 ICMP Echos sent
3 ICMP Echo Replies received
128 other ICMP received
0.683 ms (min round trip time)
50.2 ms (avg round trip time)
142 ms (max round trip time)
4.673 sec (elapsed real time)
hping3
有點像是終極加強版的ping,因為他除了可以發常見的ICMP封包之外,可以按需求去發送TCP或是UDP的封包。常用用法-1
來發送ICMP封包,同ping的功用
hping3 -1 192.168.1.1
或是--traceroute
來追蹤中間會經過的站點,等同於使用另一個網路工具traceroute
-V
開啟verbose來看到更多過程資訊
hping3 --traceroute -V -1 www.example.com
追蹤的結果
using eth0, addr: 10.0.2.15, MTU: 1500
HPING www.example.com (eth0 93.184.216.34): icmp mode set, 28 headers + 0 data bytes
hop=1 TTL 0 during transit from ip=10.0.2.2 name=UNKNOWN
hop=1 hoprtt=7.9 ms
hop=2 TTL 0 during transit from ip=192.168.1.1 name=m.home
hop=2 hoprtt=25.6 ms
針對目標的port從78開始,遞增去測3次,所以測試範圍就是 78, 79, 80 三個port
hping3 -S www.example.com -p ++78 -c 3
因為目標這個範圍內只有開啟80 port,所以只有一個回應
1 ⨯
HPING www.example.com (eth0 93.184.216.34): S set, 40 headers + 0 data bytes
len=46 ip=93.184.216.34 ttl=64 id=1512 sport=80 flags=SA seq=2 win=65535 rtt=263.8 ms
也可以透過-8
使用掃描模式
hping3 -8 78-80 -S www.example.com
掃描結果跟上面一樣只有80 port有開啟
Scanning www.example.com (93.184.216.34), port 78-80
3 ports to scan, use -V to see all the replies
+----+-----------+---------+---+-----+-----+-----+
|port| serv name | flags |ttl| id | win | len |
+----+-----------+---------+---+-----+-----+-----+
80 http : .S..A... 64 59909 65535 46
All replies received. Done.
Not responding ports: (78 ) (79 finger)
hping3實在是太強大了,還有很多進階功能可以玩,但今天就先探索到這裡。
今天體驗的工具的用法都滿簡單暴力的,但背後的原理真的很值得探究,包含了網路七層模型,加上ARP以及ICMP在模型裡是以什麼樣的流程在不同的層級裡發揮他們的作用,感覺都可以再額外延伸好幾篇文章來。