了解使用wireshark抓包工具
一、簡介
1、什么是wireshark
百度:
Wireshark(前稱Ethereal)是一個網絡封包分析軟件。網絡封包分析軟件的功能是擷取網絡封包,并盡可能顯示出最為詳細的網絡封包資料。Wireshark使用WinPCAP作為接口,直接與網卡進行數據報文交換。
在過去,網絡封包分析軟件是非常昂貴的,或是專門屬于盈利用的軟件。Ethereal的出現改變了這一切。在GNUGPL通用許可證的保障范圍底下,使用者可以以免費的代價取得軟件與其源代碼,并擁有針對其源代碼修改及客制化的權利。Ethereal是目前全世界最廣泛的網絡封包分析軟件之一。
開源軟件,用GPL協議發行,所以可以免費在任意數量機器上使用
2、主要應用
幫助管理員解決網絡問題
幫助安全工程師用來檢測安全隱患
開發人員用來測試協議執行情況
用來學習網絡協議
等等。
3、特性
跨平臺支持windows/unix平臺
在接口實時抓包
能詳細顯示包的詳細協議信息
可以打開/保存捕捉的包
可以導入導出其他程序支持的包數據格式
可以通過多種方式過濾包
多種方式查找包
通過過濾以多種彩色顯示包
創建多種統計分析。。。
4、多種網絡接口
可以捕捉多種網絡接口,甚至無線局域網接口
5、哪些事情不能做?
不能用作入侵檢測系統,不會處理網絡事務,僅是監視網絡,不會發送網絡包或做其他交互的事情,但可以做名稱解析
二、使用wireshark
1、打開后看到的第一頁面,這里就稱為初始頁面吧
2、怎么樣開始抓包
通過捕獲選項
上面的初始頁面,有兩個入口可以點擊一個是在main工具欄,一個是中間位置的captrue options
點擊captrue options圖標》彈出網卡如多網卡指定抓包網卡》開始抓包
3、wireshark窗口的介紹
wireshark主要分為7個界面
主菜單
菜單頁面包括file、edit、view、go、capture、analyze、statistics、help
main工具欄
一些快捷導航,比如capture,開始,停止等等
過濾器
指定需要捕獲所需要的條件,比如源地址/目標地址
封包列表
已經捕獲到的封包,有源地址/目標地址,端口;顏色的不同代表不同的
封包詳情
顯示封包中的各字段
16禁止數據
顧名思義
地址欄
地址欄及一些雜項
4、過濾條件
通過集中表達式規則進行過濾
1)protocols
比如tcp,ether,fddi,ip,arp,rarp,decnet,lat,sca,moprc,mopdl,tcp and udp
2)direction
src,dst,src and dst,src or dst(不指定就是雙向)
3)host(新版,老版本沒有host)
net,port,host,portrange
4)logical openrations邏輯運算
and,or,not(下面有官方實例)
5、過濾關系
1)組合表達式
Table 6.6. Display Filter Logical Operations
English | C-like | Description and example |
---|---|---|
:-- | :-- | :-- |
and | && | Logical AND. ip.src==10.0.0.5 and tcp.flags.fin
|
or | || | Logical OR. ip.scr==10.0.0.5 or ip.src==192.1.1.1
|
xor | ^^ | Logical XOR. tr.dst[0:3] == 0.6.29 xor tr.src[0:3] == 0.6.29
|
not | ! | Logical NOT. not llc
|
[…?] | See “Slice Operator” below. | |
in | See “Membership Operator” below. |
2)運算符號
參考官方https://www.wireshark.org/docs/wsug_html/#DispCompOps
Table 6.5. Display Filter comparison operators
English | C-like | Description and example | ||
---|---|---|---|---|
eq | == | Equal. ip.src==10.0.0.5
|
||
ne | != | Not equal. ip.src!=10.0.0.5
|
||
gt | > | Greater than. frame.len > 10
|
||
lt | < | Less than. frame.len < 128
|
||
ge | >= | Greater than or equal to. frame.len ge 0x100
|
||
le | <= | Less than or equal to. frame.len ? 0x20
|
||
contains | Protocol, field or slice contains a value. sip.To contains "a1762"
|
|||
matches | ~ | Protocol or text field match Perl regualar expression. `http.host matches "acme.(org | com | net)"` |
bitwise_and | & | Compare bit field value. tcp.flags & 0x02
|
6、常見過濾需求
1)、數據鏈路層
mac地址過濾
eth.addr==00:0c:29:1c:8b:39
eth.src==00:0c:29:1c:8b:39
eth.dst==00:0c:29:1c:8b:39
2)、網絡層
ip地址過濾
ip.addr==192.168.216.51
ip.src==192.168.216.51
ip.dst==192.168.216.51
3)、傳輸層
tcp/udp
tcp.prot==80
tcp.dstport==80
tcp.srcport==80
4)、應用層
http.request.uri contains ".php"
5)、wireshark支持篩選的還有很多協議,這里不一一列舉,請查看官方文檔
udp、tcp、arp、icmp、smtp、pop、dns、ip、ssl、http、ftp、telnet、ssh、rdp、rip、ospf
6)、協議參數過濾
tcp.flags.syn==0x02 顯示包含syn標志位的數據包
frame.len==119 整個數據包長度,從eth開始到最后
http.request.method=="get" 顯示http請求中method值為get的包
7)、邏輯條件組合篩選
||
&&
!
組合條件“與”
ip.src==192.168.216.51&&ip.dst==192.168.216.52
組合條件“或”
ip.src==192.168.216.51||ip.src==192.168.216.52
組合條件“非”
!(ip.src==192.168.216.51)
三、新版本差異
新版和老版本是存在很多差異的如
1、示例1-mac
2、示例2-ip
3、示例3-tcp
4、示例4-http
四、分析tcp三次握手
1、三次握手簡單圖示
2、第一次握手
客戶端請求建立連接,發送請求包,標志位SYN,序號為0
3、第二次握手
服務端返回確認,標志位SYN,ACK,設置初始序列號Y=0, X+1=0+1=1,這個就是acknowledgement number了(確認序號)
4、第三次握手
客戶端收到服務器發來的確認號正確,客戶端再次發送確認ACK,SYN標志位為0,ACK標志位是1,確認序號=y+1=0+1,發送序號位x+1=1,服務器收到確認序號值與ack=1連接建立成功,開始傳輸數據
五、四次揮手
四次揮手即tcp斷開連接得時候會有四次揮手得過程
為什么需要四次揮手那?
因為tcp協議是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,并且是全雙工模式,需要兩邊連接全部關閉,此tcp會話才算完全關閉,四次揮手使得tcp連接能夠可靠的終止,還有timed_wait也使得連接終止后網絡上殘余的發送給該連接的數據被丟棄而不至于被新連接接收,這種方式也更安全
1、圖示四次揮手
2、抓包示例揮手協議圖示
3、第一次揮手
屬性:
ACK+FIN:標志位
Seq=23:序列號
ACK=29:接收的序列號+SYN包,也就是確認的序號
第一次揮手,客戶端給服務器發送tcp包,用來關閉客戶端到服務器的數據傳輸,發送FIN ACK報文 seq=23 ack=29
4、第二次揮手
第二次揮手,服務器收到FIN,發回一個ACK,Seq=29,ack=23
5、第三次揮手
服務端關閉和客戶端連接,發送一個FIN,seq=24,ack=29
6、第四次揮手
第四次揮手,客戶端收到服務器發送的FIN后,發回ACK確認,確認序號加1,就是30,這里就完全斷開連接了。
Memo
本文轉載整理來自:https://www.cnblogs.com/zhangxingeng/p/11200063.html