
資安筆記 - 從理論到實作I:封包抓取與分析

終於進入實作環節
從上禮拜三開始我們就依直在講理論的東西,我看我自己一聽到快睡著了,不過今天我們終於要進入實作了 !
回顧一下這幾天講到的內容,我們無時無刻都在提到一個名詞,沒錯就是「封包」,他作為在網路中不可或缺的成員之一,我們今天這篇文章終於用我們的雙手實際的接觸她了,那就快開始吧
這篇Blog之目標
- 幫助學習及了解網路
- TCP/IP 的理論與實際的差異
- 如何擷取封包與快速找所需封包
- 瞭解網路封包的實際交換、資訊傳遞方式
- 從網路封包中找出可用訊息或資訊
- 有效進行相關問題的排除 ( Trouble shooting )
在正式進入前
在正進入實作前你應該要先知道以下資訊…
網路設備:傳遞的媒介、方法
集線器 ( Hub )、交換器 ( Switch )、路由器 ( Router )…
防火牆 ( Firewall )、防毒牆 ( Viruswall )、頻寬管制器 ( QoS )…
網路介面 ( NIC ):有線網路、無線網路、藍芽網路…
頻寬、距離、阻隔與干擾…網路協定:內容的溝通、說明
OSI 與 TCP/IP 差異
TCP/IP 重要表頭 EX: Frame、IP、TCP、UDP、ICMP、DHCP、ARP、DNS、HTTP、SNMP…
網路協定 ( 表頭 ) 的交互應用,一個封包會堆疊多種協定的表頭
以上有提到的資訊其在之前的文章中都有提到,所以應該要了解大部分是甚麼了
進入須知知識
常見的硬體設備介紹
集線器的功能是用於複製訊號並且放大訊號,並且以廣播的方式打訊號傳出,通常集線器接有4~8個Port,如果接上設備越多那頻寬的利用率就越差,頻寬利用差就會容易導致碰撞發生,並且所有Port共用最大頻寬
- 傳輸速率
- 10Base-T (802.3)
- 100Base-T/TX (802.3u)
傳輸速率?
這個在之前的文章有提到過,可以去翻翻看就知道這是甚麼了
交換機講到現在搭家應該都不陌生了,交換機主要的功能就是幫助終端設之封包做「點對點」的傳輸,交換機的優點是接上的中端這設備數量不影響傳輸的速率,並且Port選項也很多少至5 Port、多至48 Port(全雙工)
- 傳輸速率
- 100Base-T (802.3u)
- 1000Base-T (802ab)
- 1000Base-T x 2 (802ad)
- 2.5GBase-T (802.3bz)
雙工是甚麼
全雙工(Full-duplex)是指數據傳輸中,訊號可以同時在兩個方向傳輸的通信方式。也就是說,資料能同時從一端傳到另一端,並從另一端回傳,不會互相干擾或等待
-
半雙工(Half-duplex):資料可以雙向傳輸,但不能同時進行。傳輸方向必須交替切換,這樣每次只能有一方發送資料,另一方則必須接收資料。(會發生碰撞)
-
全雙工(Full-duplex):資料可以同時在兩個方向傳輸,不需等待。這是一種效率更高的方式,因為它不會像半雙工那樣因為等待而浪費時間。(少發生碰撞)
-
單工(Simplex):只能在一個方向上傳輸資料,沒有反向的通信能力。(沒有碰撞但效率低)
無線設備就是大家最常見見到的家用設備了,無線設備主要的功能是做無線·網路·的傳輸,意味著你不需要一條實際的線路就可以上網了,舉個例子就個就是每次出國時要到處找免費網路時發送給你網路的設備,它的優點是你不需要一直接著一條線走對這是廢話,並且傳輸的效率也不會太差,但是關於穩定性就另當別論了
大家一定有過網路連不到,一進入電梯就沒有訊號的經驗,這有是因為路由器比較容易被響傳輸速率與效率,有可能的因素有
- 無線設備數量、距離、阻隔物與材質 ( 水泥、金屬 )
- 天線數量 ( MIMO ) 與電磁波強度
- 傳輸頻率 ( 2.4G / 5G ),頻道 ( Channels ) 重疊
- 微波爐、藍芽裝置、無線鍵盤滑鼠的使用… ( 訊號干擾,類似碰撞)
無線傳輸也是有數速度的上限,不過被分為比較多種
- Wi-Fi 3 ( 802.11g ) 54Mbps
- Wi-Fi 4 ( 802.11n ) 150Mbps
- Wi-Fi 5 ( 802.11ac ) 433Mbps
- Wi-Fi 6 ( 802.11ax ) 600Mbps
- Wi-Fi 6E 1201Mbps
2.4Ghz / 5Ghz 是甚麼意思
一般使用就只要知道
- 2.4Ghz 訊號傳送距離比較遠,但是頻寬比較低
- 5Ghz 訊號傳輸距離近,但是頻寬比較低
所謂的距離也可以視為訊號傳輸的強度,例如穿透力強、訊號廣播遠,那所謂的頻寬就是指在傳輸距離內接收和發送訊號的速度,也就是Mbps的意思
網路架構下的封包擷取
接下來我們要開始監控各個設備發送出的訊號/封包,但是在監控前我們要先想要如何擷取到這些封包/訊號;要如何利用各種軟體擷取訊號;在不同的網路架構中我們要如何擷取訊號
擷取交換機的封包
假設今天我們的網路架構是這樣子的
1 | 外網 --- 交換機 --- (要擷取設備 | 設備1 | 設備2 | 你的設備) |
那我們要如何去擷取設備訊號呢,之前有講過我們可以設置VLAN / Port,告訴交換機我們想要擷取的設備IP/MAC,再把被截取設備的訊號複製到你的設備,這樣你就可以查看要要調查的設備訊號了
以上所提到使用的技術名稱叫做
- 交換分析埠 ( SPAN,Switched Port Analysis ) ( Cisco )
- 鏡像連接埠 ( Mirroring Port )
- 通訊埠鏡像 ( Port Mirror )
使用這個架構的優點是
- 不需要額外設備
- 無須中斷被擷取端
- 可同時複製多埠封包
但是因為交換機同時還需要負責處理其他設備的封包訊息,因此在高效能的運作中也伴隨著效能疑慮,例如
- 暫存不足易造成封包遺失
- CPU附載過重,封包交換率降低
- 錯誤封包不會複製並傳輸 ( Switch 機制 )
把Switch與Hub搭配應用
假設今天我們的網路架構是這樣子的
1 | 外網 --- 交換機 --- (要擷取設備 | 設備1 | 設備2 | 你的設備) |
剛才說道的方式前提是交換機支援劃分VLAN,但是假如今天你沒有這種設備呢,還記得我們提到的HUB嗎,沒錯他就是專門用來複製訊號設備,那我們不如把要擷取設備和你的設備接到同一個hub上,接著再拉一條線連接到交換機上,這樣就減少了交換機的工作量了,太抽象請看圖吧
1 | 外網 --- 交換機 --- [ 設備1 | 設備2 | HUB --- ( 要擷取的設備 | 你的設備 ) ] |
使用這個架構的優點是
- 簡單直覺
- 不需要支援劃分VLAN的交換機
- 可盡量不影響既有架構
不過可以看到HUB的連線速率很低,表示傳輸訊息很慢等缺點有
- 速率較低 ( 10/100MB )
- 半工設備頻寬共用與碰撞
- 被擷取端網路會被中斷
無線設備的應用
假設今天我們的網路架構是這樣子的
1 | 外網 --- 路由器 --- (要擷取無線設備 | 無線設備1 | 無線設備2 ) |
這個情境我們一樣也是使用HUB連線到外部網路,再拉一條線去把訊號複製給AP,這樣AP在把封包傳送出去時就會先發送到HUB,接著HUB在複製AP的訊號把訊號複製到你的設備中,同時也發送到外網中,太抽象請看圖吧
1 | 外網 --- HUB --- [ 你的設備 | 路由器 --- ( 要擷取無線設備 | 無線設備1 | 無線設備2 ) ] |
使用這個架構的優點是
- 可分析無線 AP 設備本身
- 所有無線對外連線
不過與剛才一樣可以看到HUB的連線速率很低,表示傳輸訊息很慢等缺點有
- 速率較低 ( 10/100MB )
- 被擷取端網路會被中斷
OSI 與 TCPIP 的差別
兩者網路架構層次
與其說是架構不如把它比喻成千層蛋糕。網路架構就像是千層蛋糕一樣一層之下來有一層直到最底部
- 以OSI還看的話,他的蛋糕是這樣的
層次 | 架構名稱 |
---|---|
Layer 7 | Application |
Layer 6 | Presentation |
Layer 5 | Session |
Layer 4 | Transport |
Layer 3 | Network |
Layer 2 | Data Link |
Layer 1 | Physical |
- 以TCP/IP來看是這樣子的
層次 | 架構名稱 |
---|---|
Layer 4 | Application |
Layer 3 | Transport |
Layer 2 | Internet |
Layer 1 | Network Access |
這個標題中我們只需要了解他的架構的樣子,還不需要很深入的探討,所以看過記住就好
OSI 層次資訊
上一標題提到的交換機、集線器、路由器都都存在於OSI比較底層的部分,具體位置在這裡
- OSI Layer Table
層次 | 架構名稱 | 設備名稱 |
---|---|---|
Layer 7 | Application | |
Layer… | …… | |
Layer 2 | Data Link | 交換機 / 路由器 |
Layer 1 | Physical | 集線器 |
TCP/IP 層次資訊
如果再把TCP/IP的那個表格展開,就會是以下這樣子
層次 | 架構名稱 | 包含協定/服務 |
---|---|---|
Layer 4 | Application | DNS / DHCP / FTP / HTTP / SNMP / … |
Layer 3 | Transport | TCP / UDP |
Layer 2.5 | Internet | ICMP / IGMP |
Layer 2 | Internet | IP |
Layer 1.5 | Internet | ARP / RARP |
Layer 1 | Network Access | Ethernet / FDDI / X.25 / ISDN / … |
超做軟體 - Wireshark
玩前須知
這就是我們第一個要接觸到的網路工具,這供工具可以讓我們了解網路的狀態與分析網路問題,原理就是
直接抓取
Ethernet, IEEE 802.11, PPP/HDLC, ATM, BLuetooth…等封包及時解讀
IPsec, ISAKMP, Jerberos, SNMP. SSL/TLS, WEB, WPA/2
並且可以分析很多很多的網路協定 (3000左右),還提供GUI使用者介面,並且這是一個開源軟體(GNU GPL)意味著你可以自行更改他的介面,當然是在你會的情況下
說了這麼多的Wire(SurfShark置入性廣告,他還是有他不能做的事情,例如:
不是網管軟體
沒有架構探測、網路設定糾錯、統計…等功能不是破解軟體
加密後 ( 亂碼 ) 依然是加密,亦沒有暴力破解 ( 輸入 ) …等功能不是入侵偵測軟體
沒有資安疑慮的警告、提示 ( 提醒 ) …等功能
沒有資安行為的偵測、漏洞測試…等功能但是,你有知識就能做得到
網路架構 ( 設 )、TCP/IP 理論、加解密 ( 密碼學 ) 的應用
網路相關程式開發與撰寫 ( C、perl、python、php… ) …等
誰也會用這個軟體
-
網路學習者:
網路協定 ( Network Protocol ) 的學習與研究TCP/IP 理論在實際運作上的差異…
-
網路管理者:
觀察網路使用上的問題 傳輸率下降、無法連線…
-
資安工程師:
發掘安全性的問題不明連線與機制、針對性的內外連接…
-
程式開發員:
資料傳輸、交換與溝通上的除錯 Server / Client ( 或 APP ) 之間的傳輸…
下載與安裝
這個我應該不需寫教學吧,就只是點這個 連結 然後照他的指示安裝就完成了
WireShark Installation File
你下載完後就只要一直點 next… 就好,除非你想要自己設定安裝位置、路徑等,其實就是看你自己的選擇去安裝啦,我個人是沒有動到任何東西
如果需要更詳細的安裝教學,可以查看 詳細英文安裝教學
開始操作
基礎零:開始查看封包
我一開始打開這個軟體時就像是我第一次開啟Excel一樣,馬上就想關掉了但先別急,先幫你把東西顯示出來獲得一些成就感吧
一開始打開可以看到這個畫面,這個畫面顯示出來的是你電腦中所有有使用封包發送資訊的程式名稱
知道後可以看到有一些有上下起伏的線條,這表示這個程式使用發送接收封包的使用率,要查看就直接點他兩下就可以打開了
沒錯這些畫面中在跳的每一個東西都是封包的傳送和接收,第一次看到真的比想像中的還多
到這裡其實你就會用基礎的察看封包了,接下來我們要來過濾他們了
基礎一:如何過濾封包
網路上的鄭再傳送的封包這麼多,我要如何和找到我想要的封包呢,如何過濾出我想看到的資訊,這時候就要用到工具 Filter
在WireShark中過濾被分為兩種方式
第一種是:擷取過濾 ( Capture Filter )
方法:擷取封包過程當中過濾
優點:封包列表內即是正確封包
缺點:過濾條件與邏輯需正確,否則無重來的機會第二種是:顯示過濾* ( Display Filter )
方法:擷取封包完畢之後過濾
優點:於期間內可以保證擷取到封包
缺點:封包數量大,容易對CPU、記憶體、硬碟暫存空間產生負擔
接著就進入實作了,開起WireShark後可以看到上方欄位中有一個 Add a display filter
那個就是給你輸入Filter的地方,為了方便過濾我們的封包,我們有個過濾的語法格式 (就像是regex
一樣
這個語法的構造這樣
中文語法 | 協定 | 協定子類別 | 協定子子類別 | 比較運算符號 | 數值1 | 邏輯運算符號 | 另一個Filter |
---|---|---|---|---|---|---|---|
範例 | ip | addr | 無 | == | 192.168.0.1 | or | …… |
上方這個語法翻譯成中文就是
- 「過濾協定是IP且類別為address(簡寫addr)等於192.168.0.1或是過濾…」
這樣可能還不是很清楚,所以在更符合自然語言就是
- 「尋找IP地址等於192.168.0.1的封包,或是尋找…」 (在看不懂我也沒辦法了
那接下來你肯定想要自己去練習吧?,這時候你不如想想前幾篇文章所提到的專有名詞例如:TCP、UDP、ACK、PORT、SOURCE IP、DESTINATION IP等,想一下他的意思再輸入到Filter中,喔~~,好像會用了對不對,好吧你可能沒有對上我的頻寬
我在這想要表達的是要理解Filter前,你應了解
- 你想要查詢的資訊是甚麼
- 在查詢時會用到甚麼專有名詞
- 最後用母語把過濾內容寫出來
例如:我今天想要查詢IP、接收方是我、用協定TCP
順序 | 步驟名稱 | 結果 |
---|---|---|
1. | 要查詢的資訊 | IP、接收方是我、用協定TCP |
2. | 查詢時會用到的名詞 | IP、DESTINATION IP、TCP |
3. | 寫出來 | 查詢使用TCP協定發送到我電腦IP的封包 |
到這邊就告一個段落,接下來就是把它變成Filter了,我們直接給答案對比一下
類別 | 結果 |
---|---|
指令 | tcp and ip.dst == <myip> |
語言 | 查詢使用TCP協定發送到我電腦IP的封包 |
好的那現在我們在把指令中有英文的部分變成中文,所以會會變成 -> tcp 且 接收者的IP = 我的IP
,這樣你了解了嗎
其實必須說沒有程式基礎的人在學這個時可能會相對比較吃力一點,有可能是在理解點x點xx是甚麼意思,或是理解filter接收格式的變化,必須講要學好這些語法最好的老師就是多練習,多用多練後的某天早上你就的會用了
# 當初我在學regex就是這樣,想學學不懂,但一個月後起床突然就懂了
抓取 PING 的封包
再繼續我們快樂的實作前,我們要回顧一下Ping,並且去抓取他的封包
簡單的回顧下Ping
Ping這個工具主要就是用來檢測你當前使用的網路是鈄通暢,同時也可以顯示TTL數值,判斷網路是否有塞車的現象等
Ping的運作原理
下圖為一張幾設你要Ping你gateway時的情境圖
當你今天發送一個封包給你的Gateway時,表示你發送了一個請封包給你的Gateway,在你的gateway收到時就會回應你一個封包,那在這封包來回傳送的過程及結束時終端機會顯示延遲、TTL、IP等
TTL前面都有提過了,IP也更不用說了就是你輸入的IP,但是講到延遲就有趣了…
因為封包在傳送的過程中並不知道自己花了多久傳送,電腦學家為了計算出這個數值的就想到在發送前在封包加入傳送的確切時間點,接著由被PING的IP接收到封包時就去對比現在和傳送當時的時間,自然而然就可以簡單的計算延遲了
Ping 的網路框架
應該還記得IP的網路框架吧,忘記的可以往前翻翻之前的Blog,這邊我就再貼一次圖片
上面這個就是IP的網路框建,我們有提到Protocol傳送協定的部分不過沒有細說,現在我們就是要來回顧Protocol。把Protocol翻譯過來就是協定的意思,那有沒有聯想到之前在講Ping時用的協定是ICMP,沒錯這個Protocol的欄位就會給各種工具放他們各自的協定
那在這個ICMP中還是有自己的表頭的,他長這樣
這邊我就只介紹三個因為其他的差不多
Type:類型
就是表示這個封包傳送的類型是甚麼,選項有- Type 0: 回應(Echo Reply),表示收到回應。
- Type 8: 請求(Echo Request),通常用來進行 Ping 測試。
- Type 3: 目的地無法到達(Destination Unreachable)。
- Type 11: 超時(Time Exceeded)。
Code:錯誤代碼
這個只有在Type代碼等於3時才會顯示出來,可用的選項有- Code 0: 網路無法到達
- Code 1: 主機無法到達
- Code 3: 端口無法到達
Data:資料
就是傳送的測試資料,在Windows Ping工具傳送的data是A到Z的英文字母
開始抓取Ping封包
了解完這些資訊後就可以開始抓取Ping封包了,在開始前因為我們要知道Ping人家和被Ping的人接收到的封包是甚麼樣子的,因此我們需要兩台電腦來監控Ping
讓被Ping的人可以被Ping
在Windwos系統的防火牆中預設是人家Ping你時你的電腦不會回應,所以如果開啟回復Ping的功能,Ping這台電腦的IP就等同於Ping一個不存在的IP,所以現在就快速開啟設定吧
剛剛說了,主要就是因為防火牆的關西,所以最直接的方式就是直接把防火牆關閉就可以了
完全關閉很危險
再關閉前請先確認你的環境中是否使用的是公共網路,假設你在公共網路把防火牆關閉了,黑客就可以直接查看你電腦中的所有port,很容易攻擊成功
痾,我之後補
用WireShark開始抓取
如何寫Filter
我們知道Ping的傳輸協定是使用ICMP傳送封包,所以我們在Wireshark中要抓取的封包就是有使用ICMP協議的封包,這樣我們有了封包也有了傳輸協定,現在我們就可以來寫我們的Filter,要如何寫呢
你各位其實不用把她想得太複雜,因為封包就是封包本身,我們要擷取的封包是ICMP,所以我們Filter就是 –> ICMP
開始抓封包
有了filter後就要發送封包了,發送的步驟是這樣的
因為我們有兩台電腦的關西,並且兩台電腦要輸入的指令也都不一樣,所以我會先說明兩台電腦分別要做甚麼
- 電腦一
電腦一是要被Ping的電腦,所以我們要先找出這台電腦的IP是多少
- 開啟WireShark輸入剛剛的filter
- 在電腦中打開cmd,(win + r 輸入 cmd 然後 enter)
- 輸入
ipconfig
- 接著會跳出很多資訊,紀錄名稱是
IPv4 位置
的IP
- 電腦二
電腦二要做的就是去Ping剛才的電腦IP,直接實作
- 開啟WireShark輸入剛剛的filter
- 在電腦中打開cmd,(win + r 輸入 cmd 然後 enter)
- 輸入
ping <另一台設備IPv4>
- 電腦開始ping指定的IP
- ping四次後結束
查看封包
如果順利的話你的WireShark中應該會出現這樣的畫面
沒錯這就是我們剛剛發送的封包,眼尖的同學可能有注意到我使用的filter並非icmp
,而是imcp and ip.addr == 192.168.0.11
,我使用這個不同的filter原因是因為使用icmp協定傳輸封包的設備不會只有我一個,也有可能另外一台設備正在使用icmp傳輸封包。那要濾掉出我自己的ping的設備就可以用ip.addr
,這個意思是「過濾出那些從 192.168.0.11」發出接收封包的IP,所以我只要把IP換成發送封包給被Ping設備的電腦就可以了
那接下來就來看看這個封包裡面的內容了,這時我們雙點及其中一個封包他的內容和資訊就會顯示在跳出的框中,像這樣
現在我們可以來以值觀的方式了解封包中傳遞的訊息了,接著我們展開第一個摺疊部分,就是圖中被標示的欄位
好的那現在就來解比較重要的資訊吧
Frame 212: 74 bytes on wire (592 bits), 74 bytes captured (592 bits)
這一行顯示封包的總編號 (Frame 212) 以及封包的大小。它表示這個封包在網路上傳輸的大小是 74 個 bytes (592 bits)Interface id: 0
顯示封包是從哪個網路卡抓取到的,也就是網路卡的名稱和編號,通常不會用到Arrival Time: Sep 24, 2024 22:56:59.177142000 高北標準時間
封包到達電腦的時間 (2024 年 9 月 24 日 22:56:59)
“高北標準時間” 指的是當地的時區UTC Arrival Time: Sep 24, 2024 14:56:59.177142000 UTC
這是封包到達的 UTC (協調世界時間)Epoch Arrival Time: 1727318919.177142000
封包到達的 Epoch 時間,也就是timestempFrame Number: 212
這是這個封包在捕捉中的序號,這裡是第 212 個封包Frame Length: 74 bytes (592 bits)
封包的總長度,包括所有封裝的資料。這裡顯示為 74 bytes,或 592 bitsCapture Length: 74 bytes (592 bits)
Wireshark 捕捉到的實際封包長度,這裡顯示也是 74 bytes,這表示 Wireshark 完整抓取了整個封包Protocols in frame: eth:ethertype:ip:icmp:data
這顯示了封包內包含的協議,從最底層到最高層 (就是千層蛋糕,例如
乙太網路 (Ethernet) -> 乙太網類型 (Ethertype) -> IP 協議 -> ICMP 協議 -> 封包的資料
到這裡關於Ping部分的實作就已經完成了,當然這只是WireShark應用中的一小環節,除了查看Ping封包協定外還有很多協定可以去探討,所以下一個標題就要繼續去抓另外一個封包了,我們的速度也會越來越快,要跟上喔
抓取ARP封包
其實大同小異
老實說這更抓取Ping封包大同小異,唯一不同的就是Filter而已,所以這邊我就簡短寫一點
如何寫Filter
我們抓取這個封包的原因就只是要來實際的看到一個ARP封包中的資訊,那先前有說過ARC就是兩個端點要溝通前詢問對方位置的請求,為什麼要發送可以往前翻一下這邊就不多說了,這邊的重點還是一樣的問題…我們要如何寫Filter
跟Ping一樣,先看一下他的協定是甚麼,這時候你會發現,诶其實ARP本生就是一個協定,那如果我要找這個協不是直接發它放進filter就可以了嗎,沒錯所以我們的Filter就是 arp
查看封包
把Filter放入後開始擷取封包就會發現有些設備再詢問IP地址耶,沒錯這就是我覺得超級有趣的地方,圖片長這樣
以我家網路舉例可以看到一個叫做TPLink的路由器在詢問 「誰是IP: 192.168.0.202」,請回報IP: 192.168.0.1,是不是超級酷的可以看到網路設備再溝通耶,但是更酷的在後面因為我的電腦IP就是192.168.0.202,所以我們可看到我們的電腦就回復了這個廣播訊號,具體在幹嘛呢就點開來看吧
網路世界的安全系統
有個殘酷的現實就是其實大部分的封包你都不會知道在幹麻,因為他們都被加密了,但是這並不代表這是一件壞事情,可以想像一個情境
假設你今天在北車連上了iTaiwan的公開網路,但是糟糕的是這個公開網路的路由上方被某駭客接了一個HUB,讓路由傳送進去/出來的封包都複製到駭客的電腦中,假設你現在開啟了銀行網站登入的網頁,並且輸入好密碼資訊等在你按下登入的這個動作,從你電腦就會發送你的登入資訊給路由器,路由器就會透過gateway把資訊發送到銀行,但與此同時你的封包也會被複製給駭客,那這樣你的銀行帳號就被盜取了…錯,正是因為有加密封包的存在,所以駭客接收到的封包內容只會是一串亂碼,並不會包含你的帳號密碼等資訊
這樣一大串的解釋應該既可以理解為什麼你無法讀取封包了吧,因為這就網路安全的…一部份
抓取 DNS 封包
DNS是甚麼
DNS 的全名是 Domain Namw System
,甚麼意思呢,就是像是給一個IP重新命名讓原本醜醜的IP變成另外一個名稱,比較專業的定義就是「用有意義的名稱取代無意義的數字」,就像是google.com的其中一個網站IP是172.253.63.100
但是你同樣也可以使用google.com
DNS如何運作的
我們已使用Ping工具舉例,當我們去Ping一個Domain時我們的電腦並不知道這個Domain的表示IP是誰,所以這時候就要先發送一個封包到DNS伺服器去問這個Domain的指向哪個IP,接著DNS伺服器傳你一個IP後,你的電腦才會開始去Ping DNS伺服器回傳給你的IP
那這個DNS伺服器通常是你的ISP(網路服務商)提供的,他們的伺服器會讓你去問這個Domain的IP是多少UDP
那DNS伺服器幼時誰提供的呢,以下有了列表給大家參考
DNS伺服器可以說就是把你想要瀏覽的網站全部都發送給DNS的主機,那這個主機可以決定你
- 101 不存你資料
- 8.8.8.8 google
- 1.1.1.1 速度快
- opendns 不防網站有風險
- 114dns 分別防詐騙,挖礦等
- 1.2.4.8 對岸的dns
- hinet 中華電信
- NCU 中央大學
DNS的Header們
在發送DNS封包時他的表頭被分為兩個部分,一個是實際要問的封包,另一個是要問封包的大小數量資訊
ID : 識別碼,就是電腦用和伺服器用來確認封包名稱的欄位,數值是隨機的
QR : 表示這是查詢封包還是回應封包
OPcode : 操作碼
AA, TC, RD, RA : 不重要,不會用到
Z : 保留欄位
RCcode : 錯誤碼,0000表示無錯誤
Qs Count:表示你有幾個問題,表示你有多少個Domain要問
Answer : 回答你有多少個答案
Authority RRs Count : 附加資訊 (無用)
Additional RRs Count : 附加資訊 (無用)
發送問題內容
Qs Name : 問題的名稱,你的Domain
- length for laybal : 在封包中domain的字串長度
- zreo for end : 表示封包中domain輸入結束
Qs Type : 問題的類別,IPv4, IPv6
Qs Class : 問題的class,A、B、C
DNS回復格式
- Name : 問題回答的名稱,你的Domain
- Type : 問題回答的類別,IPv4, IPv6
- Class : 問題回答的class,A、B、C
- TTL : 叫你把你這個回答留在記憶體中,短時間內不要再問這個domain,以秒數為單位
- RDlength : 4byte,表示IPv4,如果是v6就會更常
- RDdata : 有多少個回答就會繼續續接下去
清除ttl
打開終端機後輸入 ipconfig /flushdns
,就可以清除TTL快取了
開始擷取封包
因為我們之前都練習過了,所以我就不再解釋為什麼我們的Filter是這樣,這別直接給答案 -> dns
,那因為剛才說到TTL的關西,這表示這個DNS的IP會儲存在你的快取中,所以在你要Ping你需要先執行ipconfig /flushdns
把佔存起來的TTL清除
操作步驟
執行完清除快取的指令後就可以把wireshark的封包監聽打開了,那這時候你在輸入ping <domain>
應該就收到dns的封包,會像這樣
確認有收到後封包後就可以停止監聽了,那接著我們點開封包查看資訊