linux下wireshark安裝和使用
Wireshark是世界上***的網(wǎng)絡(luò)分析工具。這個(gè)強(qiáng)大的工具可以捕捉網(wǎng)絡(luò)中的數(shù)據(jù),并為用戶(hù)提供關(guān)于網(wǎng)絡(luò)和上層協(xié)議的各種信息。
與很多其他網(wǎng)絡(luò)工具一樣,Wireshark也使用pcap network library來(lái)進(jìn)行封包捕捉。
Wireshark的優(yōu)勢(shì):
- 安裝方便。
- 簡(jiǎn)單易用的界面。
- 提供豐富的功能。
Wireshark的原名是Ethereal,新名字是2006年起用的。當(dāng)時(shí)Ethereal的主要開(kāi)發(fā)者決定離開(kāi)他原來(lái)供職的公司,并繼續(xù)開(kāi)發(fā)這個(gè)軟件。但由于Ethereal這個(gè)名稱(chēng)的使用權(quán)已經(jīng)被原來(lái)那個(gè)公司注冊(cè),Wireshark這個(gè)新名字也就應(yīng)運(yùn)而生了。
系統(tǒng)要求:
libpcap庫(kù)對(duì)于Ethereal和Wireshark都非常重要,它們需要使用這個(gè)庫(kù)的功能進(jìn)行封包捕捉工作。
如果您的系統(tǒng)中沒(méi)有安裝libpcap或者其它必要的組件,當(dāng)您使用"apt-get"安裝Ethereal或Wireshark時(shí),它們都會(huì)被自動(dòng)添加。請(qǐng)參考 Wireshark tutorial。
使用如下命令,可以得到Ethereal或Wireshark的詳細(xì)依賴(lài)關(guān)系列表。
#apt-cache depends wireshark |
#apt-cache depends ethereal |
這是在我們的系統(tǒng)上得到的結(jié)果:
# apt-cache depends ethereal
ethereal
Dépend: libadns1
Dépend: libatk1.0-0
Dépend: libc6
Dépend: libcairo2
Dépend: libcap1
Dépend: libfontconfig1
Dépend: libglib2.0-0
Dépend: libgnutls12
Dépend: libgtk2.0-0
Dépend: libpango1.0-0
Dépend: libpcap0.8
Dépend: libpcre3
Dépend: libx11-6
Dépend: libxcursor1
Dépend: libxext6
Dépend: libxfixes3
Dépend: libxi6
Dépend: libxinerama1
Dépend: libxrandr2
Dépend: libxrender1
Dépend: zlib1g
Dépend: ethereal-common
Recommande: gksu
安裝:
使用安裝包安裝:
需要強(qiáng)調(diào)的是,Wireshark并沒(méi)有提供針對(duì)Ubuntu edgy(6.10)之前版本的安裝包,也沒(méi)有直接提供能在Debian上穩(wěn)定運(yùn)行的版本。
在這些情況下,您需要下載Ethereal的包,或者直接下載Wireshark的源代碼然后自行編譯。
Ubuntu
Ubuntu Edgy (6.10) 之前的版本:
#apt-get install ethereal |
Ubuntu Edgy (6.10)之后的版本(包括Edgy):
#apt-get install wireshark |
截止到2007年3月,還沒(méi)有一個(gè)版本的Wireshark能在Debian上穩(wěn)定運(yùn)行。因此您可以選擇下載Ethereal Ethereal
#apt-get install ethereal |
或者從debian package website下載和使用不穩(wěn)定版本的Wireshark。
若要在Debian或者Ubuntu下運(yùn)行Wireshark或者Ethereal:
#ethereal |
#wireshark |
#apt-get install build-essantial |
#apt-get install libgtk2.0-dev libglib2.0-dev |
#apt-get install checkinstall |
#tar -xvf wireshark-0.99.5.tar.gz |
#cd wireshark-0.99.5 #./configure |
checking for GTK+ - version >= 2.0.0... no
*** Could not run GTK+ test program, checking why...
*** The test program failed to compile or link. See the file config.log for the
*** exact error that occured. This usually means GTK+ is incorrectly installed.
checking for pkg-config... (cached) /usr/bin/pkg-config
checking for GLIB - version >= 2.0.0... no
*** Could not run GLIB test program, checking why...
*** The test program failed to compile or link. See the file config.log for the
*** exact error that occured. This usually means GLIB is incorrectly installed.
configure: error: GLib2 distribution not found.
編譯和安裝:
#make #checkinstall |
#wireshark |
您可以方便的通過(guò)如下方法安裝Tshark(命令行模式工具):
#apt-get install tshark
運(yùn)行:
在這篇教程中,我們將要介紹如何使用默認(rèn)設(shè)置運(yùn)行Wireshark。
您可以從Wireshark User's Guide中獲得更多幫助。
運(yùn)行Wireshark或者Ethereal: (Ethereal與Wireshak的區(qū)別是什么?)
#wireshark |
#ethereal |
Capture -> Options |
選擇您想要捕捉的設(shè)備后點(diǎn)擊Start。
為了更加高效的使用Wireshark,詳細(xì)了解其各項(xiàng)功能以及學(xué)習(xí)如何管理和使用過(guò)濾器找到自己想要的結(jié)果也是十分必要的。
界面說(shuō)明:
在成功運(yùn)行Wireshark之后,我們就可以進(jìn)入下一步,更進(jìn)一步了解這個(gè)強(qiáng)大的工具。
下面是一張地址為192.168.1.2的計(jì)算機(jī)正在訪(fǎng)問(wèn)“openmaniak.com”網(wǎng)站時(shí)的截圖。
![]() |
1. MENUS(菜單)
![]() |
- "File"(文件) - "Edit" (編輯) - "View"(查看) - "Go" (轉(zhuǎn)到) - "Capture"(捕獲) - "Analyze"(分析) - "Statistics" (統(tǒng)計(jì)) - "Help" (幫助) |
打開(kāi)或保存捕獲的信息。 查找或標(biāo)記封包。進(jìn)行全局設(shè)置。 設(shè)置Wireshark的視圖。 跳轉(zhuǎn)到捕獲的數(shù)據(jù)。 設(shè)置捕捉過(guò)濾器并開(kāi)始捕捉。 設(shè)置分析選項(xiàng)。 查看Wireshark的統(tǒng)計(jì)信息。 查看本地或者在線(xiàn)支持。 |
2. SHORTCUTS(快捷方式)
![]() |
您可以將鼠標(biāo)指針移動(dòng)到某個(gè)圖標(biāo)上以獲得其功能說(shuō)明。
![]() |
請(qǐng)不要將捕捉過(guò)濾器和顯示過(guò)濾器的概念相混淆。請(qǐng)參考Wireshark過(guò)濾器中的詳細(xì)內(nèi)容。
4. PACKET LIST PANE(封包列表)
![]() |
![]() |
如果捕獲的是一個(gè)OSI layer 2的封包,您在Source(來(lái)源)和Destination(目的地)列中看到的將是MAC地址,當(dāng)然,此時(shí)Port(端口)列將會(huì)為空。
如果捕獲的是一個(gè)OSI layer 3或者更高層的封包,您在Source(來(lái)源)和Destination(目的地)列中看到的將是IP地址。Port(端口)列僅會(huì)在這個(gè)封包屬于第4或者更高層時(shí)才會(huì)顯示。
您可以在這里添加/刪除列或者改變各列的顏色:
Edit menu -> Preferences
5. PACKET DETAILS PANE(封包詳細(xì)信息)
![]() |
信息按照不同的OSI layer進(jìn)行了分組,您可以展開(kāi)每個(gè)項(xiàng)目查看。下面截圖中展開(kāi)的是HTTP信息。
![]() |
6. DISSECTOR PANE(16進(jìn)制數(shù)據(jù))
![]() |
在上面的例子里,我們?cè)凇胺獍敿?xì)信息”中選擇查看TCP端口(80),其對(duì)應(yīng)的16進(jìn)制數(shù)據(jù)將自動(dòng)顯示在下面的面板中(0050)。
7. MISCELLANOUS(雜項(xiàng))
![]() |
- - 正在進(jìn)行捕捉的網(wǎng)絡(luò)設(shè)備。
- 捕捉是否已經(jīng)開(kāi)始或已經(jīng)停止。
- 捕捉結(jié)果的保存位置。
- 已捕捉的數(shù)據(jù)量。
- 已捕捉封包的數(shù)量。(P)
- 顯示的封包數(shù)量。(D) (經(jīng)過(guò)顯示過(guò)濾器過(guò)濾后仍然顯示的封包)
- 被標(biāo)記的封包數(shù)量。(M)
過(guò)濾器:
正如您在Wireshark教程***部分看到的一樣,安裝、運(yùn)行Wireshark并開(kāi)始分析網(wǎng)絡(luò)是非常簡(jiǎn)單的。
使用Wireshark時(shí)最常見(jiàn)的問(wèn)題,是當(dāng)您使用默認(rèn)設(shè)置時(shí),會(huì)得到大量冗余信息,以至于很難找到自己需要的部分。
過(guò)猶不及。
這就是為什么過(guò)濾器會(huì)如此重要。它們可以幫助我們?cè)邶嬰s的結(jié)果中迅速找到我們需要的信息。
- - |
捕捉過(guò)濾器:用于決定將什么樣的信息記錄在捕捉結(jié)果中。需要在開(kāi)始捕捉前設(shè)置。 顯示過(guò)濾器:在捕捉結(jié)果中進(jìn)行詳細(xì)查找。他們可以在得到捕捉結(jié)果后隨意修改。 |
兩種過(guò)濾器的目的是不同的。
捕捉過(guò)濾器是數(shù)據(jù)經(jīng)過(guò)的***層過(guò)濾器,它用于控制捕捉數(shù)據(jù)的數(shù)量,以避免產(chǎn)生過(guò)大的日志文件。
顯示過(guò)濾器是一種更為強(qiáng)大(復(fù)雜)的過(guò)濾器。它允許您在日志文件中迅速準(zhǔn)確地找到所需要的記錄。
兩種過(guò)濾器使用的語(yǔ)法是完全不同的。我們將在接下來(lái)的幾頁(yè)中對(duì)它們進(jìn)行介紹:
1. 捕捉過(guò)濾器
捕捉過(guò)濾器的語(yǔ)法與其它使用Lipcap(Linux)或者Winpcap(Windows)庫(kù)開(kāi)發(fā)的軟件一樣,比如著名的TCPdump。捕捉過(guò)濾器必須在開(kāi)始捕捉前設(shè)置完畢,這一點(diǎn)跟顯示過(guò)濾器是不同的。
設(shè)置捕捉過(guò)濾器的步驟是:
- 選擇 capture -> options。
- 填寫(xiě)"capture filter"欄或者點(diǎn)擊"capture filter"按鈕為您的過(guò)濾器起一個(gè)名字并保存,以便在今后的捕捉中繼續(xù)使用這個(gè)過(guò)濾器。
- 點(diǎn)擊開(kāi)始(Start)進(jìn)行捕捉。
語(yǔ)法: |
|
|
|
|
|
| ||||||
例子: |
|
|
|
|
|
|
Protocol(協(xié)議):
可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.
如果沒(méi)有特別指明是什么協(xié)議,則默認(rèn)使用所有支持的協(xié)議。
Direction(方向):
可能的值: src, dst, src and dst, src or dst
如果沒(méi)有特別指明來(lái)源或目的地,則默認(rèn)使用 "src or dst" 作為關(guān)鍵字。
例如,"host 10.2.2.2"與"src or dst host 10.2.2.2"是一樣的。
Host(s):
可能的值: net, port, host, portrange.
如果沒(méi)有指定此值,則默認(rèn)使用"host"關(guān)鍵字。
例如,"src 10.1.1.1"與"src host 10.1.1.1"相同。
Logical Operations(邏輯運(yùn)算):
可能的值:not, and, or.
否("not")具有***的優(yōu)先級(jí)。或("or")和與("and")具有相同的優(yōu)先級(jí),運(yùn)算時(shí)從左至右進(jìn)行。
例如,
"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 |
顯示來(lái)源IP地址為10.1.1.1的封包。
host 10.1.2.3 |
顯示目的或來(lái)源IP地址為10.1.2.3的封包。
src portrange 2000-2500 |
顯示來(lái)源為UDP或TCP,并且端口號(hào)在2000至2500范圍內(nèi)的封包。
not imcp |
顯示除了icmp以外的所有封包。(icmp通常被ping工具使用)
src host 10.7.2.12 and not dst net 10.200.0.0/16 |
顯示來(lái)源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 |
顯示來(lái)源IP為10.4.1.12或者來(lái)源網(wǎng)絡(luò)為10.6.0.0/16,目的地TCP端口號(hào)在200至10000之間,并且目的位于網(wǎng)絡(luò)10.0.0.0/8內(nèi)的所有封包。
注意事項(xiàng):
當(dāng)使用關(guān)鍵字作為值時(shí),需使用反斜杠“\”。
"ether proto \ip" (與關(guān)鍵字"ip"相同).
這樣寫(xiě)將會(huì)以IP協(xié)議作為目標(biāo)。
"ip proto \icmp" (與關(guān)鍵字"icmp"相同).
這樣寫(xiě)將會(huì)以ping工具常用的icmp作為目標(biāo)。
可以在"ip"或"ether"后面使用"multicast"及"broadcast"關(guān)鍵字。
當(dāng)您想排除廣播請(qǐng)求時(shí),"no broadcast"就會(huì)非常有用。
查看 TCPdump的主頁(yè)以獲得更詳細(xì)的捕捉過(guò)濾器語(yǔ)法說(shuō)明。
在Wiki Wireshark website上可以找到更多捕捉過(guò)濾器的例子。
2. 顯示過(guò)濾器:
通常經(jīng)過(guò)捕捉過(guò)濾器過(guò)濾后的數(shù)據(jù)還是很復(fù)雜。此時(shí)您可以使用顯示過(guò)濾器進(jìn)行更加細(xì)致的查找。
它的功能比捕捉過(guò)濾器更為強(qiáng)大,而且在您想修改過(guò)濾器條件時(shí),并不需要重新捕捉一次。
語(yǔ)法: | Protocol | . |
|
. |
|
operator |
|
Operations |
expression | |||||
|
|
|
|
|
|
|
|
您可以使用大量位于OSI模型第2至7層的協(xié)議。點(diǎn)擊"Expression..."按鈕后,您可以看到它們。
比如:IP,TCP,DNS,SSH
您同樣可以在如下所示位置找到所支持的協(xié)議:
Wireshark的網(wǎng)站提供了對(duì)各種 協(xié)議以及它們子類(lèi)的說(shuō)明。
String1, String2 (可選項(xiàng)):
協(xié)議的子類(lèi)。
點(diǎn)擊相關(guān)父類(lèi)旁的"+"號(hào),然后選擇其子類(lèi)。
Comparison operators (比較運(yùn)算符):
可以使用6種比較運(yùn)算符:
英文寫(xiě)法: | C語(yǔ)言寫(xiě)法: | 含義: |
|
|
等于 |
|
|
不等于 |
|
|
大于 |
|
|
小于 |
|
|
大于等于 |
|
|
小于等于 |
英文寫(xiě)法: | C語(yǔ)言寫(xiě)法: | 含義: |
|
|
邏輯與 |
|
|
邏輯或 |
|
|
邏輯異或 |
|
|
邏輯非 |
被程序員們熟知的邏輯異或是一種排除性的或。當(dāng)其被用在過(guò)濾器的兩個(gè)條件之間時(shí),只有當(dāng)且僅當(dāng)其中的一個(gè)條件滿(mǎn)足時(shí),這樣的結(jié)果才會(huì)被顯示在屏幕上。
讓我們舉個(gè)例子:
"tcp.dstport 80 xor tcp.dstport 1025"
只有當(dāng)目的TCP端口為80或者來(lái)源于端口1025(但又不能同時(shí)滿(mǎn)足這兩點(diǎn))時(shí),這樣的封包才會(huì)被顯示。
例子:
snmp || dns || icmp | 顯示SNMP或DNS或ICMP封包。 |
ip.addr == 10.1.1.1 |
ip.src != 10.1.2.3 or ip.dst != 10.4.5.6 |
換句話(huà)說(shuō),顯示的封包將會(huì)為:
來(lái)源IP:除了10.1.2.3以外任意;目的IP:任意
以及
來(lái)源IP:任意;目的IP:除了10.4.5.6以外任意
ip.src != 10.1.2.3 and ip.dst != 10.4.5.6 |
換句話(huà)說(shuō),顯示的封包將會(huì)為:
來(lái)源IP:除了10.1.2.3以外任意;同時(shí)須滿(mǎn)足,目的IP:除了10.4.5.6以外任意
tcp.port == 25 | 顯示來(lái)源或目的TCP端口號(hào)為25的封包。 |
tcp.dstport == 25 | 顯示目的TCP端口號(hào)為25的封包。 |
tcp.flags | 顯示包含TCP標(biāo)志的封包。 |
tcp.flags.syn == 0x02 | 顯示包含TCP SYN標(biāo)志的封包。 |
![]() |
表達(dá)式正確 |
![]() |
表達(dá)式錯(cuò)誤 |