iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 22
1
Security

鯊魚咬電纜:30天玩Wireshark系列 第 30

[Day 22] tshark很快,但要怎麼用?

昨天初步介紹了tshark這個指令,今天就來介紹幾個如何使用這個指令的實例。

  1. 從pcap檔案中取出特定欄位,並轉成csv檔案
    例如我現在要從evidence04.pcap這個檔案中取出相對封包時間、來源IP、目標IP、Protocol、來源Port、目標Port、封包大小等資料,不需要各欄位標題,接著以逗點作為分隔符號,產出一個包含結果並叫做output.csv的檔案,我的指令就可以下這樣:
    tshark -r evidence04.pcap -T fields -e frame.time_relative -e ip.src -e ip.dst -e ip.proto -e tcp.srcport -e tcp.dstport -e frame.len -E header=n -E separator=, -E quote=n -E occurrence=f > output.csv

https://ithelp.ithome.com.tw/upload/images/20180110/20107304ripKRngsM6.png

順帶一題,因為我偷懶不想輸入檔案路徑,所以直接把讀取的檔案和匯出的檔案路徑都放在Wireshark資料夾下,所以cmd就要記得用系統管理者模式開啟,不然程式的權限會不夠喔。

指令跑完後我們看一下output出來的檔案,也就是我們要的結果。

https://ithelp.ithome.com.tw/upload/images/20180110/2010730433iXI1EeZc.png

那我們來分解一下剛剛下的指令:

tshark 執行tshark功能
-r evidence04.pcap 開啟匯出的檔案路徑及檔名
-T fields 輸出格式,選fields的話就是欄位方式來匯出,也可以選擇json等格式,須配合後面的-e 及 -E參數使用
-e frame.time_relative 取出相對封包時間的欄位資料
-e ip.src 取出來源IP的欄位資料
-e ip.dst 取出目標IP的欄位資料
-e ip.proto 取出Protocol的欄位資料
-e tcp.srcport 取出來源Port的欄位資料
-e tcp.dstport 取出目標Port的欄位資料
-e frame.len 取出封包大小的欄位資料
-E header=n 匯出的檔案需不需要標註欄位名稱
-E separator=, 匯出的檔案要以什麼符號作為分隔符號,/t是tab,/s是一格空白,或是可以直接打你要做為分隔的符號
-E quote=n 匯出的檔案每個資料需要有引號包住資料嗎,d是雙引號,s是單引號,n是不用引號,預設是n
-E occurrence=f 選擇欄位如果有多值的話要以哪個為準,f是第一個值,l是最後一個值,a則是所有值都列出,預設值是a
> output.csv 匯出的檔案路徑及檔名

補充一下,關於-e的參數,如果想看所有欄位的列表的話可以到官網查詢(網址:https://www.wireshark.org/docs/dfref/ )。

  1. 用tshark來擷取網路流量並存成一個新的封包檔
    tshark也有提供我們直接使用指令來擷取封包的功能,而跟圖形化介面的版本一樣,首先必須確認要收的是哪一張網卡的資料,所以我們先使用「tshark –D」這個指令,他會列出目前電腦的所有網卡。從下面的圖可以看到,我的電腦共有6個網路介面,雖然其中有些是亂碼,但我屈指一算,確定我正在使用的網卡是編號3的這塊。

https://ithelp.ithome.com.tw/upload/images/20180111/20107304hj9CRDEFH8.png

確認要收流量的網路介面後,我們就可以下「tshark -i 3 -w test.pcap」這個指令,而tshark就會知道要從第3張網路介面收封包,並且把檔案存成test.pcap。開始執行後,cmd會顯示你收的是哪個網路介面的封包,以及目前收到第幾個封包,而當你想要結束時,按下Ctrl+v就可以跳出。

https://ithelp.ithome.com.tw/upload/images/20180111/201073044osEb6Wu8f.png

從上面的圖可以看到,剛剛的測試中總共收了438個封包,而實際打開test.pcap後如下圖,也可以發現的確是收到了438個封包。

https://ithelp.ithome.com.tw/upload/images/20180111/20107304JYmkBSMe9F.png

如果不想把收的封包存成pcap,而是想存成文字檔的話,可以把剛剛的-w指令改成>,如「tshark -i 3 >test.txt」,這樣就會存成單純的文字格式,用wireshark就無法開啟這個檔案,只能用文字編輯工具開啟。

https://ithelp.ithome.com.tw/upload/images/20180111/20107304jokUJwLGVR.png

從上圖可以看到我們用這個方式收了64個封包,而實際用文字編輯器打開檔案後,發現的確也是收了64個封包,如下圖。請注意上圖雖然我把檔案命名為test.pcap,但他內容的格式並不是真的pcap,所以是無法用Wireshark打開的喔。

https://ithelp.ithome.com.tw/upload/images/20180111/20107304pZzJvugKUJ.png

如果想在收封包的時候一併下過濾條件也是可以的,只要加上-f的指令就可以,例如「tshark -i 3 -w test.pcap –f "port 443"」,就可以只收到流經port 443的封包。

此外,如果想一邊收封包,一邊在CMD介面看到收到封包的資料,可以多下一個-V的指令,例如「tshark -i 3 -w test.pcap –V」,所收到封包的內容除了會存成TEST.PCAP外,也會顯示在畫面上,不過因為封包數量一多,畫面也會跑得很快,可能也很難看清楚內容就是。

tshark還有很多好用的功能跟參數,但因為族繁不及備載,如果還需要更多功能的話可以參考參數的說明來下指令,或是也歡迎留言一起討論要怎樣下指令比較好喔~


上一篇
[Bonus Day 21] 國際資安法:塔林手冊(二)
下一篇
[Day 23] 解解題 Puzzle #7: Ann’s Dark Tangent (DEFCON 2010)
系列文
鯊魚咬電纜:30天玩Wireshark51

尚未有邦友留言

立即登入留言