1、前言
黑客帝國系列片 大家都看過了,知道網(wǎng)絡(luò)黑客尼奧發(fā)現(xiàn)看似正常的現(xiàn)實(shí)世界實(shí)際上是由一個名為 “矩陣” 的計算機(jī)人工智能系統(tǒng)控制的,然后尼奧見到了黑客組織的首領(lǐng)墨菲斯,三人走上了抗?fàn)幘仃囌魍镜墓适?。 那么黑客都是些什么人了? 黑客如今在互聯(lián)網(wǎng)上已經(jīng)不再是鮮為人知的人物,他們已經(jīng)發(fā)展成網(wǎng)絡(luò)上的一個獨(dú)特的群體。他們有著與常人不同的理想和追求,有著自己獨(dú)特的行為模式,網(wǎng)絡(luò)上出現(xiàn)了很多由一些志同道合的人組織起來的黑客組織。 在[信息安全]里,“黑客” 指研究智取計算機(jī)安全系統(tǒng)的人員。利用公共通訊網(wǎng)路,如互聯(lián)網(wǎng)和電話系統(tǒng),在未經(jīng)許可的情況下,載入對方系統(tǒng)的被稱為黑帽黑客(英文:black hat,另稱 cracker);調(diào)試和分析計算機(jī)安全系統(tǒng)的白帽黑客(英語:white hat)。“黑客” 一詞最早用來稱呼研究盜用電話系統(tǒng)的人士。 他們有個共同點(diǎn)都是利用公共通訊網(wǎng)路,進(jìn)行著不同的活動。 而今天我們的主角也是針對網(wǎng)絡(luò)進(jìn)行[數(shù)據(jù)采集]與分析的工具,它就是TCPDump。 老樣子,我們本文主要介紹了 LinuxTCPDump 命令使用詳解,文中會通過非常詳細(xì)的示例代碼介紹,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨我來一起學(xué)習(xí)!
2、[TCPDump] 介紹
Linux 作為網(wǎng)絡(luò)服務(wù)器,特別是作為路由器和網(wǎng)關(guān)時,數(shù)據(jù)的采集和分析是不可少的。 Tcpdump 是一個用于截取網(wǎng)絡(luò)分組,并輸出分組內(nèi)容的工具。 tcpdump 憑借強(qiáng)大的功能和靈活的截取策略,使其成為類 UNIX 系統(tǒng)下用于網(wǎng)絡(luò)分析和問題排查的首選工具。
1.tcpdump 可以將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包的 “頭” 完全截獲下來提供分析。
它支持針對網(wǎng)絡(luò)層、協(xié)議、主機(jī)、網(wǎng)絡(luò)或端口的過濾,并提供 and、or、not 等邏輯語句來幫助你去掉無用的信息。
2. 同時 tcpdump 提供了源代碼,公開了接口,因此具備很強(qiáng)的可擴(kuò)展性。
基本上 tcpdump 的總的輸出格式為:系統(tǒng)時間 來源主機(jī). 端口 > 目標(biāo)主機(jī). 端口 數(shù)據(jù)包參數(shù) 2.1、問題來了:所有用戶都可以采用該命令嗎? 雖然 tcpdump 提供源代碼,公開了接口,具備很強(qiáng)的可擴(kuò)展性,對于網(wǎng)絡(luò)維護(hù)和入侵者都是非常有用的工具。 但 tcpdump普通用戶不能正常執(zhí)行,需要具備 root 權(quán)限的用戶才可以直接執(zhí)行它來獲取網(wǎng)絡(luò)上的信息。 2.2、抓包原理 linux 抓包是通過注冊一種虛擬的底層網(wǎng)絡(luò)協(xié)議來完成對網(wǎng)絡(luò)報文(準(zhǔn)確的是網(wǎng)絡(luò)設(shè)備)消息的處理權(quán)。 當(dāng)網(wǎng)卡接收到一個網(wǎng)絡(luò)報文之后,它會遍歷系統(tǒng)中所有已經(jīng)注冊的網(wǎng)絡(luò)協(xié)議,如以太網(wǎng)協(xié)議、x25 協(xié)議處理模塊來嘗試進(jìn)行報文的解析處理。 當(dāng)抓包模塊把自己偽裝成一個網(wǎng)絡(luò)協(xié)議的時候,系統(tǒng)在收到報文的時候就會給這個偽協(xié)議一次機(jī)會,讓它對網(wǎng)卡收到的保溫進(jìn)行一次處理,此時該模塊就會趁機(jī)對報文進(jìn)行窺探,也就是啊這個報文完完整整的復(fù)制一份,假裝是自己接收的報文,匯報給抓包模塊。
2.3、特點(diǎn)
2.3.1.參數(shù)化支持
1. 參數(shù) tcpdump 支持相當(dāng)多的不同參數(shù)。 如使用 - i 參數(shù)指定 tcpdump 監(jiān)聽的網(wǎng)絡(luò)接口, 使用 - c 參數(shù)指定要監(jiān)聽的數(shù)據(jù)包數(shù)量, 使用 - w 參數(shù)指定將監(jiān)聽到的數(shù)據(jù)包寫入文件中保存等。 2. 安全 一般情況下網(wǎng)絡(luò)硬件和 TCP/IP 堆棧不支持接收或發(fā)送與本計算機(jī)無關(guān)的數(shù)據(jù)包,為了接收這些數(shù)據(jù)包,就必須使用網(wǎng)卡的混雜模式,并繞過標(biāo)準(zhǔn)的 TCP/IP 堆棧才行。 在 FreeBSD 下,這就需要內(nèi)核支持偽設(shè)備 bpfilter。因此,在內(nèi)核中取消 bpfilter 支持,就能屏蔽 tcpdump 之類的網(wǎng)絡(luò)分析工具。 并且當(dāng)網(wǎng)卡被設(shè)置為混雜模式時,系統(tǒng)會在控制臺和日志文件中留下記錄,提醒管理員留意這臺系統(tǒng)是否被用作攻擊同網(wǎng)絡(luò)的其他計算機(jī)的跳板。 3. 解碼 tcpdump 對截獲的數(shù)據(jù)并沒有進(jìn)行徹底解碼,數(shù)據(jù)包內(nèi)的大部分內(nèi)容是使用十六進(jìn)制的形式直接打印輸出的。顯然這不利于分析網(wǎng)絡(luò)故障,通常的解決辦法是先使用帶 - w 參數(shù)的 tcpdump 截獲數(shù)據(jù)并保存到文件中,然后再使用其他程序進(jìn)行解碼分析。當(dāng)然也應(yīng)該定義過濾規(guī)則,以避免捕獲的數(shù)據(jù)包填滿整個硬盤。
2.2.2.TCP 功能
tcpDump 將搜索系統(tǒng)中第一個網(wǎng)絡(luò)接口,并顯示它截獲的所有數(shù)據(jù),這些數(shù)據(jù)對我們不一定全都需要, 數(shù)據(jù)太多不利于分析。所以,我們應(yīng)當(dāng)先想好需要哪些數(shù)據(jù),TcpDump 提供了很多參數(shù)供我們選擇數(shù)據(jù)過濾。
3.服務(wù)器安裝 Tcpdump
3.1、安裝 一般情況下 Linux 系統(tǒng)會自帶 tcpdump 工具,如果系統(tǒng)沒有安裝,直接用命令安裝就行了。 在 linux 服務(wù)器上我們使用?yum install -y tcpdump?命令來安裝 tcpdump 工具。 3.2、檢查安裝是否正常。 查看安裝版本命令:tcpdump --help
4.tcpdump 命令
4.1.常用功能選項(xiàng) tcpdump [-adeflnNOpqStvx][-c 數(shù)據(jù)包數(shù)量 >][-dd][-ddd][-F < 表達(dá)文件 >][-i < 網(wǎng)絡(luò)界面 >][-r < 數(shù)據(jù)包文件 >][-s < 數(shù)據(jù)包大小 >][-tt][-T < 數(shù)據(jù)包類型 >][-vv][-w < 數(shù)據(jù)包文件 >][輸出數(shù)據(jù)欄位] 參數(shù)說明:
-a 嘗試將網(wǎng)絡(luò)和廣播地址轉(zhuǎn)換成名稱。
-c <數(shù)據(jù)包數(shù)目> 收到指定的數(shù)據(jù)包數(shù)目后,就停止進(jìn)行傾倒操作。
-d 把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成可閱讀的格式,并傾倒到標(biāo)準(zhǔn)輸出。
-dd 把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成 C 語言的格式,并傾倒到標(biāo)準(zhǔn)輸出。
-ddd 把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成十進(jìn)制數(shù)字的格式,并傾倒到標(biāo)準(zhǔn)輸出。
-e 在每列傾倒資料上顯示連接層級的文件頭。
-f 用數(shù)字顯示網(wǎng)際網(wǎng)絡(luò)地址。
-F <表達(dá)文件> 指定內(nèi)含表達(dá)方式的文件。
-i <網(wǎng)絡(luò)界面> 使用指定的網(wǎng)絡(luò)截面送出數(shù)據(jù)包。
-l 使用標(biāo)準(zhǔn)輸出列的緩沖區(qū)。
-n 不把主機(jī)的網(wǎng)絡(luò)地址轉(zhuǎn)換成名字。
-N 不列出域名。
-O 不將數(shù)據(jù)包編碼最佳化。
-p 不讓網(wǎng)絡(luò)界面進(jìn)入混雜模式。
-q 快速輸出,僅列出少數(shù)的傳輸協(xié)議信息。
-r <數(shù)據(jù)包文件> 從指定的文件讀取數(shù)據(jù)包數(shù)據(jù)。
-s <數(shù)據(jù)包大小> 設(shè)置每個數(shù)據(jù)包的大小。
-S 用絕對而非相對數(shù)值列出 TCP 關(guān)聯(lián)數(shù)。
-t 在每列傾倒資料上不顯示時間戳記。
-tt 在每列傾倒資料上顯示未經(jīng)格式化的時間戳記。
-T <數(shù)據(jù)包類型> 強(qiáng)制將表達(dá)方式所指定的數(shù)據(jù)包轉(zhuǎn)譯成設(shè)置的數(shù)據(jù)包類型。
-v 詳細(xì)顯示指令執(zhí)行過程。
-vv 更詳細(xì)顯示指令執(zhí)行過程。
-x 用十六進(jìn)制字碼列出數(shù)據(jù)包資料。
-w <數(shù)據(jù)包文件> 把數(shù)據(jù)包數(shù)據(jù)寫入指定的文件。 ?
4.2、輸出內(nèi)容 基本上 tcpdump 總的的輸出格式為:系統(tǒng)時間 來源主機(jī). 端口 > 目標(biāo)主機(jī). 端口 數(shù)據(jù)包參數(shù)
5、實(shí)操
5.1、常見用法 1. 查看網(wǎng)卡命令:ifconfig 知道了網(wǎng)卡,就可以使用 tcpdump 工具針對服務(wù)器上的網(wǎng)卡進(jìn)行監(jiān)控、過濾網(wǎng)絡(luò)數(shù)據(jù)了。
2. 查看本地網(wǎng)卡狀態(tài)
Iface:存在的網(wǎng)卡。 MTU:最大傳輸單元。 RX-OK RX-ERR RX-DRP RX-OVR:正確接收數(shù)據(jù)報的數(shù)量以及發(fā)生錯誤、流式、碰撞的總數(shù)。TX-OK TX-ERR TX-DRP TX-OVR:正確發(fā)送數(shù)據(jù)報的數(shù)量以及發(fā)生錯誤、流式、碰撞的總數(shù)。 3. 指定網(wǎng)卡 普通情況下,直接啟動 tcpdump 將監(jiān)視第一個網(wǎng)絡(luò)端口所有流過的數(shù)據(jù)包。?如果不指定網(wǎng)卡,默認(rèn) tcpdump 只會監(jiān)視第一個網(wǎng)絡(luò)接口。 tcpdump -i ens33(網(wǎng)卡名)
4. 監(jiān)視所有進(jìn)入或離開主機(jī) xps 的數(shù)據(jù)包。xps 為主機(jī)名。
tcpdump?host?xps 5. 監(jiān)視指定 ip,截獲指定主機(jī)收到和發(fā)出的所有數(shù)據(jù)包。
tcpdump?host?192.168.1.5? 6.截獲主機(jī) 192.168.1.5 和 192.168.1.10 或 192.168.1.113 的通信包
tcpdump?host?192.168.1.5?and?(192.168.1.10?or?192.168.1.13)?? 7.打印 xps 與任何其他主機(jī)之間通信的 IP 數(shù)據(jù)包,但不包括與 xps1 之間的通信包
tcpdump?ip?host?xps?and?not?xps1?? 8.截獲主機(jī) 192.168.1.5 除了和 192.168.1.13 之外所有的主機(jī)通信的 ip 包
tcpdump?ip?host?192.168.1.5?and?!?192.168.1.13?? 9.截獲主機(jī) hostname 發(fā)送的所有數(shù)據(jù)
tcpdump?-i?ens33?src?host?hostname?? 10.截獲送到主機(jī) hostname 的所有數(shù)據(jù)
tcpdump?-i?ens33?dst?host?hostname 5.2、監(jiān)聽指定域名 TCP 協(xié)議數(shù)據(jù)包
步驟一、開始監(jiān)聽指定域名的 ip 包流量:
tcpdump host baidu.com。??
步驟二、打開瀏覽器、訪問 baidu.com
此時、命令行下可以看到客戶端和 baidu 服務(wù)之間的 TCP 協(xié)議 IP 包、學(xué)習(xí)網(wǎng)絡(luò)協(xié)議的時候、配合使用很方便。
2、監(jiān)聽來自指定域名的 TCP 協(xié)議包數(shù)據(jù)包:
步驟一、開始監(jiān)聽指定域名的 ip 包流量:
tcpdump src host baidu.com。??
步驟二、打開瀏覽器、訪問 baidu.com
此時、命令行下可以看到客戶端和 baidu 服務(wù)之間的 TCP 協(xié)議 IP 包、學(xué)習(xí)網(wǎng)絡(luò)協(xié)議的時候、配合使用很方便。
3、監(jiān)聽發(fā)送到指定域名的 TCP 協(xié)議包數(shù)據(jù)包:
步驟一、開始監(jiān)聽指定域名的 ip 包流量:
tcpdump dst host baidu.com。??
步驟二、打開瀏覽器、訪問 baidu.com
此時、命令行下可以看到客戶端和 baidu 服務(wù)之間的 TCP 協(xié)議 IP 包、學(xué)習(xí)網(wǎng)絡(luò)協(xié)議的時候、配合使用很方便。
4、監(jiān)聽指定端口的 tcp 包: 步驟一、開始監(jiān)聽:
tcpdump tcp port 80。??
步驟二、打開另外一個終端、使用 nc 192.168.10.188 80 命令訪問 80 端口。
此時、tcpdump 監(jiān)聽終端下可以看到請求和返回的 ip 包。同理、如果要監(jiān)聽 udp 包可以用:tcpdump udp port 9999 5.3、tcpdump 與 Wireshark 我們可以把二者進(jìn)行結(jié)合,在 Linux 中抓包,在 windows 中分析包。
tcpdump tcp -i ens33 -t -s 0?-c 5 and dst port !22 and src net 192.168.1.10/24 -w ./targetfile.cap
1.tcp: ip icmp arp rarp 和 tcp、udp、icmp 這些選項(xiàng)等都要放到第一個參數(shù)的位置,用來過濾數(shù)據(jù)報的類型;
2.-i eth1 : 只抓取經(jīng)過 ens33 的數(shù)據(jù)包
3.-t: 不顯示時間戳
4.-s 0 : 抓取數(shù)據(jù)包時默認(rèn)抓取長度為 68 字節(jié),加上 - S 0 后可以抓取完整的數(shù)據(jù)包
5.-c 5: 只抓取 5 個數(shù)據(jù)包
6.dst port ! 22 : 不抓取目標(biāo)端口為 22 的數(shù)據(jù)包
7.src net 192.168.1.10/24: 數(shù)據(jù)包的源網(wǎng)絡(luò)地址是 192.168.1.10/24
8.-w ./targetfile.cap: 保存為 cap 文件,方便用 ethereal(wireshark) 分析。
6、結(jié)語
tcpdump 針對網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)采集與分析, 同時保存到指定文件,用 wireshark 來打開查看??梢钥焖俨榭捶暇W(wǎng)絡(luò)接口符合某一條件的抓包,方便我們確定網(wǎng)絡(luò)問題。
編輯:黃飛
?
評論
查看更多