日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Wireshark和 TcpDump抓包分析心得

發(fā)布時間:2023/12/4 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Wireshark和 TcpDump抓包分析心得 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. Wireshark與tcpdump介紹

?Wireshark是一個網(wǎng)絡協(xié)議檢測工具,支持Windows平臺和Unix平臺,我一般只在Windows平臺下使用Wireshark,如果是Linux的話,我直接用tcpdump了,因為我工作環(huán)境中的Linux一般只有字符界面,且一般而言Linux都自帶的tcpdump,或者用tcpdump抓包以后用Wireshark打開分析。

在Windows平臺下,Wireshark通過WinPcap進行抓包,封裝的很好,使用起來很方便,可以很容易的制定抓包過濾器或者顯示過濾器,具體在下面介紹。Wireshark是一個免費的工具,只要google一下就能很容易找到下載的地方。

tcpdump是基于Unix系統(tǒng)的命令行式的數(shù)據(jù)包嗅探工具。如果要使用tcpdump抓取其他主機MAC地址的數(shù)據(jù)包,必須開啟網(wǎng)卡混雜模式,所謂混雜模式,用最簡單的語言就是讓網(wǎng)卡抓取任何經(jīng)過它的數(shù)據(jù)包,不管這個數(shù)據(jù)包是不是發(fā)給它或者是它發(fā)出的,點擊【http://en.wikipedia.org/wiki/Promiscuous_mode】獲取更多有關(guān)混雜模式的資料。一般而言,Unix不會讓普通用戶設置混雜模式,因為這樣可以看到別人的信息,比如telnet的用戶名和密碼,這樣會引起一些安全上的問題,所以只有root用戶可以開啟混雜模式,開啟混雜模式的命令是:ifconfigeth0 promisc, eth0是你要打開混雜模式的網(wǎng)卡??隙ㄓ腥艘獑柸绻趙indows下要不要打開混雜模式,windows下網(wǎng)卡沒有什么混雜模式不混雜模式,在于應用程序本身,如使用Wireshark抓包的時候可以通過設置為在混雜模式下抓包(這就是為什么該死的ARP欺騙病毒可以猖狂的原因)。tcpdump當然也可以指定抓包過濾器,而且其過濾器語言非常著名,叫做Berkeley包過濾,簡稱BPF語言。

2. 簡單的例子

我們通過訪問www.google.com.hk這個網(wǎng)址來看看抓包結(jié)果。

2.1? tcpdump

前面說過一般情況下Linux都自帶了tcpdump,但是如果發(fā)生了小概率事件,發(fā)現(xiàn)沒有tcpdump的話,可以到http://www.tcpdump.org下載源代碼,編譯安裝。

使用root用戶登錄,運行tcpdump命令就可以開始抓包。這里說明一下,如果使用SSH登錄到遠程Linux,然后直接運行tcpdump,會發(fā)現(xiàn)抓到大量的數(shù)據(jù)包,速度快的都看不清楚,這是因為tcpdump抓到的包發(fā)送給遠程的終端顯示,同時又抓了這個包,再顯示,再抓取,造成了循環(huán)抓取。當然,這樣抓包沒有任何意義,除了證明你的網(wǎng)絡是通的。

因為沒有打開網(wǎng)卡的混雜模式,所以如果本機沒有任何進程訪問網(wǎng)絡,是抓不到包的,如果在字符界面下,用wgethttp://www.google.com.hk?訪問網(wǎng)址,如果有GUI,可以打開firefox瀏覽器訪問http://www.google.com.hk。

默認情況下,tcpdump會選擇第一塊網(wǎng)卡,也就是eth0,進行抓包,每行顯示一個抓取的數(shù)據(jù)包,如:

0.003183????????????? 192.168.21.137? 72.14.203.147???? TCP??????? 38039 > http [SYN] Seq=0 Win=5840Len=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=1Win=5840 Len=0

以上三個數(shù)據(jù)包就是著名的TCP三次握手的數(shù)據(jù)包,其中38039是客戶端的TCP端口,http的默認端口是80,如果tcpdump在/etc/services中發(fā)現(xiàn)端口對應的服務名稱,那么會自動的轉(zhuǎn)為名字,所以這里會顯示為http。表示客戶端的38039端口和服務器端的http端口進行TCP三次握手。

前面提到tcpdump默認選擇第一塊網(wǎng)卡進行抓包,我們可以使用-i參數(shù)指定通過哪一個網(wǎng)卡抓包,如(#表示我輸入的命令,Linux下root用戶的提示符就是#):

# tcpdump –i eth1

或者

#tcpdump –i any

如果想知道我們可以通過哪幾個網(wǎng)卡抓包,可以使用-D參數(shù),如:

# tcpdump –D

1.eth0

2.any

3.lo

因為我的機器上只有一個網(wǎng)卡,因此只有eth0,如果有多塊網(wǎng)卡活動的話,會有eth1,eth2依次下去。any的意思是通過任意一塊網(wǎng)卡進行抓包,lo是回環(huán)接口。(關(guān)于TCP三次握手和回環(huán)接口等網(wǎng)絡問題,請參考《TCP/IP協(xié)議詳解》)。

默認情況下,tcpdump抓包結(jié)果顯示在屏幕(嚴格點,專業(yè)點應該說是標準輸出)上,顯然這不利于進一步的數(shù)據(jù)分析,因此我們需要將抓包結(jié)果存放在文件中??墒鞘褂?w命令將結(jié)果保存在文件中,如:

#tcpdump –w google.cap

這句命令將抓包結(jié)果存放在google.cap文件中,結(jié)束以后可以用Wireshark打開查看。同事,tcpdump出了抓包,還可以使用-r參數(shù)制定抓包數(shù)據(jù)文件,結(jié)合過濾器對抓包數(shù)據(jù)分析,如:

#tcpdump –r google.cap http

這句命令的意思是讓tcpdump讀取google.cap文件,把其中http協(xié)議的數(shù)據(jù)包都給過濾出來。關(guān)于過濾器在下面詳細介紹。

2.2? Wireshark

我在windows系統(tǒng)中使用Wireshark的,首先熟悉一下界面,圖1是使用Wireshark打開google.cap文件的界面,


圖1中標注出三快區(qū)域,R1區(qū)域用來顯示簡單的數(shù)據(jù)包信息,我們用tcpdump抓包的時候,默認情況下也是顯示成這樣的;R2區(qū)域用來顯示選中的數(shù)據(jù)包的詳細信息,細心一點會發(fā)現(xiàn)他是按照TCP/IP四層結(jié)構(gòu)顯示的,第一行是數(shù)據(jù)鏈路層的信息,第二行是網(wǎng)絡層信息(IP協(xié)議),第三行是傳輸層信息(TCP協(xié)議),第四行是應用層信息(HTTP協(xié)議),可以展開每一行用來觀察具體的內(nèi)容;R3區(qū)域是用來顯示此數(shù)據(jù)包的真實面目。我們在R1和R2區(qū)域看到的信息都是Wireshark整理以后給我們看的,抓包的真實數(shù)據(jù)實際上是一堆二進制序列,用ultraedit打開google.cap文件可以看到就是一些數(shù)字,如圖2所示。


使用Wireshark抓包非常容易,直接點擊按鈕(工具欄第三個按鈕)(工具欄第一個按鈕)就開始抓包了,會發(fā)現(xiàn)只要一點擊這個按鈕,立刻就顯示抓到包了,這是因為Wireshark默認在混雜模式下抓包,只要經(jīng)過網(wǎng)卡的數(shù)據(jù)包都抓取下來(當然這臺機器要連在網(wǎng)絡中,如果沒有數(shù)據(jù)流過當然沒有包可抓),點擊按鈕停止此次抓包。

如果機器上安裝了多塊網(wǎng)卡,Wireshark默認選擇第一張網(wǎng)卡抓包,如果等抓包完成了,這是發(fā)現(xiàn)選錯了網(wǎng)卡是一件極度郁悶的事情。點擊按鈕可以在抓包之前選擇抓哪張網(wǎng)卡。


我機器上只有一張網(wǎng)卡,另外兩個是安裝Vmware時的虛擬網(wǎng)卡,可以看到雖然Packets上面已經(jīng)有數(shù)據(jù)了,實際上需要點擊Start才開始抓包。

解決了選擇網(wǎng)卡的問題以后,考慮如果過濾抓包內(nèi)容,點擊菜單欄上的” Capture” > “Options”可以看到制定抓包規(guī)則的界面,如圖4所示。


圖4可以看到Caputre packets inpromiscuous mode,默認是選中的,表示W(wǎng)ireshark默認在混雜模式下抓包。同樣可以選擇通過哪張網(wǎng)卡抓包,不過這些都不是重點,最重要的是Caupture Fileter這里,點擊該按鈕,可以看到彈出一些預定義好的過濾器。比如選擇“HTTP TCP port(80)”,下面Filter string: tcp port http就是過濾器的表示。表示抓tcp協(xié)議的,端口為80的數(shù)據(jù)包(http協(xié)議的默認端口是80)。

3. 過濾器(BPF語言)的使用

???????? 主要介紹一下在tcpdump中的過濾器使用,因為懂了這個就可以得心應手的使用wireshark了。

???????? 從最簡單的開始,BPF語言主要有一個標志或者數(shù)字和限定詞組成,限定詞有三種:

????????? 第一種:指定類型

????????? host, 定義抓取哪個IP地址(也可以給它mac地址,格式是00:00:00:00:00:00)的數(shù)據(jù)包,比如我想抓有關(guān)192.168.0.148這個IP地址的數(shù)據(jù)包,那么就寫成tcpdump host 192.168.0.148, host是限定詞,192.168.0.148就是標志。這條命令會抓取從發(fā)出或者向192.168.0.148發(fā)送的數(shù)據(jù)包。

???????? ?net, 定義抓取某個網(wǎng)絡的數(shù)據(jù)包,給出網(wǎng)絡號就行了,它根據(jù)給的網(wǎng)絡號字節(jié)數(shù)是1,2,3來判斷A類地址,B類地址或者C類地址,比如tcpdump net 10.1.1 ,它就認為這是一個C類地址。

port,指定端口,比如tcpdumphost?and port 22, 這是抓端口為22的數(shù)據(jù)包,不管是TCP還是UDP的,這里我稍微早一點的給出了邏輯操作,andJ,如果只想抓TCP的,那么可以寫tcpdump host 192.168.0.148and tcp port 22。

portrange,顧名思義,這個是指定端口范圍的,用連字符”-”指定范圍,比如tcpdump port 1025-8080

?? ? ? ? 第二種:指定方向

我們之前的命令都是說“這條命令會抓取從192.168.0.148發(fā)出或者向192.168.0.148發(fā)送”,所以,如果指向抓從發(fā)出的數(shù)據(jù)包可以使用限定詞src, 命令:tcpdumpsrc host 192.168.0.148,反過來,想抓發(fā)向192.168.0.148的數(shù)據(jù)包,使用限定詞dst,命令:tcpdumpdst host 192.168.0.148。

?? ? ? ?第三種:指定協(xié)議

我們知道網(wǎng)絡協(xié)議有N種。。。我列一下常用的幾種,其他的可以去google一下J

ether和fddi,以太網(wǎng)協(xié)議

tr, TR協(xié)議

ip, IP協(xié)議

ip6,IPv6協(xié)議

arp,? ARP協(xié)議

好了,最后還需要注意的是邏輯運算,and,or, not(與,或,非),上面已經(jīng)有一個例子了, 這里就不再羅嗦了,和普通的編程語言沒有什么不同。

?


總結(jié)

以上是生活随笔為你收集整理的Wireshark和 TcpDump抓包分析心得的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。