<font color='blue'>**情境介紹**</font> :::info 很多時候由於我們的網路連線出現問題,使用類似 ping 的軟體功能卻又無法找出問題點,這時候就可以選擇使用『分析封包流向』的方法解決問題 ::: :::spoiler 封包 網路封包是目前網路用來傳送資料的『 最小 』單位。封包因為不同的應用服務或通訊協定,而有各種不同的大小。一個封包由標頭(Header)和資料(Data)所組成,封包的屬性被詳細地定義在標頭中,包括所使用的通訊協定、來源的IP位址、來源的通訊埠、目的地的IP位址、目的地的通訊埠等欄位,不過並非所有的通訊協定都有相同的欄位資料,由於採用不同的通訊協定,網路封包的結構都有些許的差異。 ::: - 目前常見的網路封包分析工具有==Tcpdump==、Sniffer、NetXRay、==Wireshark==等 ## tcpdump ``` sudo tcpdump -i eth0 -nn -c 8 ``` - sudo : 表示進入root模式 - -i : 指定要監聽的網路卡介面 - -nn : 直接以 IP 及 port number 顯示,而非主機名與服務名稱 - -c : 指定要抓取的封包數量 #### 結果解釋 ![](https://hackmd.io/_uploads/Hyg_ojPcn.png) $1$ `14:05:14.258775` : 此封包被擷取的時間,『時:分:秒』的單位; $2$ `ARP` : 透過的通訊協定是ARP $3$ `Request who-has 10.106.46.112 tell 10.106.1.254` : 這是一個ARP請求 - 請求是從10.106.1.254這個IP address發送出去,去詢問10.106.46.112的Ethernet address [ARP 參考文件](https://www.tsnien.idv.tw/Manager_WebBook/chap4/4-2%20ARP%20%E5%8D%94%E5%AE%9A%E8%88%87%E5%88%86%E6%9E%90.html) $4$ `length 42`:這表示整個ARP請求訊息的長度(以位元組為單位) ![](https://hackmd.io/_uploads/rkeGwiwqn.png) - 捉下來的封包數量 - 由過濾所得的封包數量 - 被核心所丟棄的封包數量 ### 觀察server端與client端 `sudo tcpdump -i en0 -nn -c 10 'tcp'` - 封包的傳遞都是雙向的, client 端發出『要求』而 server 端則予以『回應』,所以,當然是有去有回 - 實際例子 terminal_1 ``` ssh lilina ``` terminal_2 ``` sudo tcpdump -i en0 -nn | cat>waste.txt grep 163.22.17.162 waste.txt ``` ![](https://hackmd.io/_uploads/S18Bq6vc3.png) ![](https://hackmd.io/_uploads/SJqdzCP9n.png) 可以想像成: A:「喂?有聽到嗎?」 B:「有聽到喔,你那邊聽得到我聲音嗎?」 A:「可以喔。」 ### tcpdump基本參數 ![](https://hackmd.io/_uploads/SkqmIivq3.png) ## Wireshark ![](https://hackmd.io/_uploads/B1EnpAPc3.png)