標籤:
抓包應該是每個技術人員掌握的基礎知識,無論是支援人員營運人員或者是研發,多少都會遇到要抓包的情況,用過的抓包工具有fiddle、wireshark,作為一個不是經常要抓包的人員,學會用Wireshark就夠了,畢竟它是功能最全面使用者最多的抓包工具。Wireshark(前稱Ethereal)是一個網路封包分析軟體。網路封包分析軟體的功能是擷取網路封包,並儘可能顯示出最為詳細的網路封包資料。Wireshark使用WinPCAP作為介面,直接與網卡進行資料報文交換。網路封包分析軟體的功能可想像成 "電工技師使用電錶來量測電流、電壓、電阻" 的工作 - 只是將情境移植到網路上,並將電線替換成網路線。在過去,網路封包分析軟體是非常昂貴的,或是專門屬於營利用的軟體。Ethereal的出現改變了這一切。在GNUGPL通用許可證的保障範圍底下,使用者可以以免費的代價取得軟體與其原始碼,並擁有針對其原始碼修改及客制化的權利。Ethereal是目前全世界最廣泛的網路封包分析軟體之一。
wireshark的官方下載網站: http://www.wireshark.org/
wireshark是非常流行的網路封包分析軟體,功能十分強大。可以截取各種網路封包,顯示網路封包的詳細資料。
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。或者僅接收到的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標誌的封包。 如果過濾器的文法是正確的,運算式的背景呈綠色。如果呈紅色,說明運算式有誤。
來自為知筆記(Wiz)
網路抓包wireshark