巧妙的使用 tcpdump 查看原始數(shù)據(jù)包
使用 'tcpdump' 查看原始數(shù)據(jù)包
雖然像 Snort 這樣的工具在篩選通過我們網(wǎng)絡(luò)的所有內(nèi)容方面做得非常出色,但有時需要查看原始數(shù)據(jù)。為此,我們最好的工具是“tcpdump”。
使用 tcpdump 最基本的方法是簡單地發(fā)出命令:
- 您可以使用 -v 選項(xiàng)獲得更多詳細(xì)信息,使用 -vv 可以獲得更多信息。
有用的選項(xiàng)
假設(shè)您已登錄到您管理的遠(yuǎn)程計(jì)算機(jī)。通常,您將使用 SSH。如果您在沒有任何選項(xiàng)的情況下運(yùn)行“tcpdump”,則輸出將被來自您的 SSH 連接的數(shù)據(jù)包淹沒。為避免這種情況,只需從輸出中刪除端口 22:
您可以使用許多不同的端口來執(zhí)行此操作:
代碼:
- tcpdump not port 143 and not port 25 and not port 22
如果你想做相反的事情,即只監(jiān)視某個端口——這對調(diào)試網(wǎng)絡(luò)應(yīng)用程序很有好處——你可以執(zhí)行以下操作:
您還可以從網(wǎng)絡(luò)上的特定主機(jī)獲取數(shù)據(jù):
如果您的機(jī)器有多個網(wǎng)絡(luò)接口,您還可以指定要收聽的一個:
您還可以指定協(xié)議:
- 您將在 /etc/protocols 中找到協(xié)議列表。
為以后保存輸出
在某些情況下,您可能希望將輸出重定向到一個文件,以便以后可以詳細(xì)研究它或使用其他程序來解析輸出。在以下示例中,您仍然可以在將輸出保存到文件時查看輸出:
代碼:
- tcpdump -l | tee tcpdump_`date +%Y%m%e-%k.%M`
在上面的示例中,我們可以使用日期和時間來識別每個轉(zhuǎn)儲。在處理一天中某些時間出現(xiàn)的問題時,這可能會派上用場。
tcpdump 還可以選擇將其輸出轉(zhuǎn)儲為二進(jìn)制格式,以便以后讀取。創(chuàng)建二進(jìn)制文件:
代碼:
- tcpdump -w tcpdump_raw_`date +%Y%m%e-%k.%M`
稍后,您可以使用 tcpdump 讀取文件
代碼:
- tcpdump -r tcpdump_raw_YYYMMDD-H.M
您還可以使用 ethereal 程序打開原始轉(zhuǎn)儲并對其進(jìn)行解釋。我們將在下一節(jié)中更多地討論空靈。
要查找的內(nèi)容
tcpdump 為我們提供了有關(guān)進(jìn)出我們網(wǎng)絡(luò)的所有數(shù)據(jù)包的信息。但這一切意味著什么?
將 Ethereal 與 tcpdump 結(jié)合使用 Ethereal
是一個也可用于捕獲網(wǎng)絡(luò)數(shù)據(jù)包的工具。安裝后,您可以打開您制作的原始轉(zhuǎn)儲文件。它看起來像這樣:
這使得查看正在發(fā)生的事情變得相當(dāng)容易。您可以看到源 IP 和目標(biāo) IP 是什么以及它是什么類型的數(shù)據(jù)包。然后很容易解決您可能遇到的網(wǎng)絡(luò)問題并分析可疑行為。順便說一句,當(dāng)我在寫這節(jié)課并解釋我自己的轉(zhuǎn)儲時,我在我的個人工作站上看到了一些奇怪的活動。幾乎每隔一段時間,我就會在世界上不同 IP 的機(jī)器上查詢端口 32772。我為端口 32772 運(yùn)行了一個特定的轉(zhuǎn)儲,如下所示:
代碼:
- tcpdump port 32772 -w dump_32772
我得到的確實(shí)看起來很奇怪。即使在谷歌搜索之后,我也找不到任何相關(guān)信息,所以我懷疑我可能有木馬。我運(yùn)行了“rootkit hunter”(下一節(jié)將詳細(xì)介紹),但結(jié)果卻一無所獲。最后,一一關(guān)機(jī),原來是我一直打開的Skype。盡管這被證明是無害的,但我很高興我有 tcpdump 向我指出這一點(diǎn)。
讀取原始輸出
如您所見,即使從 tcpdump 讀取所謂的“人類可讀”輸出也可能有點(diǎn)神秘??纯聪旅娴睦?,一個我剛剛從轉(zhuǎn)儲中撈出的隨機(jī)數(shù)據(jù)包:
代碼:
- 17:26:22.924493 IP www.linux.org.www > test.linux.org.34365: P 2845:3739(894) ack 1624 win 9648
我們擁有的是對www.linux.org的網(wǎng)絡(luò)服務(wù)器請求. 在時間戳之后,您會注意到主機(jī)名末尾的 .www(表示端口 80)。這將被發(fā)送到請求主機(jī) test.linux.org 的端口 34365。'P' 代表 TCP “oush” 功能。這意味著應(yīng)該立即發(fā)送數(shù)據(jù)。在后面的數(shù)字中,2845:3739(894),2845 標(biāo)記了第一個數(shù)據(jù)包的八位字節(jié)數(shù)。數(shù)字 3739 是數(shù)據(jù)包發(fā)送的最后一個字節(jié)的編號加 1。數(shù)字 894 是發(fā)送的數(shù)據(jù)包的長度。上面寫著:“ack 1624”的部分是“acknowledge”的 TCP 術(shù)語——即數(shù)據(jù)包已被接受,接下來預(yù)期的數(shù)據(jù)包號是 1624。之后,我們看到“win 9648”發(fā)送主機(jī)等待窗口大小為 9648 個八位字節(jié)的數(shù)據(jù)包。這后面是時間戳。
現(xiàn)在,如果您認(rèn)為這有點(diǎn)難以解釋,如果您使用 -x 選項(xiàng),它將在十六進(jìn)制輸出中包含數(shù)據(jù)包內(nèi)容。在這里,您需要埃及學(xué)家來解釋輸出:
代碼:
- 18:12:45.149977 IP www.linux.org.www > test.linux.org.34536: . 1:1449(1448)
- ack 487 win 6432 <nop,nop,timestamp 329284215 27156244>
- 0x0000: 4500 05dc 6a81 4000 4006 493b c0a8 0006 E...j.@.@.I;....
- 0x0010: c0a8 0009 0050 86e8 8fa4 1d47 1c33 e3af .....P.....G.3..
- 0x0020: 8010 1920 b4d9 0000 0101 080a 13a0 7a77 ..............zw
- 0x0030: 019e 5f14 4854 5450 2f31 2e31 2032 3030 .._.HTTP/1.1.200
- 0x0040: 204f 4b0d 0a44 6174 653a 2054 6875 2c20 .OK..Date:.Thu,.
- 0x0050: 3135
我們可以從輸出中收集到,這是一個 HTTP 請求。至于其余的,它不是人類可讀的,但我們很容易知道這是一個合法的數(shù)據(jù)包。使用這種格式的另一個好處是,即使我們不能準(zhǔn)確地解釋這個數(shù)據(jù)包發(fā)生了什么,我們也可以將它發(fā)送給可能能夠理解的人。最后,這是未經(jīng)任何過濾就通過網(wǎng)絡(luò)傳輸?shù)脑紨?shù)據(jù)。