封包擷取and Wireshark應用
主題: |
封包擷取&wireshark應用 |
文章簡介: |
介紹如何在Linux or Solaris環境下擷取封包並以wireshark對封包做進一步的查詢及分析 |
作者: |
朱冠宇 |
版本/產出日期: |
V1.0/2016.11.02 |
1. 前言
• 本文件用來提供SI在Linux or Solaris環境下利用封包擷取及分析封包內容,來判斷和釐清問題所在。
2. 目的
• 初步了解封包擷取及Wireshark的基本運用。
3. 開始前準備
• Linux tcpdump command認識
• Solaris snoop command 認識
• Wireshark application
4. 封包擷取實務及Wireshark介紹
• 在查詢兩方server端互相的溝通問題時,可用擷取雙方網路的封句和細讀封包裡的內容,了解實際封包裡傳了什麼和回應了什麼?
• 那要怎麼擷取封包呢?首先先確認你的server是Linux or Solaris,在Linux下我們會以tcpdump command擷取封包,而在Solaris的環境下我們會以snoop command來擷取封包。(不管是tcpdump or snoop command都只有root user才可以執行)
4.1、 tcpdump command 介紹
tcpdump 是一個能夠擷取所有本機網路封包的Linux command。
比較常用的選項有:
.-i:指令要監控的網路介面,如 eth0、lo、any 等。
.-c:監聽的封包數,如果沒有這個參數,tcpdump 會持續不斷的監聽,直到使用者輸入
[ctrl]-c 為止。
.-w:如果你要將監聽所得的封包資料儲存下來,後面接檔名。
若只想擷取某個IP or port也可指定條件式讓tcpdump 只擷取某些封包。 條件式可以是單一的基本條件式, 或用 and(&&),or(||),not(!) 以及()組合基本條件式而成。
常用的基本條件式:
host 192.168.0.254 |
來源或目的 IP 是 192.168.0.254 |
src host 192.168.0.254 |
來源 IP 是 192.168.0.254 |
dst host 192.168.0.254 |
目的 IP 是 192.168.0.254 |
tcp/udp/icmp |
封包內有 tcp/udp/icmp 的資料 |
port domain |
來源或目的 port 為 domain (53) 可加上 src,dst 或 tcp,udp 做進一步限制 |
Example:
#tcpdump -i eth0 'tcp'
針對interface eth0 封包內有tcp的資料擷取封包
#tcpdump -i eth0 'host 192.168.0.X'
針對interface eth0 封包內有IP 192.168.0.X的資料擷取封包。
#tcpdump -i eth0 'tcp and host 192.168.0.X'
針對interface eth0 封包內有tcp and IP 192.168.0.X的資料擷取封包。
#tcpdump -i eth0 'tcp port 22 and host 192.168.0.X'
針對interface eth0 封包內有 tcp port 22 and IP 192.168.0.X的資料擷取封包。
#tcpdump –i eth0 –w /tmp/test.cap
針對interface eht0擷取封包,並將封包存在/tmp/test.cap
4.2、 snoop command 介紹
snoop 是一個Oracle Solaris內建的command,用來network troubleshooting和分析。
比較常用的選項有:
-d: 指令要監控的網路介面
-o: 如果你要將監聽所得的封包資料儲存下來,後面接檔名。
Example
# snoop -d e1000g0 host 192.168.0.X
針對interface e1000g0 封包內有IP 192.168.0.X的資料擷取封包。
# snoop -d e1000g0 host 192.168.0.X and port 80
針對interface e1000g0 封包內有IP 192.168.0.X and port 80的資料擷取封包。
# snoop -d e1000g0 –o /tmp/test.cap
針對interface e1000g0擷取封包,並將封包存在/tmp/test.cap。
#snoop –i xxx.cap
查看先前snoop的封包內容
tcpdump 和 snoop都可以直接在console上看其封包結果,使用上還是以Wireshark工具來分析封包更為方便。
4.3、 Wireshark 介紹
Wireshark(前稱Ethereal)是一個免費開源的網路封包 分析軟體。網路封包分析軟體的功能是截取網路封包,並盡可能顯示出最為詳細的網路封包資料。
Wireshark是目前全世界最廣泛的網路封包分析軟體之一。
你可以在Wireshark的官方網站取得這個工具
以下以mac為例以Wireshark開啟一個封包檔案會有3個視窗格如下圖。
1. 封包清單:顯示封包列表,所列出目前擷取的封包,或是之前存檔的封包清單,預設值會以為第一個欄位(流水號)來排序。
2. 封包內容:會依封包清單窗格所選擇的封包而改變,Wireshark將該封包內容解碼後,以較直覺、較易理解的分層形式顯示出來。
3. 位元組格式:顯示內容和封包內容窗格相同,但以位元組的格式來呈現。
Filter功能:可透過這個功能只過濾出你想看的封包內容。
比如說我只想看封包有IP來自172.30.27.16 and 172.30.27.5的封包內容
在Filter輸入以下條件,即可過濾出來。如下圖
Following TCP streams: 我們如果想要知道交談中傳送的封包,或是想了解在整個TCP會談中,應用層下了那些命令、處理了那些資料、順序為何,便可使用此功能。
在想看的封包按下右鍵選擇Follow->TCP Stream。如下圖
可以看到兩台主機在TCP會談整個過程,可看到完整的HTTP表頭。如下圖
Find a packet:也可以直接找封包內容裡有出現的字來查詢封包
1. 選取放大鏡Find a Packet。
2. 2.填入你要找的封包條件,按下Find鍵搜。
如下圖
5. 參考來源
• tcpdump指令介紹
http://linux.vbird.org/linux_server/0140networkcommand.php
• Solaris snoop sample
http://thegeekdiary.com/solaris-snoop-15-awesome-practical-examples/
• How to use snoop in Solaris
http://www.unixarena.com/2013/05/how-to-use-snoop-in-solaris.html
• Wireshark介紹