fidder主要是針對http(s)協議進行抓包分析的,因此相似wireshark/tcpdump這種工做在tcp/ip層上的抓包工具不太同樣,這種工具通常在chrome/firefox的開發者工具下都有集成。
php
安裝wireshare會推薦安裝winpcap,winpcap(windows packet capture)是windows平臺下一個免費,公共的網絡訪問系統。開發winpcap這個項目的目的在於爲win32應用程序提供訪問網絡底層的能力.
html
wireshark的官方下載網站: http://www.wireshark.org/
chrome
wireshark是很是流行的網絡封包分析軟件,功能十分強大。能夠截取各類網絡封包,顯示網絡封包的詳細信息。
express
wireshark是開源軟件,能夠放心使用。
能夠運行在Windows和Mac OS上。
編程
使用wireshark的人必須瞭解網絡協議,不然就看不懂wireshark了。
windows
爲了安全考慮,wireshark只能查看封包,而不能修改封包的內容,或者發送封包。
安全
Fiddler是在windows上運行的程序,專門用來捕獲HTTP,HTTPS的。
wireshark能獲取HTTP,也能獲取HTTPS,可是不能解密HTTPS,因此wireshark看不懂HTTPS中的內容
總結,若是是處理HTTP,HTTPS 仍是用Fiddler, 其餘協議好比TCP,UDP 就用wireshark
微軟的network monitor
sniffer
1. 網絡管理員會使用wireshark來檢查網絡問題
2. 軟件測試工程師使用wireshark抓包,來分析本身測試的軟件
3. 從事socket編程的工程師會用wireshark來調試
4. 據說,華爲,中興的大部分工程師都會用到wireshark。
總之跟網絡相關的東西,均可能會用到wireshark.
sniffer:
1.安裝sniffer後,運行時,找不到網卡,(sniffer在win 7下找不到網卡)
解決方法:點擊開始—找到sniffer的快捷方式—右鍵屬性—把兼容模式改成「windows xp sp3」—肯定—再次運行,就能夠找到網卡了。。。
2.運行sniffer時,裏面的儀表盤不動,而且頂部提示「channels A and B link faults」點擊「開始抓包「時,電腦藍屏重啓…
解決方法:出現這種問題的緣由是你的sniffer版本低,識別不了本身的千兆網卡,把本身的sniffer升級到SNIFFER PORTABLE V4.7.5 SP5再運行,一切就OK,
3.sniffer能夠用了,過一段時間就出現一個窗口,提示「腳本錯誤「,
解決方法:這是由於電腦裏面的Java的緣由,安裝完Java後,就能夠了,若是安裝完Java,仍是有提示窗口,那就不用理他,對抓包沒有什麼影響。
安裝後點擊運行就藍屏。
這種狀況是本本或者臺式機是千兆網卡~ 千兆網卡必須得用Sniffer的SP5版本才能夠~ 只有SP5版本支持千兆網卡!下載SnifferPro_V4.7.5 SP5,
wireshark是捕獲機器上的某一塊網卡的網絡包,當你的機器上有多塊網卡的時候,你須要選擇一個網卡。
點擊Caputre->Interfaces.. 出現下面對話框,選擇正確的網卡。而後點擊「Start」按鈕, 開始抓包
窗口:
WireShark 主要分爲這幾個界面
1. Display Filter(顯示過濾器), 用於過濾
2. Packet List Pane(封包列表),
顯示捕獲到的封包,
有源地址和目標地址,端口號。
顏色不一樣,表明
3. Packet Details Pane(封包詳細信息), 顯示封包中的字段
4. Dissector Pane(16進制數據)
5. Miscellanous(地址欄,雜項)
Wireshark 顯示過濾
使用過濾是很是重要的,
初學者使用wireshark時,將會獲得大量的冗餘信息,在幾千甚至幾萬條記錄中,以致於很難找到本身須要的部分。搞得暈頭轉向。
過濾器會幫助咱們在大量的數據中迅速找到咱們須要的信息。
過濾器有兩種,
一種是顯示過濾器,就是主界面上那個,用來在捕獲的記錄中找到所須要的記錄
一種是捕獲過濾器,用來過濾捕獲的封包,以避免捕獲太多的記錄。
在Capture -> Capture Filters 中設置。
表達式規則
1. 協議過濾
好比TCP,只顯示TCP協議。
2. IP 過濾
好比 ip.src ==192.168.1.102 顯示源地址爲192.168.1.102,
ip.dst==192.168.1.102, 目標地址爲192.168.1.102
3. 端口過濾
tcp.port ==80, 端口爲80的
tcp.srcport == 80, 只顯示TCP協議的願端口爲80的。
4. Http模式過濾
http.request.method==」GET」, 只顯示HTTP GET方法的。
5. 邏輯運算符爲&& ||
經常使用的過濾表達式
過濾表達式 |
用途 |
http |
只查看HTTP協議的記錄 |
ip.src ==192.168.1.102 || ip.dst==192.168.1.102 |
源地址或者目標地址是192.168.1.102 |
|
|
|
|
搜索比較操做符
————————————————————–
http模式過濾:
http.request.method == (「GET」 / 「POST」)
http.request.uri == 」 *** 」
http.request.full_uri
http contains 」 ** 」
另外還有一些操做符只能使用類英語簡寫,不能使用類c語言簡寫。
contains 判斷一個協議,字段或者分片包含一個值
matches 判斷一個協議或者字符串匹配一個給定的Perl表達式
「contains」操做符容許一個過濾器搜索一串字符,其形式爲字符串,或者字節,或者字節組。例如在搜索一個HTTP URL地址,可使用下面的過濾器:
http contains 「http://www.wireshark.org」;
「contains」操做符不能被用於原子型的字段,好比數字和ip地址。
「matches 「操做符容許一個過濾器使用與Perl兼容的正則表達式(PCRE)。「matches」 操做符只能應用於協議或者字符串類型的協議字段。例如:搜索一個給定的wAP WSP User-Agent,你能夠這樣寫過濾器:
wsp.user_agent matches 「(?i)cldc」
封包列表的面板中顯示,編號,時間戳,源地址,目標地址,協議,長度,以及封包信息。
你能夠看到不一樣的協議用了不一樣的顏色顯示。
這個面板是咱們最重要的,用來查看協議中的每個字段。
各行信息分別爲
Frame: 物理層的數據幀概況
Ethernet II: 數據鏈路層以太網幀頭部信息
Internet Protocol Version 4: 互聯網層IP包頭部信息
Transmission Control Protocol: 傳輸層T的數據段頭部信息,此處是TCP
Hypertext Transfer Protocol: 應用層的信息,此處是HTTP協議
從下圖能夠看到wireshark捕獲到的TCP包中的每一個字段。
看到這,
基本上對wireshak有了初步瞭解,
如今咱們看一個TCP三次握手的實例
三次握手過程爲
這圖我都看過不少遍了,
此次咱們用wireshark實際分析下三次握手的過程。
打開wireshark, 打開瀏覽器輸入 http://www.cnblogs.com/tankxiao
在wireshark中輸入http過濾,
而後選中GET /tankxiao HTTP/1.1的那條記錄,右鍵而後點擊「Follow TCP Stream」,
這樣作的目的是爲了獲得與瀏覽器打開網站相關的數據包,將獲得以下圖
圖中能夠看到wireshark截獲到了三次握手的三個數據包。第四個包纔是HTTP的,
這說明HTTP的確是使用TCP創建鏈接的。
第一次握手數據包
客戶端發送一個TCP,標誌位爲SYN,序列號爲0,
表明客戶端請求創建鏈接。
以下圖
第二次握手的數據包
服務器發回確認包, 標誌位爲 SYN,ACK. 將確認序號(Acknowledgement Number)設置爲客戶的I S N加1以.即0+1=1,
以下圖
第三次握手的數據包
客戶端再次發送確認包(ACK) SYN標誌位爲0,ACK標誌位爲1.而且把服務器發來ACK的序號字段+1,放在肯定字段中發送給對方.而且在數據段放寫ISN的+1, 以下圖:
第三次握手的數據包
客戶端再次發送確認包(ACK) SYN標誌位爲0,ACK標誌位爲1.而且把服務器發來ACK的序號字段+1,放在肯定字段中發送給對方.而且在數據段放寫ISN的+1, 以下圖:
參考了:http://www.cnblogs.com/tankxiao/archive/2012/10/10/2711777.html
(上圖中的stream index是什麼?
the stream index is an internal Wireshark mapping to: [IP address A, TCP port A, IP address B, TCP port B]
All the packets for the same tcp.stream value should have the same values for these fields (though the src/dest will be switched for A->B and B->A packets)
see the Statistics/Conversations/TCP tab in Wireshark to show a summary of these streams
http://stackoverflow.com/questions/6076897/follow-tcp-stream-where-does-field-stream-index-come-from
Statistics/Conversations/TCP
Statistics/Conversations/endpoints/tcp
能夠看到這些索引號對應的數據流
)
「Follow TCP Stream」
若是你處理TCP協議,想要查看Tcp流中的應用層數據,「Following TCP streams」功能將會頗有用。若是你項查看telnet流中的密碼,或者你想嘗試弄明白一個數據流。或者你僅僅只須要一個顯示過濾來顯示某個TCP流的包。這些均可以經過Wireshark的「Following TCP streams」功能來實現。
在包列表中選擇一個你感興趣的TCP包,而後選擇Wireshark工具欄菜單的「Following TCP Streams」選項(或者使用包列表鼠標右鍵的上下文菜單)。而後,Wireshark就會建立合適的顯示過濾器,並彈出一個對話框顯示TCP流的全部數據。
「Follow TCP Stream」對話框
流的內容出現的順序同他們在網絡中出現的順序一致。從A到B的通訊標記爲紅色,從B到A的通訊標記爲藍色。固然,若是你喜歡的話你能夠從「Edit/Preferences」菜單項的「Colores」修改顏色。
非打印字符將會被顯示爲圓點。XXX – What about line wrapping (maximum line length) and CRNL conversions?
在捕捉過程當中,TCP流不能實時更新。想獲得最近的內容須要從新打開對話框。
你能夠在此對話框執行以下操做:
你能夠用如下格式瀏覽流數據。
參考:http://blog.itpub.net/14766028/viewspace-705060
更多:http://openmaniak.com/cn/wireshark_use.php
wireshark抓包以前設置:
Interface:指定在哪一個接口(網卡)上抓包(系統會自動選擇一塊網卡)。
Limit each packet:限制每一個包的大小,缺省狀況不限制。
Capture packets in promiscuous mode:是否打開混雜模式。若是打開,抓 取全部的數據包。通常狀況下只須要監聽本機收到或者發出的包,所以應該關閉這個選項。
Filter:過濾器。只抓取知足過濾規則的包。
File:可輸入文件名稱將抓到的包寫到指定的文件中。
Use ring buffer: 是否使用循環緩衝。缺省狀況下不使用,即一直抓包。循環緩衝只有在寫文件的時候纔有效。若是使用了循環緩衝,還須要設置文件的數目,文件多大時回捲。
Update list of packets in real time:若是複選框被選中,可使每一個數據包在被截獲時就實時顯示出來,而不是在嗅探過程結束以後才顯示全部截獲的數據包。
單擊」OK」按鈕開始抓包,系統顯示出接收的不一樣數據包的統計信息,單擊」Stop」按鈕中止抓包後,所抓包的分析結果顯示在面板中,以下圖所示:
驗證網絡字節序
網絡上的數據流是字節流,對於一個多字節數值(好比十進制1014 = 0x03 f6),在進行網絡傳輸的時候,先傳遞哪一個字節,即先傳遞高位」03″仍是先傳遞低位」f6″。 也就是說,當接收端收到第一個字節的時候,它是將這個字節做爲高位仍是低位來處理。
下面經過截圖具體說明:
最下面是物理媒體上傳輸的字節流的最終形式,都是16進製表示,發送時按順序先發送00 23 54 c3 …00 03 f6 …接收時也按此順序接收字節。
選中total length:1014, 它的十六進制表示是0x03f6, 從下面的藍色選中區域能夠看到,03在前面,f6在後面,即高字節數據在低地址,低字節數據在高地址(圖中地址從上到下從左到右依次遞增),因此可知,網絡字節序採用的是大端模式。
wireshark過濾器
過濾器的區別
捕捉過濾器(CaptureFilters):用於決定將什麼樣的信息記錄在捕捉結果中。須要在開始捕捉前設置。
顯示過濾器(DisplayFilters):在捕捉結果中進行詳細查找。他們能夠在獲得捕捉結果後隨意修改。
那麼我應該使用哪種過濾器呢?
兩種過濾器的目的是不一樣的。
捕捉過濾器是數據通過的第一層過濾器,它用於控制捕捉數據的數量,以免產生過大的日誌文件。
顯示過濾器是一種更爲強大(複雜)的過濾器。它容許您在日誌文件中迅速準確地找到所須要的記錄。
兩種過濾器使用的語法是徹底不一樣的。
捕捉過濾器
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種比較運算符:
Logical expressions(邏輯運算符):
、
顯示過濾器
例子:
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包。當你發現這些不正常的包時,確定有人對你的網絡不懷好意。