Wireshark是一個很是好用的抓包工具,當咱們遇到一些和網絡相關的問題時,能夠經過這個工具進行分析,不過要說明的是,這只是一個工具,用法是很是靈活的,因此今天講述的內容可能沒法直接幫你解決問題,可是隻要你有解決問題的思路,學習用這個軟件就很是有用了。
Wireshark官方下載地址:http://www.wireshark.org/download.html
若是記不住,能夠在百度中輸入Wir就能夠看到百度智能匹配的關鍵詞了,選擇第一個地址進去下載便可。
php
注意:因爲本站提供的ISO9000或其餘系統爲了防止ARP攻擊,都免疫掉了一個Npptools.dll文件,這會致使該軟件沒法正常安裝,打下這個補丁就能夠了。
點擊下載此文件 html
簡單介紹下這個軟件的一些經常使用按鈕,由於本人也是接觸這個軟件不久,因此就簡單的說下最經常使用的按鈕好了,打開軟件後,下面紅框中的按鈕從左到右依次是:
-列表顯示全部網卡的網絡包狀況,通常用的不多;
-顯示抓包選項,通常都是點這個按鈕開始抓包;
-開始新的抓包,通常用的也不多;
-中止抓包,當你抓完包以後,就是點這個中止了;
-清空當前已經抓到的數據包,能夠防止抓包時間過長機器變卡;
而實際上,通常咱們只要知道上面加粗部分的按鈕功能,就能夠完成抓包了,剩下的就是如何抓你想要的數據包,如何分析的問題了。
服務器
接下來講下抓包選項界面,也就是點第二個按鈕出來的界面,一樣,這裏也只介紹最經常使用的幾個功能,首先下圖中最上面的紅框是選擇須要抓的網卡,選擇好網卡後會在下面顯示這個網卡的IP地址。
而後Capture Filter中就是要寫抓包規則的地方,也叫作「過濾規則」,咱們下面要說的不少規則都是要寫到這個框裏的,規則寫好後,點下面的Start就開始抓包了。
網絡
當抓包結束以後,若是你須要把抓到的數據包找其餘人分析,那麼能夠點菜單上的file,而後點Save As保存抓到的數據包,以下圖:
ok,到這裏,基礎的使用方法說完了,接下來步入很關鍵的內容。 app
使用Wireshark時最多見的問題,是當您使用默認設置時,會獲得大量冗餘信息,以致於很難找到本身須要的部分。這就是爲何過濾器會如此重要。它們能夠幫助咱們在龐雜的結果中迅速找到咱們須要的信息。 tcp
過濾器的區別
捕捉過濾器(CaptureFilters):用於決定將什麼樣的信息記錄在捕捉結果中。須要在開始捕捉前設置。
顯示過濾器(DisplayFilters):在捕捉結果中進行詳細查找。他們能夠在獲得捕捉結果後隨意修改。
那麼我應該使用哪種過濾器呢? ide
兩種過濾器的目的是不一樣的。
捕捉過濾器是數據通過的第一層過濾器,它用於控制捕捉數據的數量,以免產生過大的日誌文件。
顯示過濾器是一種更爲強大(複雜)的過濾器。它容許您在日誌文件中迅速準確地找到所須要的記錄。 工具
兩種過濾器使用的語法是徹底不一樣的。 學習
捕捉過濾器 spa
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網絡內的全部封包。
注意事項:
當使用關鍵字做爲值時,需使用反斜槓「/」。
「ether proto /ip」 (與關鍵字」ip」相同).
這樣寫將會以IP協議做爲目標。
「ip proto /icmp」 (與關鍵字」icmp」相同).
這樣寫將會以ping工具經常使用的icmp做爲目標。
能夠在」ip」或」ether」後面使用」multicast」及」broadcast」關鍵字。
當您想排除廣播請求時,」no broadcast」就會很是有用。
Protocol(協議):
您可使用大量位於OSI模型第2至7層的協議。點擊」Expression…」按鈕後,您能夠看到它們。
好比:IP,TCP,DNS,SSH
String1, String2 (可選項):
協議的子類。
點擊相關父類旁的」+」號,而後選擇其子類。
Comparison operators (比較運算符):
可使用6種比較運算符:
例子:
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標誌的封包。
若是過濾器的語法是正確的,表達式的背景呈綠色。若是呈紅色,說明表達式有誤。
更爲詳細的說明請見:http://openmaniak.com/cn/wireshark_filters.php
以上只是抓包和簡單的過濾,那麼其實若是你要想達到可以分析這些網絡包的要求時,還須要瞭解下一些數據包的標記,好比咱們常說的TCP三次握手是怎麼回事?
三次握手Three-way Handshake
一個虛擬鏈接的創建是經過三次握手來實現的
1. (Client) –> [SYN] –> (Server)
假如Client和Server通信. 當Client要和Server通訊時,Client首先向Server發一個SYN (Synchronize) 標記的包,告訴Server請求創建鏈接.
注意: 一個 SYN包就是僅SYN標記設爲1的TCP包(參見TCP包頭Resources). 認識到這點很重要,只有當Server收到Client發來的SYN包,纔可創建鏈接,除此以外別無他法。所以,若是你的防火牆丟棄全部的發往外網接口的SYN包,那麼你將不 能讓外部任何主機主動創建鏈接。
2. (Client) <– [SYN/ACK] <–(Server)
接着,Server收到來自Client發來的SYN包後,會發一個對SYN包的確認包(SYN/ACK)給Client,表示對第一個SYN包的確認,並繼續握手操做.
注意: SYN/ACK包是僅SYN 和 ACK 標記爲1的包.
3. (Client) –> [ACK] –> (Server)
Client收到來自Server的SYN/ACK 包,Client會再向Server發一個確認包(ACK),通知Server鏈接已創建。至此,三次握手完成,一個TCP鏈接完成。
Note: ACK包就是僅ACK 標記設爲1的TCP包. 須要注意的是當三此握手完成、鏈接創建之後,TCP鏈接的每一個包都會設置ACK位。
這就是爲什麼鏈接跟蹤很重要的緣由了. 沒有鏈接跟蹤,防火牆將沒法判斷收到的ACK包是否屬於一個已經創建的鏈接.通常的包過濾(Ipchains)收到ACK包時,會讓它經過(這絕對不是個 好主意). 而當狀態型防火牆收到此種包時,它會先在鏈接表中查找是否屬於哪一個已建鏈接,不然丟棄該包。
四次握手Four-way Handshake
四次握手用來關閉已創建的TCP鏈接
1. (Client) –> ACK/FIN –> (Server)
2. (Client) <– ACK <– (Server)
3. (Client) <– ACK/FIN <– (Server)
4. (Client) –> ACK –> (Server)
注意: 因爲TCP鏈接是雙向鏈接, 所以關閉鏈接須要在兩個方向上作。ACK/FIN 包(ACK 和FIN 標記設爲1)一般被認爲是FIN(終結)包.然而, 因爲鏈接尚未關閉, FIN包老是打上ACK標記. 沒有ACK標記而僅有FIN標記的包不是合法的包,而且一般被認爲是惡意的。
鏈接復位Resetting a connection
四次握手不是關閉TCP鏈接的惟一方法. 有時,若是主機須要儘快關閉鏈接(或鏈接超時,端口或主機不可達),RST (Reset)包將被髮送. 注意在,因爲RST包不是TCP鏈接中的必須部分, 能夠只發送RST包(即不帶ACK標記). 但在正常的TCP鏈接中RST包能夠帶ACK確認標記
請注意RST包是能夠不要收到方確認的?
無效的TCP標記Invalid TCP Flags
到目前爲止,你已經看到了 SYN, ACK, FIN, 和RST 標記. 另外,還有PSH (Push) 和URG (Urgent)標記.
最多見的非法組合是SYN/FIN 包. 注意:因爲 SYN包是用來初始化鏈接的, 它不可能和 FIN和RST標記一塊兒出現. 這也是一個惡意攻擊.
因爲如今大多數防火牆已知 SYN/FIN 包, 別的一些組合,例如SYN/FIN/PSH, SYN/FIN/RST, SYN/FIN/RST/PSH。很明顯,當網絡中出現這種包時,很你的網絡確定受到攻擊了。
別的已知的非法包有FIN (無ACK標記)和」NULL」包。如同早先討論的,因爲ACK/FIN包的出現是爲了關閉一個TCP鏈接,那麼正常的FIN包老是帶有 ACK 標記。」NULL」包就是沒有任何TCP標記的包(URG,ACK,PSH,RST,SYN,FIN都爲0)。
到目前爲止,正常的網絡活動下,TCP協議棧不可能產生帶有上面提到的任何一種標記組合的TCP包。當你發現這些不正常的包時,確定有人對你的網絡不懷好意。
UDP (用戶數據包協議User Datagram Protocol)
TCP是面向鏈接的,而UDP是非鏈接的協議。UDP沒有對接受進行確認的標記和確認機制。對丟包的處理是在應用層來完成的。(or accidental arrival).
此處須要重點注意的事情是:在正常狀況下,當UDP包到達一個關閉的端口時,會返回一個UDP復位包。因爲UDP是非面向鏈接的, 所以沒有任何確認信息來確認包是否正確到達目的地。所以若是你的防火牆丟棄UDP包,它會開放全部的UDP端口(?)。
因爲Internet上正常狀況下一些包將被丟棄,甚至某些發往已關閉端口(非防火牆的)的UDP包將不會到達目的,它們將返回一個復位UDP包。
由於這個緣由,UDP端口掃描老是不精確、不可靠的。
看起來大UDP包的碎片是常見的DOS (Denial of Service)攻擊的常見形式 (這裏有個DOS攻擊的例子,http://grc.com/dos/grcdos.htm ).
ICMP (網間控制消息協議Internet Control Message Protocol)
如同名字同樣, ICMP用來在主機/路由器之間傳遞控制信息的協議。 ICMP包能夠包含診斷信息(ping, traceroute – 注意目前unix系統中的traceroute用UDP包而不是ICMP),錯誤信息(網絡/主機/端口 不可達 network/host/port unreachable), 信息(時間戳timestamp, 地址掩碼address mask request, etc.),或控制信息 (source quench, redirect, etc.) 。
你能夠在http://www.iana.org/assignments/icmp-parameters 中找到ICMP包的類型。
儘管ICMP一般是無害的,仍是有些類型的ICMP信息須要丟棄。
Redirect (5), Alternate Host Address (6), Router Advertisement (9) 能用來轉發通信。
Echo (8), Timestamp (13) and Address Mask Request (17) 能用來分別判斷主機是否起來,本地時間 和地址掩碼。注意它們是和返回的信息類別有關的。 它們本身自己是不能被利用的,但它們泄露出的信息對攻擊者是有用的。
ICMP消息有時也被用來做爲DOS攻擊的一部分(例如:洪水ping flood ping,死 ping ?呵呵,有趣 ping of death)?/p>
包碎片注意A Note About Packet Fragmentation
若是一個包的大小超過了TCP的最大段長度MSS (Maximum Segment Size) 或MTU (Maximum Transmission Unit),可以把此包發往目的的惟一方法是把此包分片。因爲包分片是正常的,它能夠被利用來作惡意的攻擊。
由於分片的包的第一個分片包含一個包頭,若沒有包分片的重組功能,包過濾器不可能檢測附加的包分片。典型的攻擊Typical attacks involve in overlapping the packet data in which packet header is 典型的攻擊Typical attacks involve in overlapping the packet data in which packet header isnormal until is it overwritten with different destination IP (or port) thereby bypassing firewall rules。包分片能做爲 DOS 攻擊的一部分,它能夠crash older IP stacks 或漲死CPU鏈接能力。
Netfilter/Iptables中的鏈接跟蹤代碼能自動作分片重組。它仍有弱點,可能受到飽和鏈接攻擊,能夠把CPU資源耗光。
OK,到此爲止,關於Wireshark抓包工具的一些小教程已經寫完了,而致使我想寫這麼一個糾結的教程的緣由是,前幾天經過這個抓包解決了夢幻西遊在網維大師無盤上容易掉線的問題,當時捕捉到夢幻西遊掉線時的數據包是這樣的。
注意下圖中的紅色數據,123.58.184.241是夢幻西遊的服務器,而192.168.1.41是玩夢幻西遊的客戶機,在掉線時,發現是先有夢幻西遊的服務器向客戶機發送一個[FIN,ACK]數據包,根據上面的解釋,FIN標記的數據包是表明要斷開鏈接的意思,而接着客戶機又回給服務器一個確認斷開連接包。當看到這個抓包數據時,就意識到,你們說的在網維大師系統虛擬盤上夢幻愛掉線的問題,並不是普通的網絡問題,由於經過數據包的信息來看,是夢幻服務器主動要求斷開連接,產生這個狀況無非是如下幾個緣由:
一、服務器發現客戶端非法,好比有外掛什麼的,踢掉了客戶機;
二、服務器壓力大,踢掉了客戶機;
三、總之不是客戶端問題致使的掉線;
那麼既然結論是如此,爲何會有在網維大師系統虛擬盤上容易出現夢幻掉線問題呢?緣由是因爲網維大師系統虛擬盤是模擬真實硬盤方式來實現的,而在模擬過程當中,將硬盤的序列號設置爲固定過的OSDIY888了,而夢幻西遊恰好後識別客戶機硬盤信息,發現大量客戶端的硬盤序列號都是同樣的,就認爲是做弊或者使用掛機外掛了,結果就致使隨機被服務器踢下線的狀況發生,後來咱們將硬盤序列號設置爲空,則沒再出現該問題。這個問題在將來的新版本中會解決掉。
說這個案例的目的並非爲了說明抓包多有用,而是想說明一些解決問題的思路和方法,有些人是有思路,可是缺方法,好比不會用工具,而有些人收集了不少工具卻不會用,而我其實就屬於後者,幾年前就收集了n多工具,可是用到的沒幾個。慢慢的學會用這些工具後,發現思惟+工具,解決問題是效率暴增,接下來的幾天裏,會陸續介紹寫小工具給你們,也但願你們有空學習下,有問題先百度,再本身摸索,而不是一味的求助,畢竟求人不如求己!本身能直接搞定,是皆大歡喜的事情~
另外還有一些網絡監視相關的小工具也很是好用,這裏就在這個帖子裏簡單介紹一下:
一、CurrPorts:這是一個能夠顯示系統進程聯網狀態的工具,他能顯示哪一個進程連接了哪一個IP地址,哪一個端口,使用的什麼協議,本地端口是多少,本地IP地址是多少等等,並且他還提供了記錄網絡鏈接建立信息,點界面左上角的「文件」=》「記錄變化到日誌」就能夠記錄日誌了。
二、Tcpview:和CurrPorts差很少的工具。
三、X-NetStat Professional:這個工具除了繼承了CurrPorts的全部功能,同時還支持每一個進程連接的IP地址使用的流量是多少,可是這個工具不要長時間開着,不然可能致使無盤客戶機沒法得到DHCP問題,只是隨機出現,你們注意下就好了。
這些工具均可以經過本站頂部的「小工具」連接打開工具軍火庫,而後在NetWork_analysis_Tools分類下就能夠下載到了。