網絡抓包工具 wireshark 入門教程

Wireshark(前稱Ethereal)是一個網絡數據包分析軟件。網絡數據包分析軟件的功能是截取網絡數據包,并盡可能顯示出最為詳細的網絡數據包數據。Wireshark使用WinPCAP作為接口,直接與網卡進行數據報文交換。

網絡管理員使用Wireshark來檢測網絡問題,網絡安全工程師使用Wireshark來檢查資訊安全相關問題,開發者使用Wireshark來為新的通訊協定除錯,普通使用者使用Wireshark來學習網絡協定的相關知識。當然,有的人也會“居心叵測”的用它來尋找一些敏感信息……。Wireshark相對于tcpdump而言,界面更友好,功能更強大。

安裝

mac上安裝wireshark

windows上安裝wireshark

linux下安裝wireshark

基本使用

以下的介紹都是以mac下的wireshark 1.12.2版本為基礎。

認識界面

說明:

常用按鈕從左到右的功能依次是:

1、列出可用接口。

2、抓包時需要設置的一些選項。一般會保留最后一次的設置結果。

3、開始新的一次抓包。

4、暫停抓包。

5、繼續進行本次抓包。

6、打開抓包文件。可以打開之前抓包保存后的文件。不僅可以打開wireshark軟件保存的文件,也可以打開tcpdump使用-w參數保存的文件。

7、保存文件。把本次抓包或者分析的結果進行保存。

8、關閉打開的文件。文件被關閉后,就會切換到初始界面。

9、重載抓包文件。

設置數據抓取選項

點擊常用按鈕中的設置按鈕,就會彈出設置選項對話框。在這個對話框中我們可以選中需要監聽的接口,設置混雜模式,設置抓取數據包的過濾條件。如下圖:

首先,選中需要監聽獲取數據包的接口。接口列表區列出了所有可以使用的接口。如果接口前面的復選框被選中,說明對這個接口監聽捕獲數據包。

其次,設置混雜模式。設置混雜模式的作用是將網卡設置到混雜模式。如果不設置混雜模式,你的計算機只能獲取數據包發往的目標是你計算機和從你計算機出去的數據包。如果設置了混雜模式,你就可以捕獲局域網中所有的數據包。如果窗口中的 "Use promiscuous mode on all interfaces"前面的復選框被選中,說明對所有的接口使用混雜模式。如果想單獨設置,可以雙擊接口列表中的接口,會彈出如下的對話框。然后選中或者去掉“Capture packets in promiscuous mode”前面復選框。然后點ok按鈕。

再次,設置捕獲過濾條件。在點設置按鈕彈出的主設置對話框中和雙擊接口列表彈出的對話框中都會有“Capture Filter”項。在文本框中我們可以設置捕獲過濾條件。如,我們只捕獲http相關的數據包,我們就可以設置捕獲條件為“port 80”。因為http使用的是80端口。

最后,所有的設置完畢后,點擊設置主窗口中的“Start”按鈕,開始捕獲數據。數據捕獲完后,可以點常用按鈕中的“保存”按鈕保存數據。

使用顯示過濾器

顯示過濾器應用于捕獲文件,用來告訴wireshark只顯示那些符合過濾條件的數據包。顯示過濾器比捕獲過濾器更常用。他可以用來過濾不想看到的數據包,但是不會把數據刪除。如果想恢復原狀,只要把過濾條件刪除即可。

過濾器表達式對話框,是的wireshark的可以很簡單的設置過濾表達式。點擊“Expression”按鈕就可以打開這個對話框。如下圖:

對話框分左中右三部分。左邊為可以使用的所有協議域。右邊為和協議域相關的條件值。中間為協議域與條件值之間的關系。過濾器表達式對于初學者很有用。如上圖,我們創建的表達式的作用是,只顯示http協議包中包含關鍵詞“bo56.com”的所有數據包。

Field name說明:
這個列表中展示了所有支持的協議。點擊前面的三角標志后,可以列出本協議的可過濾字段。當選中“Field name”列表中的任何一項,只需要輸入你想要的協議域,就會自動定位到相應的協議域選項。

Relation說明:
is present ? ?如果選擇的協議域存在,則顯示相關數據包。
contains ? ??判斷一個協議,字段或者分片包含一個值
matches???????????? 判斷一個協議或者字符串匹配一個給定的Perl表達式。

Value(Protocol)說明:
此處輸入合適的值。如果選擇的協議域和這個值滿足Relation中指定的關系,則顯示相關數據包。

Predefined values說明:
有些協議域包含了預先定義的值,有點類似于c語言中的枚舉類型。如果你選擇的協議域包含這樣的值,你可以在這個列表中選擇。

Function函數說明:
過濾器的語言還有下面幾個函數:
upper(string-field)-把字符串轉換成大寫
lower(string-field)-把字符串轉換成小寫
upper((和lower((在處理大小寫敏感的字符串比較時很有用。例如:
upper(ncp.nds_stream_name) contains "BO56.COM"
lower(mount.dump.hostname) =="BO56.COM"

如果你熟悉了這個規則之后你就會發現手動輸入表達式更有效率。當時手動在flter文本框中輸入表達時,如果輸入的語法有問題,文本框的背景色會變成紅色。這時候,你可以繼續輸入或者修改,知道文本框中的表達式正確后,文本框的背景色又會變成綠色。

使用著色規則

你經常會在數據包列表區域中看到不同的顏色。這就是wireshark做的很人性化的一方面。它可以讓你指定條件,把符合條件的數據包按指定的顏色顯示。這樣你查找數據包會更方便些。下面我們說一下如何設置顏色規則。

點擊“view”菜單,然后選擇“Coloring Rules”選項就會彈出設置顏色規則設置對話框。你點擊顏色規則設置的快捷按鈕也可以打開顏色設置對話框。如下圖:

打開的對話框中默認已經有一些規則。我們抓取的數據包中經常會看到一些不同的顏色,就是應用的這些默認的規則。點擊“New”按鈕可以添加規則。如下圖:

name字段中填寫規則的名稱,方便記憶。

string字段中填寫過濾規則。這里的語法和顯示規則表達式一致。點擊 上圖中的“Expression”按鈕,你就會看到熟悉的規則表達式對話。

Foreground Color按鈕用于選擇前景色。

Background Color按鈕用于選擇背景色。

Disabled按鈕用于指示是否禁用這條規則。

點擊ok按鈕后,規則自動會添加到規則列表中的最前端。

注意:wireshark在應用規則的時候,是按自上而下的順序去應用規則。因此剛添加的規則會優先應用。如果你想調整順序,可以選中要調整順序的規則,然后點擊右邊的“UP” 或則 “Down” 按鈕。

顏色規則設置好后,只需要點apply按鈕就可以應用規則了。規則效果應用如下圖:

?

使用圖表

圖形分析是數據分析中必不可少的一部分。也是wireshark的一大亮點。wireshark有不同的圖形展現功能,以幫助你了解捕獲的數據包。下面我們對經常使用的IO圖,雙向時間圖做下介紹。

IO圖

wireshark的IO圖讓你可以對網絡上的吞吐量繪圖。讓你了解網絡數據傳輸過程中的峰值和波動情況。通過“Statistics”菜單中的“IO Graphs”選項可以打開這個IO圖對話框。如下圖:

可以看到IO圖表對話框中會分為三個區。

過濾器區:設置過濾條件,用于圖形化展示過濾條件相關數據包的變化情況。而且可以為每個不同的條件指定不同的顏色。過濾條件的語法和之前介紹的顯示過濾器的語法一致。過濾條件為空,此圖形顯示所有流量。

坐標區:在這里可以設置圖表的x軸和y軸。x軸為時間,y軸為包的數量。如圖,我們設置Y軸的單位是Bytes/Tick。

趨勢圖區:根據過濾器設置的條件和坐標區設置,數據分析后回在這個區域以圖形化方式展示。點擊圖形中的點,會自動定位到相應的數據包。點擊趨勢圖中的低谷點,你會發現大量的數據包重傳。

IO圖表還可以通過函數對數據進行聚合處理。

點擊Y軸中Unit選項中的Advanced后,就會再過濾器區就會增加Calc選項。如下圖:

相關函數說明:

MIN( ), AVG( ), MAX( ) 分別是統計協議域中數值的最小,平均和最大值。注意,這三個聚合函數只對協議域的值為數字的才有效。

Count( )?此函數計算時間間隔內事件發生的次數,在查看TCP分析標識符時很有用,例如重傳。

Sum( )?該函數統計事件的累加值。和MIN()函數一樣,這個也只有協議域的值為數字的情況下才有效。

雙向時間圖

wireshark還有一個功能就是可以對網絡傳輸中的雙向時間進行繪圖。雙向時間(round-trip time, RTT),就是一個數據包被確認正常接收所花費的時間。以tcp協議為例,就是你push一個數據到一臺主機,主機回應一個ack給你的主機,你的主機并成功接收ack回應。這兩個過程花費的時間總和就是雙向時間。雙向時間通常用來尋找網絡傳輸過程中的慢點和瓶頸,用以判斷網絡傳輸是否有延遲。

通過“Statistics”菜單中的“Tcp ?StreamGraph”中的“Round Trip Time Graph”選項可以打開這個雙向時間圖對話框。如下圖:

這個圖表中的每個點代表一個數據包的雙向時間。你可以單機圖表中的任何一點,然后在數據包列表區就會自動定位到相應的數據包。從數據表來看,我們下載壓縮包還是比較穩定的。數據包的rtt時間大多數在0.05s以下,其他大多數在0.1s左右,少數超過了1.5s。

跟蹤tcp流


Wireshark分析功能中最不錯的一個功能是它能夠將TCP流重組。重組后的數據格式更容易閱讀。跟蹤TCP流這個功能可以將接收到的數據排好順序使之容易查看,而不需要一小塊一小塊地看。這在查看HTTP、FTP等純文本應用層協議時非常有用。

我們以一個簡單的HTTP請求舉例來說明一下。打開wireshark_bo56_pcap.pcapng,并在顯示過濾器中輸入“http contains wireshark”,點擊“apply”按鈕后,在數據包列表框中就會只剩下一條記錄。如下圖。

右鍵單擊這條記錄并選擇Follow TCP Stream。這時TCP流就會在一個單獨的窗口中顯示出來。如下圖:

wireshark_tcp_follow_dialog

我們看到這個窗口中的文字會有兩種顏色。其中紅色用于表示從源地址到目標地址的流量。在我們的例子里面就是從我們本機到web服務器的流量。你可以看到最開始的紅色部分是一個GET請求。藍色部分是和紅色部分相反的方向,也就是從目標地址到源地址的流量。在我們的例子中,藍色部分的第一行是“HTTP/1.1 200 OK”,是來自服務器的一個http成功響應。

在這個窗口中除了能夠看到這些原始數據,你還可以在文本間進行搜索,將其保存成一個文件、打印,或者以ASCII碼、EBCDIC、十六進制或者C數組的格式去查看。這些選項都可以在跟蹤TCP流窗口的下面找到。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384987.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384987.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384987.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

結構體中指針

結構體中帶有指針的情況 #include<stdio.h>struct man {char *name;int age; };int main() {struct man m {"tom",20};printf("name %s, age %d\n",m.name,m.age);return 0; } 運行結果&#xff1a; exbotubuntu:~/wangqinghe/C/20190714$ gcc st…

python使用opencv提取視頻中的每一幀、最后一幀,并存儲成圖片

提取視頻每一幀存儲圖片 最近在搞視頻檢測問題&#xff0c;在用到將視頻分幀保存為圖片時&#xff0c;圖片可以保存&#xff0c;但是會出現(-215:Assertion failed) !_img.empty() in function cv::imwrite問題而不能正常運行&#xff0c;在檢查代碼、檢查路徑等措施均無果后&…

結構體參數

結構體作為函數參數&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h>struct student {char name[10];int age; };void print_student(struct student s) {printf("name %s,age %d\n",s.name,s.age); } void set_studen…

線程間通信之eventfd

線程間通信之eventfd man手冊中的解釋&#xff1a; eventfd()創建了一個“eventfd對象”&#xff0c; 通過它能夠實現用戶態程序間(我覺得這里主要指線程而非進程)的等待/通知機制&#xff0c;以及內核態向用戶態通知的機制&#xff08;未考證&#xff09;。 此對象包含了一個…

【linux 開發】定時器使用setitimer

setitimer Linux 為每一個進程提供了 3 個 setitimer 間隔計時器&#xff1a; ITIMER_REAL&#xff1a;減少實際時間&#xff0c;到期的時候發出 SIGALRM 信號。ITIMER_VIRTUAL&#xff1a;減少有效時間 (進程執行的時間)&#xff0c;產生 SIGVTALRM 信號。ITIMER_PROF&#…

文件操作(寫)

/*** file.c ***/ #include<stdio.h>int main() {//用寫的方式打開一個文件 //w的意思是文件如果不存在&#xff0c;就建立一個文件&#xff0c;如果文件存在就覆蓋FILE *p fopen("/home/exbot/wangqinghe/C/20190716/file1.txt","w");fputs(&qu…

定時器timerfd

1.為什么要加入此定時器接口 linux2.6.25版本新增了timerfd這個供用戶程序使用的定時接口&#xff0c;這個接口基于文件描述符&#xff0c;當超時事件發生時&#xff0c;該文件描述符就變為可讀。我首次接觸這個新特性是在muduo網絡庫的定時器里看到的&#xff0c;那么新增一個…

文件操作(讀)

讀一行&#xff1a; #include<stdio.h> #include<string.h> #include<stdlib.h> const int maxn 10; int main() {char s[1024] {0};FILE *p fopen("/home/exbot/wangqinghe/C/20190716/file.txt","r");//第一個參數是一個內存地址&…

timerfd與epoll

linux timerfd系列函數總結 網上關于timerfd的文章很多&#xff0c;在這兒歸納總結一下方便以后使用&#xff0c;順便貼出一個timerfd配合epoll使用的簡單例子 一、timerfd系列函數 timerfd是Linux為用戶程序提供的一個定時器接口。這個接口基于文件描述符&#xff0c;通過文…

文件操作(解密加密)

文件加密&#xff1a; #include<stdio.h> #include<string.h> #include<stdlib.h>void code(char *s) {while(*s){(*s);s;} }int main() {char s[1024] {0};FILE *p fopen("/home/exbot/wangqinghe/C/20190716/file.txt","r");FILE *p…

linux僵尸進程產生的原因以及如何避免產生僵尸進程defunct

給進程設置僵尸狀態的目的是維護子進程的信息&#xff0c;以便父進程在以后某個時間獲取。這些信息包括子進程的進程ID、終止狀態以及資源利用信息(CPU時間&#xff0c;內存使用量等等)。如果一個進程終止&#xff0c;而該進程有子進程處于僵尸狀態&#xff0c;那么它的所有僵尸…

linux下僵尸進程(Defunct進程)的產生與避免

在測試基于 DirectFBGstreamer 的視頻聯播系統的一個 Demo 的時候&#xff0c;其中大量使用 system 調用的語句&#xff0c;例如在 menu 代碼中的 system("./play") &#xff0c;而且多次執行&#xff0c;這種情況下&#xff0c;在 ps -ef 列表中出現了大量的 defunc…

文件操作函數

fopen()函數參數&#xff1a; r 只讀的方式打開文件。 打開成功返回文件指針&#xff0c; 打開失敗返回NULL r 以讀寫方式打開文件。 文件必須存在 rb 以二進制模式讀寫文件&#xff0c;文件必須存在 rw 讀寫一個二進制文件&#xff0c;允許讀和寫 w 打開只寫文件&…

讀過的最好的epoll講解

首先我們來定義流的概念&#xff0c;一個流可以是文件&#xff0c;socket&#xff0c;pipe等等可以進行I/O操作的內核對象。 不管是文件&#xff0c;還是套接字&#xff0c;還是管道&#xff0c;我們都可以把他們看作流。 之后我們來討論I/O的操作&#xff0c;通過read&#xf…

文件操作函數(讀寫)

文件文本排序&#xff1a; 數組冒泡&#xff1a; #include<stdio.h>void swap(int *a,int *b) {int temp *a;*a *b;*b temp; }void bubble(int *p,int n) {int i;int j;for(i 0; i < n; i){for(j 1; j < n - i; j){if(p[j - 1] > p[j]){swap(&p[j-1],&…

文件操作(升級)

計算字符串“25 32 ” #include<stdio.h> #include<string.h>int calc_string(char *s) {char buf1[100] {0};char oper 0;char buf2[100] {0};int len strlen(s);int i;for(i 0; i < len; i){if( s[i] || - s[i] || * s[i] || / s[i] ){strncpy…

C語言指針轉換為intptr_t類型

C語言指針轉換為intptr_t類型 1、前言 今天在看代碼時&#xff0c;發現將之一個指針賦值給一個intptr_t類型的變量。由于之前沒有見過intptr_t這樣數據類型&#xff0c;憑感覺認為intptr_t是int類型的指針。感覺很奇怪&#xff0c;為何要將一個指針這樣做呢&#xff1f;如是果…

nginx epoll詳解

nginx epoll 事件模型 nginx做為一個異步高效的事件驅動型web服務器&#xff0c;在linux平臺中當系統支持epoll時nginx默認采用epoll來高效的處理事件。nginx中使用ngx_event_t結構來表示一個事件&#xff0c;先介紹下ngx_event_t結構體中成員的含義&#xff1a; struct ngx_ev…

Inotify機制

描述 Inotify API用于檢測文件系統變化的機制。Inotify可用于檢測單個文件&#xff0c;也可以檢測整個目錄。當檢測的對象是一個目錄的時候&#xff0c;目錄本身和目錄里的內容都會成為檢測的對象。 此種機制的出現的目的是當內核空間發生某種事件之后&#xff0c;可以立即通…

文件操作(二進制文件加密解密)

加密 #include<stdio.h> #include<string.h>void code(char *p,size_t n) {size_t i;for(i 0; i < n; i){p[i] 3;} }int main() {FILE *p1 fopen("./a.txt","r");FILE *p2 fopen("./b.txt","w");char buf[1024] {…