原文來自:https://www.cnblogs.com/doit8791/p/5730595.html
抓包應該是每個技術人員掌握的基礎知識,無論是技術支持運維人員或者是研發,多少都會遇到要抓包的情況,用過的抓包工具有fiddle、wireshark,作為一個不是經常要抓包的人員,學會用Wireshark就夠了,畢竟它是功能最全面使用者最多的抓包工具。
Wireshark(前稱Ethereal)是一個網絡封包分析軟件。網絡封包分析軟件的功能是擷取網絡封包,并盡可能顯示出最為詳細的網絡封包資料。Wireshark使用WinPCAP作為接口,直接與網卡進行數據報文交換。
網絡封包分析軟件的功能可想像成 "電工技師使用電表來量測電流、電壓、電阻" 的工作 - 只是將場景移植到網絡上,并將電線替換成網絡線。在過去,網絡封包分析軟件是非常昂貴的,或是專門屬于營利用的軟件。Ethereal的出現改變了這一切。在GNUGPL通用許可證的保障范圍底下,使用者可以以免費的代價取得軟件與其源代碼,并擁有針對其源代碼修改及客制化的權利。Ethereal是目前全世界最廣泛的網絡封包分析軟件之一。
wireshark的官方下載網站:?http://www.wireshark.org/
wireshark是非常流行的網絡封包分析軟件,功能十分強大??梢越厝「鞣N網絡封包,顯示網絡封包的詳細信息。
wireshark是開源軟件,可以放心使用。 可以運行在Windows和Mac OS上。
Wireshark不能做的
為了安全考慮,wireshark只能查看封包,而不能修改封包的內容,或者發送封包。
Wireshark VS Fiddler
Fiddler是在windows上運行的程序,專門用來捕獲HTTP,HTTPS的。
wireshark能獲取HTTP,也能獲取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的內容
同類的其他工具
微軟的network monitor
sniffer?
什么人會用到wireshark
1. 網絡管理員會使用wireshark來檢查網絡問題
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抓包,以抓取賬號和密碼信息。
1、首先啟動wireshark,并處于Capture狀態。然后通過telnet遠程登錄我們的linux服務器。
進入登錄界面后,輸入賬號和密碼登入系統。
2、接下來停止wireshark的截取封包的操作,執行快捷方式的"Stop"即可。
不過,捕獲的信息非常多,這個時候可以利用Display Filter功能,過濾顯示的內容,如下圖所示,點擊Expression,然后選擇過濾表達式。這里,我們選擇TELNET即可。
表達式確定之后,選擇"Apply",就可以過濾出只包含TELNET的封包
來,我們查看一下整個telnet會話的所有記錄, wireshark可以記錄會話記錄(就像我們聊QQ時,"QQ聊天記錄"一樣),任意找到一個telnet封包,右鍵找到"Follow TCP Stream",wireshark就會返回整個會話記錄。
OK, 我們看到以下這些數據信息,紅色的部分是我們發送出去的DATA,藍色的部分是我們接收到的DATA。, 告訴我, 你看到了什么
為了更準確的看清楚,我們再次僅篩選出我們發送出去的DATA?;蛘邇H接收到的DATA。
從這里,我們可以確切的抓到賬號和密碼信息。login:wireshark ?Password:123456,除了這些,我們還可以更進一步知道別人在看什么網站,或是私人文件,隱私將毫無保障。
注:為了避免這些情況,防止有心人監測到重要信息,可以使用SSH,SSL,TSL,HTTPS等加密協議對重要數據進行加密,然后再到網絡上傳輸,如果被人截取下來,看到的內容也是被加密的。
<http://skypegnu1.blog.51cto.com/8991766/1540728/>
常用到的過濾器規則:
捕捉過濾器(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標志的封包。
如果過濾器的語法是正確的,表達式的背景呈綠色。如果呈紅色,說明表達式有誤。