封包擷取and Wireshark應用

George Chu 2016/11/21 10:08:55
4038







主題

封包擷取&wireshark應用

文章簡介

介紹如何在Linux or Solaris環境下擷取封包並以wireshark對封包做進一步的查詢及分析

作者

朱冠宇

版本/產出日期

V1.0/2016.11.02




1. 前言

本文件用來提供SILinux or Solaris環境下利用封包擷取及分析封包內容,來判斷清問題所在。






2. 目的

初步了解封包擷取及Wireshark的基本運用






3. 開始前準備

Linux tcpdump command認識

Solaris snoop command 認識

Wireshark application






4. 封包擷取實務及Wireshark介紹

在查詢兩方server端互相的溝通問題時可用擷取雙方網路的封句和細讀封包裡的內容,了解實際封包裡傳了什麼和回應了什麼?

那要怎麼擷取封包呢?首先先確認你的serverLinux or Solaris,在Linux下我們會以tcpdump command擷取封包,而在Solaris的環境下我們會以snoop command來擷取封包。(不管是tcpdump or snoop command都只有root user才可以執行)




4.1、 tcpdump command 介紹


tcpdump 是一個能夠擷取所有本機網路封包的Linux command


比較常用的選項有:

-i:指令要監控的網路介面,如 eth0loany 等。

-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) 可加上 srcdst tcpudp

做進一步限制




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的資料擷取封包。


#tcpdumpi 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官方網站取得這個工具

https://www.wireshark.org


以下以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介紹

https://www.wireshark.org

George Chu