Linux下的網路通訊協定分析工具-tcpdump快速入門手冊

來源:互聯網
上載者:User
Linux下的網路通訊協定分析工具-tcpdump快速入門手冊

TCPDUMP簡介

在傳統的網路分析和測試技術中,嗅探器(sniffer)是最常見,也是最重要的技術之一。sniffer工具首先是為網路系統管理員和網路程式員進行網路分析而設計的。對於網路管理員來說,使用嗅探器可以隨時掌握網路的實際情況,在網路效能急劇下降的時候,可以通過sniffer工具來分析原因,找出造成網路阻塞的來源。對於網路程式員來說,通過sniffer工具來偵錯工具。

用過windows平台上的sniffer工具(例如,netxray和sniffer pro軟體)的朋友可能都知道,在共用式的區域網路中,採用sniffer工具簡直可以對網路中的所有流量一覽無餘!Sniffer工具實際上就是一個網路上的抓包工具,同時還可以對抓到的包進行分析。由於在共用式的網路中,資訊包是會廣播到網路中所有主機的網路介面,只不過在沒有使用sniffer工具之前,主機的網路裝置會判斷該資訊包是否應該接收,這樣它就會拋棄不應該接收的資訊包,sniffer工具卻使主機的網路裝置接收所有到達的資訊包,這樣就達到了網路監聽的效果。

Linux作為網路伺服器,特別是作為路由器和網關時,資料的採集和分析是必不可少的。所以,今天我們就來看看Linux中強大的網路資料擷取分析工具——TcpDump

用簡單的話來定義tcpdump,就是:dump the traffice on a network,根據使用者的定義對網路上的資料包進行截獲的包分析工具。

作為互連網上經典的的系統管理員必備工具,tcpdump以其強大的功能,靈活的截取策略,成為每個進階的系統管理員分析網路,排查問題等所必備的東東之一。

顧名思義,TcpDump可以將網路中傳送的資料包的“頭”完全截獲下來提供分析。它支援針對網路層、協議、主機、網路或連接埠的過濾,並提供and、or、not等邏輯語句來協助你去掉無用的資訊。

tcpdump提供了原始碼,公開了介面,因此具備很強的可擴充性,對於網路維護和入侵者都是非常有用的工具。tcpdump存在於基本的FreeBSD系統中,由於它需要將網路介面設定為混雜模式,普通使用者不能正常執行,但具備root許可權的使用者可以直接執行它來擷取網路上的資訊。因此系統中存在網路分析工具主要不是對本機安全的威脅,而是對網路上的其他電腦的安全存在威脅。

普通情況下,直接啟動tcpdump將監視第一個網路介面上所有流過的資料包。
-----------------------
bash-2.02# tcpdump
tcpdump: listening on eth0
11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
0000 0000 0080 0000 1007 cf08 0900 0000
0e80 0000 902b 4695 0980 8701 0014 0002
000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
ffff 0060 0004 ffff ffff ffff ffff ffff
0452 ffff ffff 0000 e85b 6d85 4008 0002
0640 4d41 5354 4552 5f57 4542 0000 0000
0000 00
^C
------------------------

首先我們注意一下,從上面的輸出結果上可以看出來,基本上tcpdump總的的輸出格式為:系統時間 來源主機.連接埠 > 目標主機.連接埠 資料包參數

TcpDump的參數化支援

  tcpdump支援相當多的不同參數,如使用-i參數指定tcpdump監聽的網路介面,這在電腦具有多個網路介面時非常有用,使用-c參數指定要監聽的資料包數量,使用-w參數指定將監聽到的資料包寫入檔案中儲存,等等。

  然而更複雜的tcpdump參數是用於過濾目的,這是因為網路中流量很大,如果不加分辨將所有的資料包都截留下來,資料量太大,反而不容易發現需要的資料包。使用這些參數定義的過濾規則可以截留特定的資料包,以縮小目標,才能更好的分析網路中存在的問題。tcpdump使用參數指定要監視資料包的類型、地址、連接埠等,根據具體的網路問題,充分利用這些過濾規則就能達到迅速定位故障的目的。請使用man tcpdump查看這些過濾規則的具體用法。

  顯然為了安全起見,不用作網路管理用途的電腦上不應該運行這一類的網路分析軟體,為了屏蔽它們,可以屏蔽核心中的bpfilter偽裝置。一般情況下網路硬體和TCP/IP堆棧不支援接收或發送與本電腦無關的資料包,為了接收這些資料包,就必須使用網卡的混雜模式,並繞過標準的TCP/IP堆棧才行。在FreeBSD下,這就需要核心支援偽裝置bpfilter。因此,在核心中取消bpfilter支援,就能屏蔽tcpdump之類的網路分析工具。

  並且當網卡被設定為混雜模式時,系統會在控制台和記錄檔中留下記錄,提醒管理員留意這台系統是否被用作攻擊同網路的其他電腦的跳板。

  May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled

  雖然網路分析工具能將網路中傳送的資料記錄下來,但是網路中的資料流量相當大,如何對這些資料進行分析、分類統計、發現並報告錯誤卻是更關鍵的問題。網路中的資料包屬於不同的協議,而不同協議資料包的格式也不同。因此對捕獲的資料進行解碼,將包中的資訊儘可能的展示出來,對於協議分析工具來講更為重要。昂貴的商務分析工具的優勢就在於它們能支援很多種類的應用程式層協議,而不僅僅只支援tcp、udp等低層協議。

  從上面tcpdump的輸出可以看出,tcpdump對截獲的資料並沒有進行徹底解碼,資料包內的大部分內容是使用十六進位的形式直接列印輸出的。顯然這不利於分析網路故障,通常的解決辦法是先使用帶-w參數的tcpdump 截獲資料並儲存到檔案中,然後再使用其他程式進行解碼分析。當然也應該定義過濾規則,以避免捕獲的資料包填滿整個硬碟。

TCP功能

資料過濾

不帶任何參數的TcpDump將搜尋系統中所有的網路介面,並顯示它截獲的所有資料,這些資料對我們不一定全都需要,而且資料太多不利於分析。所以,我們應當先想好需要哪些資料,TcpDump提供以下參數供我們選擇資料:

-b 在資料-鏈路層上選擇協議,包括ip、arp、rarp、ipx都是這一層的。

例如:tcpdump -b arp 將只顯示網路中的arp即地址轉換協議資訊。

-i 選擇過濾的網路介面,如果是作為路由器至少有兩個網路介面,通過這個選項,就可以只過濾指定的介面上通過的資料。例如:

tcpdump -i eth0 只顯示通過eth0介面上的所有前序。

src、dst、port、host、net、ether、gateway這幾個選項又分別包含src、dst 、port、host、net、ehost等附加選項。他們用來分辨資料包的來源和去向,src host 192.168.0.1指定源主機IP地址是192.168.0.1,dst net 192.168.0.0/24指定目標是網路192.168.0.0。以此類推,host是與其指定主機相關無論它是源還是目的,net是與其指定網路相關的,ether後面跟的不是IP地址而是物理地址,而gateway則用於網關主機。可能有點複雜,看下面例子就知道了:

tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24

過濾的是源主機為192.168.0.1與目的網路為192.168.0.0的前序。

tcpdump ether src 00:50:04:BA:9B and dst……

過濾源主機物理地址為XXX的前序(為什麼ether src後面沒有host或者net?物理地址當然不可能有網路嘍)。

Tcpdump src host 192.168.0.1 and dst port not telnet

過濾源主機192.168.0.1和目的連接埠不是telnet的前序。

ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾資料報的類型。
例如:

tcpdump ip src……

只過濾資料-鏈路層上的IP前序。

tcpdump udp and src host 192.168.0.1

只過濾源主機192.168.0.1的所有udp前序。

資料顯示/輸入輸出

TcpDump提供了足夠的參數來讓我們選擇如何處理得到的資料,如下所示:

-l 可以將資料重新導向。

tcpdump -l >tcpcap.txt將得到的資料存入tcpcap.txt檔案中。

-n 不進行IP地址到主機名稱的轉換。

如果不使用這一項,當系統中存在某一主機的主機名稱時,TcpDump會把IP地址轉換為主機名稱顯示,就像這樣:eth0 < ntc9.1165> router.domain.net.telnet,使用-n後變成了:eth0 < 192.168.0.9.1165 > 192.168.0.1.telnet。

-nn 不進行連接埠名稱的轉換。

上面這條資訊使用-nn後就變成了:eth0 < ntc9.1165 > router.domain.net.23。

-N 不列印出預設的網域名稱。

還是這條資訊-N 後就是:eth0 < ntc9.1165 > router.telnet。

-O 不進行符合代碼的最佳化。
-t 不列印UNIX時間戳記,也就是不顯示時間。
-tt 列印原始的、未格式化過的時間。
-v 詳細的輸出,也就比普通的多了個TTL和服務類型。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.