對於大多數剛開始接觸wireshark的使用者而言,常常是開始的時候時候看到wireshark能把全部數據包都攔截下來以爲強無敵,可是面對一大堆的數據包要問有什麼用或者說想要找到我想要的那些數據包怎麼找(好比telnet登陸過程的那些數據包)則徹底是一臉茫然。php
一是界面一堆窗口,什麼做用什麼區別看不懂;二是捕獲、顯示過濾器表達示看不出有什麼規律,每次過濾都要百度找半天。其實wireshark界面仍是比較清晰的,過濾器表過示也不困難,咱們今天就來破解這wireshark使用的兩大難題。html
官網地址:https://www.wireshark.org/linux
官網下載地址:https://www.wireshark.org/#downloadweb
另外ethereal爲何在2006年改名wireshark參見:https://www.linux.com/news/ethereal-changes-name-wireshark瀏覽器
另外注意本機訪問本機的迴環數據是不通過網卡的,好比咱們在本機訪問搭建在本機上的web服務,但咱們常常有服務搭建在本機的操做也常常有攔截本地迴環數據包加以分析的需求,因此咱們環要攔載迴環數據包。操做以下。服務器
首先,以管理員身份運行cmd(普通用戶沒有路由表操做權限,會提示「請求的操做須要提高」)網絡
而後,使用ipconfig查看本機ip和網關:jsp
ipconfig
再而後,使用如下命令添加路由,指定迴環數據也要先轉發到網關(使用上一步獲取本的本機ip和網關替換其中的<your_IP>和<gateway_IP>):tcp
route add <your_IP> mask 255.255.255.255 <gateway_IP> metric 1
最後,查看路由表中路由是否已添加成功:ide
route print
迴環數據經網關再回來會增長網卡的壓力,可以使用如下命令刪除路由(使用前邊獲取本的本機ip替換其中的<your_IP>):
route delete <your_IP>
WireShark 主要分爲這幾個界面
1. Display Filter(顯示過濾器), 用於過濾
2. Packet List Pane(封包列表), 顯示捕獲到的封包, 有源地址和目標地址,端口號。 顏色不一樣,表明
3. Packet Details Pane(封包詳細信息), 顯示封包中的字段
4. Dissector Pane(16進制數據)
5. Miscellanous(地址欄,雜項)
封包列表的面板中顯示,編號,時間戳,源地址,目標地址,協議,長度,以及封包信息。 你能夠看到不一樣的協議用了不一樣的顏色顯示。
你也能夠修改這些顯示顏色的規則, View ->Coloring Rules.
這個面板是咱們最重要的,用來查看協議中的每個字段。
各行信息分別爲:
Frame: 物理層的數據幀概況
Ethernet II: 數據鏈路層以太網幀頭部信息
Internet Protocol Version 4: 互聯網層IP包頭部信息
Transmission Control Protocol: 傳輸層T的數據段頭部信息,此處是TCP
Hypertext Transfer Protocol: 應用層的信息,此處是HTTP協議
捕獲過濾器表達式做用在wireshark開始捕獲數據包以前,只捕獲符合條件的數據包,不記錄不符合條件的數據包。
捕獲過濾器表達式沒有像顯示過濾器表達式那樣明顯的規律,但寫法很少因此也不難;並且除非所有捕獲要佔用的磁盤空間實現太大,且你很是明確過濾掉的數據包是你不須要的,否則通常都不用捕獲過濾器表達式而用顯示過濾器表達式。
在wireshark2.x版本,啓動後歡迎界面即有捕獲過濾器,在其中輸入過濾表達式開始捕獲數據包時即會生效:
點擊圖中「書籤」標誌,再點管理「捕獲篩選器」,便可看到經常使用捕獲過濾表達示的書寫形式
顯示過濾器表達式做用在在wireshark捕獲數據包以後,從已捕獲的全部數據包中顯示出符合條件的數據包,隱藏不符合條件的數據包。
顯示過濾表達示在工具欄下方的「顯示過濾器」輸入框輸入便可生效
一條基本的表達式由過濾項、過濾關係、過濾值三項組成。
好比ip.addr == 192.168.1.1,這條表達式中ip.addr是過濾項、==是過濾關係,192.168.1.1是過濾值(整條表達示的意思是找出全部ip協議中源或目標ip、等於、192.168.1.1的數據包)
初學者感受的「過濾表達式複雜」,最主要就是在這個過濾項上:一是不知道有哪些過濾項,二是不知道過濾項該怎麼寫。
這兩個問題有一個共同的答案-----wireshark的過濾項是「協議「+」.「+」協議字段」的模式。以端口爲例,端口出現於tcp協議中因此有端口這個過濾項且其寫法就是tcp.port。
推廣到其餘協議,如eth、ip、udp、http、telnet、ftp、icmp、snmp等等其餘協議都是這麼個書寫思路。固然wireshark出於縮減長度的緣由有些字段沒有使用協議規定的名稱而是使用簡寫(好比Destination Port在wireshark中寫爲dstport)又出於簡使用增長了一些協議中沒有的字段(好比tcp協議只有源端口和目標端口字段,爲了簡便使用wireshark增長了tcp.port字段來同時表明這兩個),但思路總的算是不變的。並且在實際使用時咱們輸入「協議」+「.」wireshark就會有支持的字段提示(特別是過濾表達式字段的首字母和wireshark在上邊2窗口顯示的字段名稱首字母一般是同樣的),看下名稱就大概知道要用哪一個字段了。wireshark支持的所有協議及協議字段可查看官方說明。
過濾關係就是大於、小於、等於等幾種等式關係,咱們能夠直接看官方給出的表。注意其中有「English」和「C-like」兩個字段,這個意思是說「English」和「C-like」這兩種寫法在wireshark中是等價的、都是可用的。
過濾值就是設定的過濾項應該知足過濾關係的標準,好比500、5000、50000等等。過濾值的寫法通常已經被過濾項和過濾關係設定好了,只是填下本身的指望值就能夠了。
所謂複合過濾表達示,就是指由多條基本過濾表達式組合而成的表達示。基本過濾表達式的寫法仍是不變的,複合過濾表達示多出來的東西就只是基本過濾表達示的「鏈接詞」
咱們依然直接參照官方給出的表,一樣「English」和「C-like」這兩個字段仍是說明這兩種寫法在wireshark中是等價的、都是可用的。
數據鏈路層:
篩選mac地址爲04:f9:38:ad:13:26的數據包----eth.src == 04:f9:38:ad:13:26
篩選源mac地址爲04:f9:38:ad:13:26的數據包----eth.src == 04:f9:38:ad:13:26
網絡層:
篩選ip地址爲192.168.1.1的數據包----ip.addr == 192.168.1.1
篩選192.168.1.0網段的數據---- ip contains "192.168.1"
篩選192.168.1.1和192.168.1.2之間的數據包----ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2
篩選從192.168.1.1到192.168.1.2的數據包----ip.src == 192.168.1.1 && ip.dst == 192.168.1.2
傳輸層:
篩選tcp協議的數據包----tcp
篩選除tcp協議之外的數據包----!tcp
篩選端口爲80的數據包----tcp.port == 80
篩選12345端口和80端口之間的數據包----tcp.port == 12345 && tcp.port == 80
篩選從12345端口到80端口的數據包----tcp.srcport == 12345 && tcp.dstport == 80
應用層:
特別說明----http中http.request表示請求頭中的第一行(如GET index.jsp HTTP/1.1),http.response表示響應頭中的第一行(如HTTP/1.1 200 OK),其餘頭部都用http.header_name形式。
篩選url中包含.php的http數據包----http.request.uri contains ".php"
篩選內容包含username的http數據包----http contains "username"
4.4 抓取後過濾實例
過濾地址 ip.addr==192.168.10.10 或 ip.addr eq 192.168.10.10 #過濾地址 ip.src==192.168.10.10 #過濾源地址 ip.dst==192.168.10.10 #過濾目的地址 過濾協議,直接輸入協議名 icmp http 過濾協議和端口 tcp.port==80 tcp.srcport==80 tcp.dstport==80 過濾http協議的請求方式 http.request.method=="GET" http.request.method=="POST" http.request.uri contains admin #url中包含admin的 http.request.code==404 #http請求狀態碼的 鏈接符 && || and or 經過鏈接符能夠把上面的命令鏈接在一塊兒,好比: ip.src==192.168.10.10 and http.request.method=="POST"
雙擊選擇了網卡以後,就開始抓包了
中止抓包後,咱們能夠選擇保存抓取到的數據包。文件——> 另存爲——>選擇一個存儲路徑,而後就保存爲後綴爲 .pcap 格式的文件了,能夠雙擊直接用wireshark打開。
如今咱們看一個TCP三次握手的實例
三次握手過程爲
這圖我都看過不少遍了, 此次咱們用wireshark實際分析下三次握手的過程。
打開wireshark, 打開瀏覽器輸入 http://192.168.241.129/bbs/forum.php
在wireshark中輸入http過濾, 而後選中GET bbs/forum.php HTTP/1.1的那條記錄,右鍵而後點擊"Follow TCP Stream",
這樣作的目的是爲了獲得與瀏覽器打開網站相關的數據包,將獲得以下圖
圖中能夠看到wireshark截獲到了三次握手的三個數據包。第四個包纔是HTTP的, 這說明HTTP的確是使用TCP創建鏈接的。
第一次握手數據包
客戶端發送一個TCP,標誌位爲SYN,序列號爲0, 表明客戶端請求創建鏈接。 以下圖
第二次握手的數據包
服務器發回確認包, 標誌位爲 SYN,ACK. 將確認序號(Acknowledgement Number)設置爲客戶的I S N加1以.即0+1=1, 以下圖
第三次握手的數據包
客戶端再次發送確認包(ACK) SYN標誌位爲0,ACK標誌位爲1.而且把服務器發來ACK的序號字段+1,放在肯定字段中發送給對方.而且在數據段放寫ISN的+1, 以下圖:
就這樣經過了TCP三次握手,創建了鏈接