Wireshark和TcpDump抓包分析心得
1. Wireshark與tcpdump介紹
Wireshark是一個網路協議檢測工具,支援Windows平臺和Unix平臺,我一般只在Windows平臺下使用Wireshark,如果是Linux的話,我直接用tcpdump了,因為我工作環境中的Linux一般只有字元介面,且一般而言Linux都自帶的tcpdump,或者用tcpdump抓包以後用Wireshark開啟分析。
在Windows平臺下,Wireshark通過WinPcap進行抓包,封裝的很好,使用起來很方便,可以很容易的制定抓包過濾器或者顯示過濾器,具體在下面介紹。Wireshark是一個免費的工具,只要google一下就能很容易找到下載的地方。
tcpdump是基於Unix系統的命令列式的資料包嗅探工具。如果要使用tcpdump抓取其他主機MAC地址的資料包,必須開啟網路卡混雜模式,所謂混雜模式,用最簡單的語言就是讓網路卡抓取任何經過它的資料包,不管這個資料包是不是發給它或者是它發出的,點選【http://en.wikipedia.org/wiki/Promiscuous_mode】獲取更多有關混雜模式的資料。一般而言,Unix不會讓普通使用者設定混雜模式,因為這樣可以看到別人的資訊,比如telnet的使用者名稱和密碼,這樣會引起一些安全上的問題,所以只有root使用者可以開啟混雜模式,開啟混雜模式的命令是:ifconfig eth0 promisc, eth0是你要開啟混雜模式的網路卡。肯定有人要問如果在windows下要不要開啟混雜模式,windows下網路卡沒有什麼混雜模式不混雜模式,在於應用程式本身,如使用Wireshark抓包的時候可以通過設定為在混雜模式下抓包(這就是為什麼該死的ARP欺騙病毒可以猖狂的原因)。tcpdump當然也可以指定抓包過濾器,而且其過濾器語言非常著名,叫做Berkeley包過濾,簡稱BPF語言。
2. 簡單的例子
我們通過訪問www.google.com.hk這個網址來看看抓包結果。
2.1 tcpdump
前面說過一般情況下Linux都自帶了tcpdump,但是如果發生了小概率事件,發現沒有tcpdump的話,可以到http://www.tcpdump.org下載原始碼,編譯安裝。
使用root使用者登入,執行tcpdump命令就可以開始抓包。這裡說明一下,如果使用SSH登入到遠端Linux,然後直接執行tcpdump,會發現抓到大量的資料包,速度快的都看不清楚,這是因為tcpdump抓到的包傳送給遠端的終端顯示,同時又抓了這個包,再顯示,再抓取,造成了迴圈抓取。當然,這樣抓包沒有任何意義,除了證明你的網路是通的。
因為沒有開啟網路卡的混雜模式,所以如果本機沒有任何程式訪問網路,是抓不到包的,如果在字元介面下,用wgethttp://www.google.com.hk 訪問網址,如果有GUI,可以開啟firefox瀏覽器訪問http://www.google.com.hk。
預設情況下,tcpdump會選擇第一塊網路卡,也就是eth0,進行抓包,每行顯示一個抓取的資料包,如:
0.003183 192.168.21.137 72.14.203.147 TCP 38039 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSV=36941509 TSER=0 WS=6
0.011707 72.14.203.147 192.168.21.137 TCP http > 38039 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460
0.011770 192.168.21.137 72.14.203.147 TCP 38039 > http [ACK] Seq=1 Ack=1 Win=5840 Len=0
以上三個資料包就是著名的TCP三次握手的資料包,其中38039是客戶端的TCP埠,http的預設埠是80,如果tcpdump在/etc/services中發現埠對應的服務名稱,那麼會自動的轉為名字,所以這裡會顯示為http。表示客戶端的38039埠和伺服器端的http埠進行TCP三次握手。
前面提到tcpdump預設選擇第一塊網路卡進行抓包,我們可以使用-i引數指定通過哪一個網路卡抓包,如(#表示我輸入的命令,Linux下root使用者的提示符就是#):
# tcpdump –i eth1
或者
#tcpdump –i any
如果想知道我們可以通過哪幾個網路卡抓包,可以使用-D引數,如:
# tcpdump –D
1.eth0
2.any
3.lo
因為我的機器上只有一個網路卡,因此只有eth0,如果有多塊網路卡活動的話,會有eth1,eth2依次下去。any的意思是通過任意一塊網路卡進行抓包,lo是迴環介面。(關於TCP三次握手和迴環介面等網路問題,請參考《TCP/IP協議詳解》)。
預設情況下,tcpdump抓包結果顯示在螢幕(嚴格點,專業點應該說是標準輸出)上,顯然這不利於進一步的資料分析,因此我們需要將抓包結果存放在檔案中。可是使用-w命令將結果儲存在檔案中,如:
#tcpdump –w google.cap
這句命令將抓包結果存放在google.cap檔案中,結束以後可以用Wireshark開啟檢視。同事,tcpdump出了抓包,還可以使用-r引數制定抓包資料檔案,結合過濾器對抓包資料分析,如:
#tcpdump –r google.cap http
這句命令的意思是讓tcpdump讀取google.cap檔案,把其中http協議的資料包都給過濾出來。關於過濾器在下面詳細介紹。
2.2 Wireshark
我在windows系統中使用Wireshark的,首先熟悉一下介面,圖1是使用Wireshark開啟google.cap檔案的介面,
圖1 Wireshark介面
圖1中標註出三快區域,R1區域用來顯示簡單的資料包資訊,我們用tcpdump抓包的時候,預設情況下也是顯示成這樣的;R2區域用來顯示選中的資料包的詳細資訊,細心一點會發現他是按照TCP/IP四層結構顯示的,第一行是資料鏈路層的資訊,第二行是網路層資訊(IP協議),第三行是傳輸層資訊(TCP協議),第四行是應用層資訊(HTTP協議),可以展開每一行用來觀察具體的內容;R3區域是用來顯示此資料包的真實面目。我們在R1和R2區域看到的資訊都是Wireshark整理以後給我們看的,抓包的真實資料實際上是一堆二進位制序列,用ultraedit開啟google.cap檔案可以看到就是一些數字,如圖2所示。
圖2 抓包檔案長的樣子
使用Wireshark抓包非常容易,直接點選按鈕(工具欄第三個按鈕)(工具欄第一個按鈕)就開始抓包了,會發現只要一點選這個按鈕,立刻就顯示抓到包了,這是因為Wireshark預設在混雜模式下抓包,只要經過網路卡的資料包都抓取下來(當然這臺機器要連在網路中,如果沒有資料流過當然沒有包可抓),點選按鈕停止此次抓包。
如果機器上安裝了多塊網路卡,Wireshark預設選擇第一張網路卡抓包,如果等抓包完成了,這是發現選錯了網路卡是一件極度鬱悶的事情。點選按鈕可以在抓包之前選擇抓哪張網路卡。
圖3 選擇網路卡
我機器上只有一張網路卡,另外兩個是安裝Vmware時的虛擬網路卡,可以看到雖然Packets上面已經有資料了,實際上需要點選Start才開始抓包。
解決了選擇網路卡的問題以後,考慮如果過濾抓包內容,點選選單欄上的” Capture” > “Options”可以看到制定抓包規則的介面,如圖4所示。
圖4 制定抓包規則
圖4可以看到Caputre packets in promiscuous mode,預設是選中的,表示Wireshark預設在混雜模式下抓包。同樣可以選擇通過哪張網路卡抓包,不過這些都不是重點,最重要的是Caupture Fileter這裡,點選該按鈕,可以看到彈出一些預定義好的過濾器。比如選擇“HTTP TCP port(80)”,下面Filter string: tcp port http就是過濾器的表示。表示抓tcp協議的,埠為80的資料包(http協議的預設埠是80)。
3. 過濾器(BPF語言)的使用
主要介紹一下在tcpdump中的過濾器使用,因為懂了這個就可以得心應手的使用wireshark了。
從最簡單的開始,BPF語言主要有一個標誌或者數字和限定片語成,限定詞有三種:
第一種:指定型別
host, 定義抓取哪個IP地址(也可以給它mac地址,格式是00:00:00:00:00:00)的資料包,比如我想抓有關192.168.0.148這個IP地址的資料包,那麼就寫成tcpdump host 192.168.0.148, host是限定詞,192.168.0.148就是標誌。這條命令會抓取從發出或者向192.168.0.148傳送的資料包。
net, 定義抓取某個網路的資料包,給出網路號就行了,它根據給的網路號位元組數是1,2,3來判斷A類地址,B類地址或者C類地址,比如tcpdump net 10.1.1 ,它就認為這是一個C類地址。
port,指定埠,比如tcpdump host and port 22, 這是抓埠為22的資料包,不管是TCP還是UDP的,這裡我稍微早一點的給出了邏輯操作,and J,如果只想抓TCP的,那麼可以寫tcpdump host 192.168.0.148 and tcp port 22。
portrange,顧名思義,這個是指定埠範圍的,用連字元”-”指定範圍,比如tcpdump port 1025-8080
第二種:指定方向
我們之前的命令都是說“這條命令會抓取從192.168.0.148發出或者向192.168.0.148傳送”,所以,如果指向抓從發出的資料包可以使用限定詞src, 命令:tcpdump src host 192.168.0.148,反過來,想抓發向192.168.0.148的資料包,使用限定詞dst,命令:tcpdump dst host 192.168.0.148。
第三種:指定協議
我們知道網路協議有N種。。。我列一下常用的幾種,其他的可以去google一下J
ether和fddi, 乙太網協議
tr, TR協議
ip, IP協議
ip6, IPv6協議
arp, ARP協議
好了,最後還需要注意的是邏輯運算,and, or, not(與,或,非),上面已經有一個例子了, 這裡就不再羅嗦了,和普通的程式語言沒有什麼不同。
除此之外,還有更加牛X的功能,比如指定TCP中的某個標識位是什麼,這種應用我一般很少用,不再羅嗦了。
轉載:http://blog.csdn.net/zrzlj/article/details/6076219/
相關文章
- wireshark安裝使用與tcpdump的抓包分析TCP
- 使用tcpdump+wireshark抓包分析網路資料包TCP
- wireshark抓包分析
- tcpdump抓包分析詳解TCP
- tcpdump抓包TCP
- UDP協議抓包分析 -- wiresharkUDP協議
- tcpdump抓包分析NAT ping不通TCP
- Tcpdump和wiresharkTCP
- 使用WireShark抓包分析TCP協議TCP協議
- iOS Wireshark抓包iOS
- Wireshark網路抓包
- wireshark抓包學習
- tcpdump抓包命令詳解TCP
- Linux中使用wireshark分析tcpdump抓取的資料包LinuxTCP
- wireshark抓包新手使用教程
- 利用Wireshark抓包分析DNS域名解析過程DNS
- tcpdump抓包規則命令大全TCP
- 轉:linux tcpdump抓包方法LinuxTCP
- Linux作業系統tcpdump抓包分析詳解Linux作業系統TCP
- Ubuntu 16.04 安裝 Wireshark分析tcpdump的pcap包——sudo apt install wireshark-qtUbuntuTCPPCAAPTQT
- ? 如何用 wireshark 抓包 TLS 封包TLS
- wireshark使用-----拆分抓包檔案
- 《wireshark(版本1.99.8)抓包(1)》
- SSH 協議基本原理及 wireshark 抓包分析協議
- 說說Linux抓包命令tcpdumpLinuxTCP
- Linux基礎:用tcpdump抓包LinuxTCP
- linux/unix下用tcpdump抓包LinuxTCP
- linux 下的 tcpdump 抓包命令LinuxTCP
- Wireshark抓包工具解析HTTPS包HTTP
- Wireshark抓包過濾器設定過濾器
- Https、SSL/TLS相關知識及wireShark抓包分析HTTPTLS
- Wireshark資料抓包分析(網路協議篇)第1章網路協議抓包概述協議
- tcpdump抓包及tshark解包方法介紹TCP
- Wireshark抓包工具使用教程以及常用抓包規則
- Wireshark抓包分析TCP“三次握手,四次揮手”TCP
- 手機資料抓包以及wireshark技巧
- 實戰:tcpdump抓包分析三次握手四次揮手TCP
- 在 Linux 命令列中使用 tcpdump 抓包Linux命令列TCP