網絡抓包 wireshark 網絡抓包wireshark

網絡抓包wireshark

抓包應該是每一個技術人員掌握的基礎知識,不管是技術支持運維人員或者是研發,多少都會遇到要抓包的狀況,用過的抓包工具備fiddle、wireshark,做爲一個不是常常要抓包的人員,學會用Wireshark就夠了,畢竟它是功能最全面使用者最多的抓包工具。
Wireshark(前稱Ethereal)是一個網絡封包分析軟件。網絡封包分析軟件的功能是擷取網絡封包,並儘量顯示出最爲詳細的網絡封包資料。Wireshark使用WinPCAP做爲接口,直接與網卡進行數據報文交換。
網絡封包分析軟件的功能可想像成 "電工技師使用電錶來量測電流、電壓、電阻" 的工做 - 只是將場景移植到網絡上,並將電線替換成網絡線。在過去,網絡封包分析軟件是很是昂貴的,或是專門屬於營利用的軟件。Ethereal的出現改變了這一切。在GNUGPL通用許可證的保障範圍底下,使用者能夠以避免費的代價取得軟件與其源代碼,並擁有針對其源代碼修改及客製化的權利。Ethereal是目前全世界最普遍的網絡封包分析軟件之一。

wireshark的官方下載網站: http://www.wireshark.org/html

wireshark是很是流行的網絡封包分析軟件,功能十分強大。能夠截取各類網絡封包,顯示網絡封包的詳細信息。linux

wireshark是開源軟件,能夠放心使用。 能夠運行在Windows和Mac OS上。編程

Wireshark不能作的

爲了安全考慮,wireshark只能查看封包,而不能修改封包的內容,或者發送封包。windows

Wireshark VS Fiddler

Fiddler是在windows上運行的程序,專門用來捕獲HTTP,HTTPS的。瀏覽器

wireshark能獲取HTTP,也能獲取HTTPS,可是不能解密HTTPS,因此wireshark看不懂HTTPS中的內容安全

同類的其餘工具

微軟的network monitor服務器

sniffer 網絡

 

什麼人會用到wireshark

1. 網絡管理員會使用wireshark來檢查網絡問題app

2. 軟件測試工程師使用wireshark抓包,來分析本身測試的軟件運維

3. 從事socket編程的工程師會用wireshark來調試

4. 據說,華爲,中興的大部分工程師都會用到wireshark。

 

總之跟網絡相關的東西,均可能會用到wireshark.

 

wireshark 開始抓包

開始界面

wireshark是捕獲機器上的某一塊網卡的網絡包,當你的機器上有多塊網卡的時候,你須要選擇一個網卡。

點擊Caputre->Interfaces.. 出現下面對話框,選擇正確的網卡。而後點擊"Start"按鈕, 開始抓包

 

Wireshark 窗口介紹

 

WireShark 主要分爲這幾個界面

1. Display Filter(顯示過濾器),  用於過濾

2. Packet List Pane(封包列表), 顯示捕獲到的封包, 有源地址和目標地址,端口號。 顏色不一樣,表明

3. Packet Details Pane(封包詳細信息), 顯示封包中的字段

4. Dissector Pane(16進制數據)

5. Miscellanous(地址欄,雜項)

 

Wireshark 顯示過濾

使用過濾是很是重要的, 初學者使用wireshark時,將會獲得大量的冗餘信息,在幾千甚至幾萬條記錄中,以致於很難找到本身須要的部分。搞得暈頭轉向。

過濾器會幫助咱們在大量的數據中迅速找到咱們須要的信息。

過濾器有兩種,

一種是顯示過濾器,就是主界面上那個,用來在捕獲的記錄中找到所須要的記錄

一種是捕獲過濾器,用來過濾捕獲的封包,以避免捕獲太多的記錄。 在Capture -> Capture Filters 中設置

 

保存過濾

在Filter欄上,填好Filter的表達式後,點擊Save按鈕, 取個名字。好比"Filter 102",

Filter欄上就多了個"Filter 102" 的按鈕。

過濾表達式的規則

表達式規則

 1. 協議過濾

好比TCP,只顯示TCP協議。

2. IP 過濾

好比 ip.src ==192.168.1.102 顯示源地址爲192.168.1.102,

ip.dst==192.168.1.102, 目標地址爲192.168.1.102

3. 端口過濾

tcp.port ==80,  端口爲80的

tcp.srcport == 80,  只顯示TCP協議的願端口爲80的。

4. Http模式過濾

http.request.method=="GET",   只顯示HTTP GET方法的。

5. 邏輯運算符爲 AND/ OR

經常使用的過濾表達式

過濾表達式 用途
http 只查看HTTP協議的記錄
ip.src ==192.168.1.102 or ip.dst==192.168.1.102  源地址或者目標地址是192.168.1.102
   
   

 

 

 

 

 

 

 

封包列表(Packet List Pane)

封包列表的面板中顯示,編號,時間戳,源地址,目標地址,協議,長度,以及封包信息。 你能夠看到不一樣的協議用了不一樣的顏色顯示。

你也能夠修改這些顯示顏色的規則,  View ->Coloring Rules.

 

封包詳細信息 (Packet Details Pane)

這個面板是咱們最重要的,用來查看協議中的每個字段。

各行信息分別爲

Frame:   物理層的數據幀概況

Ethernet II: 數據鏈路層以太網幀頭部信息

Internet Protocol Version 4: 互聯網層IP包頭部信息

Transmission Control Protocol:  傳輸層T的數據段頭部信息,此處是TCP

Hypertext Transfer Protocol:  應用層的信息,此處是HTTP協議

 

wireshark與對應的OSI七層模型

TCP包的具體內容

 從下圖能夠看到wireshark捕獲到的TCP包中的每一個字段。

 

 

實例分析TCP三次握手過程

看到這, 基本上對wireshak有了初步瞭解, 如今咱們看一個TCP三次握手的實例

 

 三次握手過程爲

 

這圖我都看過不少遍了, 此次咱們用wireshark實際分析下三次握手的過程。

打開wireshark, 打開瀏覽器輸入 http://www.cnblogs.com/tankxiao

在wireshark中輸入http過濾, 而後選中GET /tankxiao 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三次握手,創建了鏈接

http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html

 

1.設置過濾條件
【1】http and ip.addr == 192.168.1.106 and tcp.port == 8080
【a】http:指定網絡協議
【b】ip.addr == 192.168.1.106:指定服務器ip地址,請根據實際狀況替換。
【c】tcp.port == 8080,指定端口號,請根據實際狀況替換。
圖1 過濾條件
【2】點擊apply
    點擊apply以後可過濾獲得兩個數據包,分別是HTTP請求和HTTP響應。
圖2 HTTP請求和響應
 
2.查看TCP數據流——Follow TCP Stream
【1】在任意數據包上右擊,選擇Follow TCP Stream
    該步驟能夠過濾出和該HTTP數據包有關的TCP數據包,包括TCP 3次握手,TCP分片和組裝等。
圖3 選擇Follow TCP Stream
【2】最終獲得HTTP請求和響應
【a】紅色背景字體爲HTTP請求,藍色背景字體爲HTTP響應
【b】從User-Agent中能夠看出,360瀏覽器兼容模式使用了IE8內核(該臺計算機操做系統爲XP,IE瀏覽器版本爲8),這說明360瀏覽器使用了系統中的IE核。
圖4 HTTP請求和響應具體內容

 

 

網絡中明碼傳輸的危險性

    經過明碼傳輸的protocol和工具至關多,典型的就是telnet,ftp,http。咱們拿telnet作此次實驗。假設我以telnet方式登陸到個人linux服務器,而後經過wireshark抓包,以抓取帳號和密碼信息。

一、首先啓動wireshark,並處於Capture狀態。而後經過telnet遠程登陸咱們的linux服務器。

wKiom1PtxDOQimlAAACdwiZqfeE162.jpg

進入登陸界面後,輸入帳號和密碼登入系統。

wKioL1PtxUvT0yksAACzkwdoI_Y013.jpg

二、接下來中止wireshark的截取封包的操做,執行快捷方式的"Stop"便可。

    不過,捕獲的信息很是多,這個時候能夠利用Display Filter功能,過濾顯示的內容,以下圖所示,點擊Expression,而後選擇過濾表達式。這裏,咱們選擇TELNET便可。

wKiom1PtxVXjVpp9AAU8cd7PEgE073.jpg

表達式肯定以後,選擇"Apply",就能夠過濾出只包含TELNET的封包

wKioL1Ptx42CAgvXAAYLelyRK58954.jpg來,咱們查看一下整個telnet會話的全部記錄, wireshark能夠記錄會話記錄(就像咱們聊QQ時,"QQ聊天記錄"同樣),任意找到一個telnet封包,右鍵找到"Follow TCP Stream",wireshark就會返回整個會話記錄。

wKioL1PtyevSaTfJAASR__mwGZk771.jpg

OK, 咱們看到如下這些數據信息,紅色的部分是咱們發送出去的DATA,藍色的部分是咱們接收到的DATA。 j_0061.gif, 告訴我, 你看到了什麼

wKiom1PtyVriu__WAAINWJKx1S0346.jpg

爲了更準確的看清楚,咱們再次僅篩選出咱們發送出去的DATA。或者僅接收到的DATA。

wKioL1PtzA7D1_ewAAIm3rxMBZk668.jpg

從這裏,咱們能夠確切的抓到帳號和密碼信息。login:wireshark  Password:123456,除了這些,咱們還能夠更進一步知作別人在看什麼網站,或是私人文件,隱私將毫無保障。

注:爲了不這些狀況,防止有心人監測到重要信息,可使用SSH,SSL,TSL,HTTPS等加密協議對重要數據進行加密,而後再到網絡上傳輸,若是被人截取下來,看到的內容也是被加密的。

經常使用到的過濾器規則:
捕捉過濾器(CaptureFilters):用於決定將什麼樣的信息記錄在捕捉結果中。須要在開始捕捉前設置。
顯示過濾器(DisplayFilters):在捕捉結果中進行詳細查找。他們能夠在獲得捕捉結果後隨意修改。 
 
捕捉過濾器
 
Protocol(協議):
可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.
若是沒有特別指明是什麼協議,則默認使用全部支持的協議。
 
Direction(方向):
可能的值: src, dst, src and dst, src or dst
若是沒有特別指明來源或目的地,則默認使用 「src or dst」 做爲關鍵字。
例如,」host 10.2.2.2″與」src or dst host 10.2.2.2″是同樣的。
 
Host(s):
可能的值: net, port, host, portrange.
若是沒有指定此值,則默認使用」host」關鍵字。
例如,」src 10.1.1.1″與」src host 10.1.1.1″相同。
 
Logical Operations(邏輯運算):
可能的值:not, and, or.
否(「not」)具備最高的優先級。或(「or」)和與(「and」)具備相同的優先級,運算時從左至右進行。
例如,
「not tcp port 3128 and tcp port 23″與」(not tcp port 3128) and tcp port 23″相同。
「not tcp port 3128 and tcp port 23″與」not (tcp port 3128 and tcp port 23)」不一樣。
 
例子:
tcp dst port 3128  //捕捉目的TCP端口爲3128的封包。
ip src host 10.1.1.1  //捕捉來源IP地址爲10.1.1.1的封包。
host 10.1.2.3  //捕捉目的或來源IP地址爲10.1.2.3的封包。
ether host e0-05-c5-44-b1-3c //捕捉目的或來源MAC地址爲e0-05-c5-44-b1-3c的封包。若是你想抓本機與全部外網通信的數據包時,能夠將這裏的mac地址換成路由的mac地址便可。
src portrange 2000-2500  //捕捉來源爲UDP或TCP,而且端口號在2000至2500範圍內的封包。
not imcp  //顯示除了icmp之外的全部封包。(icmp一般被ping工具使用)
src host 10.7.2.12 and not dst net 10.200.0.0/16 //顯示來源IP地址爲10.7.2.12,但目的地不是10.200.0.0/16的封包。
(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8  //捕捉來源IP爲10.4.1.12或者來源網絡爲10.6.0.0/16,目的地TCP端口號在200至10000之間,而且目的位於網絡 10.0.0.0/8內的全部封包。
src net 192.168.0.0/24
src net 192.168.0.0 mask 255.255.255.0  //捕捉源地址爲192.168.0.0網絡內的全部封包。
 
 
顯示過濾器
例子:
snmp || dns || icmp //顯示SNMP或DNS或ICMP封包。
ip.addr == 10.1.1.1  //顯示來源或目的IP地址爲10.1.1.1的封包。
ip.src != 10.1.2.3 or ip.dst != 10.4.5.6  //顯示來源不爲10.1.2.3或者目的不爲10.4.5.6的封包。
換句話說,顯示的封包將會爲:
來源IP:除了10.1.2.3之外任意;目的IP:任意
以及
來源IP:任意;目的IP:除了10.4.5.6之外任意
ip.src != 10.1.2.3 and ip.dst != 10.4.5.6  //顯示來源不爲10.1.2.3而且目的IP不爲10.4.5.6的封包。
換句話說,顯示的封包將會爲:
來源IP:除了10.1.2.3之外任意;同時須知足,目的IP:除了10.4.5.6之外任意
tcp.port == 25  //顯示來源或目的TCP端口號爲25的封包。
tcp.dstport == 25  //顯示目的TCP端口號爲25的封包。
tcp.flags  //顯示包含TCP標誌的封包。
tcp.flags.syn == 0×02  //顯示包含TCP SYN標誌的封包。
若是過濾器的語法是正確的,表達式的背景呈綠色。若是呈紅色,說明表達式有誤。
相關文章
相關標籤/搜索