使用tcpdump查看原始數據包

儘管Snort之類的工具在篩選經過咱們的網絡而來的全部內容方面作得很是出色,但有時必需要查看原始數據。爲此,咱們最好的工具是「 tcpdump」。linux

使用tcpdump的最基本方法是簡單地發出如下命令:服務器

tcpdump

您可使用-v選項得到更多詳細信息,而-vv能夠獲取更多信息。網絡

有用的選項tcp

假設您已登陸到要管理的遠程計算機。若是您不帶任何選項運行「 tcpdump」,則輸出將被來自您的SSH鏈接的數據包淹沒。爲避免這種狀況,只需從輸出中消除端口22:工具

tcpdump not port 22

您可使用許多不一樣的端口來執行此操做:.net

tcpdump not port 143 and not port 25 and not port 22

若是要進行相反的操做,即僅監視某個端口(這對於調試網絡應用程序很是有用),則能夠執行如下操做:調試

tcpdump port 143

您還能夠從網絡上的特定主機獲取數據:code

tcpdump host hal9000

若是您的計算機具備多個網絡接口,則還能夠指定要收聽的網絡接口:blog

tcpdump -i eth1

您還能夠指定協議:教程

tcpdump udp

您能夠在/ etc / protocols中找到協議列表。

保存輸出以備後用

在某些狀況下,您可能但願將輸出重定向到文件,以便之後能夠詳細研究它或使用其餘程序來解析輸出。在如下示例中,您仍然能夠在將輸出保存到文件時觀看輸出:

tcpdump -l | tee tcpdump_`date +%Y%m%e-%k.%M`

在上面的示例中,咱們可使用日期和時間來標識每一個轉儲。在處理一天中特定時間出現的問題時,這可能會派上用場。

tcpdump還能夠選擇將其輸出轉儲爲二進制格式,以便之後讀取。要建立一個二進制文件:

tcpdump -w tcpdump_raw_`date +%Y%m%e-%k.%M`

稍後,您可讓tcpdump使用如下命令讀取文件

tcpdump -r tcpdump_raw_YYYMMDD-H.M

您也可使用ethereal程序打開原始轉儲並解釋它。

tcpdump爲咱們提供了有關往返於網絡的全部數據包的信息。

將Ethereal與tcpdump一塊兒使用Ethereal

Ethereal是一種也能夠用來捕獲網絡數據包的工具。安裝後,您能夠打開您製做的原始轉儲文件。

查看正在發生的事情變得至關容易。您能夠看到源IP和目標IP以及它是什麼類型的數據包。這很容易,而後便可對您可能遇到的網絡問題進行故障排除並分析可疑行爲。只是爲了增長一則軼事,當我編寫本課並解釋本身的轉儲時,我在我的工做站上看到了一些奇怪的活動。我幾乎每隔固定時間就查詢世界上不一樣IP的機器上的端口32772。我爲端口32772運行了一個特定的轉儲,以下所示:

tcpdump port 32772 -w dump_32772

讀取原始輸出

如您所見,即便從tcpdump讀取所謂的「人類可讀」輸出也可能有點神祕。看下面的示例,我只是從轉儲中選出一個隨機數據包:

17:26:22.924493 IP www.linux.org.www > test.linux.org.34365: P 2845:3739(894) ack 1624 win 9648 <nop,nop,timestamp 326501459 24374272>

咱們所擁有的是對https://www.linux.org/的Web服務器請求。時間戳記事後,您會在主機名(即端口80)的末尾註意到.www。這將被髮送到發出請求的主機test.linux.org的端口34365。「 P」表明TCP「 oush」功能。這意味着應該當即發送數據。在2845:3739(894)以後的數字中,2845標記第一個數據包的八位位組的編號。數字3739是數據包發送的最後一個字節的數字加1。數字894是發送的數據包的長度。表示「 ack 1624」的部分是「 acknowledge」的TCP術語-表示該數據包已被接受,下一個預期的數據包編號爲1624。以後,咱們看到「 win 9648」發送主機正在等待窗口大小爲9648個八位位組的數據包。這以後是時間戳。

如今,若是您認爲難以解釋,則使用-x選項,它將在十六進制輸出中包含數據包內容。

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請求。至於其他的,它不是人類可讀的,可是咱們很容易知道這是一個合法的數據包。使用這種格式的另外一個好處是,即便咱們沒法徹底解釋此數據包的情況,也能夠將其發送給可能的人。最終,這是未經任何過濾經過網絡傳輸的原始數據。

以上就是良許教程網爲各位朋友分享的使用tcpdump查看原始數據包。想要了解更多Linux相關知識記得關注公衆號「良許Linux」,或掃描下方二維碼進行關注,更多幹貨等着你!
公衆號儘管Snort之類的工具在篩選經過咱們的網絡而來的全部內容方面作得很是出色,但有時必需要查看原始數據。爲此,咱們最好的工具是「 tcpdump」。

使用tcpdump的最基本方法是簡單地發出如下命令:

tcpdump

您可使用-v選項得到更多詳細信息,而-vv能夠獲取更多信息。

有用的選項

假設您已登陸到要管理的遠程計算機。若是您不帶任何選項運行「 tcpdump」,則輸出將被來自您的SSH鏈接的數據包淹沒。爲避免這種狀況,只需從輸出中消除端口22:

tcpdump not port 22

您可使用許多不一樣的端口來執行此操做:

tcpdump not port 143 and not port 25 and not port 22

若是要進行相反的操做,即僅監視某個端口(這對於調試網絡應用程序很是有用),則能夠執行如下操做:

tcpdump port 143

您還能夠從網絡上的特定主機獲取數據:

tcpdump host hal9000

若是您的計算機具備多個網絡接口,則還能夠指定要收聽的網絡接口:

tcpdump -i eth1

您還能夠指定協議:

tcpdump udp

您能夠在/ etc / protocols中找到協議列表。

保存輸出以備後用

在某些狀況下,您可能但願將輸出重定向到文件,以便之後能夠詳細研究它或使用其餘程序來解析輸出。在如下示例中,您仍然能夠在將輸出保存到文件時觀看輸出:

tcpdump -l | tee tcpdump_`date +%Y%m%e-%k.%M`

在上面的示例中,咱們可使用日期和時間來標識每一個轉儲。在處理一天中特定時間出現的問題時,這可能會派上用場。

tcpdump還能夠選擇將其輸出轉儲爲二進制格式,以便之後讀取。要建立一個二進制文件:

tcpdump -w tcpdump_raw_`date +%Y%m%e-%k.%M`

稍後,您可讓tcpdump使用如下命令讀取文件

tcpdump -r tcpdump_raw_YYYMMDD-H.M

您也可使用ethereal程序打開原始轉儲並解釋它。

tcpdump爲咱們提供了有關往返於網絡的全部數據包的信息。

將Ethereal與tcpdump一塊兒使用Ethereal

Ethereal是一種也能夠用來捕獲網絡數據包的工具。安裝後,您能夠打開您製做的原始轉儲文件。

查看正在發生的事情變得至關容易。您能夠看到源IP和目標IP以及它是什麼類型的數據包。這很容易,而後便可對您可能遇到的網絡問題進行故障排除並分析可疑行爲。只是爲了增長一則軼事,當我編寫本課並解釋本身的轉儲時,我在我的工做站上看到了一些奇怪的活動。我幾乎每隔固定時間就查詢世界上不一樣IP的機器上的端口32772。我爲端口32772運行了一個特定的轉儲,以下所示:

tcpdump port 32772 -w dump_32772

讀取原始輸出

如您所見,即便從tcpdump讀取所謂的「人類可讀」輸出也可能有點神祕。看下面的示例,我只是從轉儲中選出一個隨機數據包:

17:26:22.924493 IP www.linux.org.www > test.linux.org.34365: P 2845:3739(894) ack 1624 win 9648 <nop,nop,timestamp 326501459 24374272>

咱們所擁有的是對https://www.linux.org/的Web服務器請求。時間戳記事後,您會在主機名(即端口80)的末尾註意到.www。這將被髮送到發出請求的主機test.linux.org的端口34365。「 P」表明TCP「 oush」功能。這意味着應該當即發送數據。在2845:3739(894)以後的數字中,2845標記第一個數據包的八位位組的編號。數字3739是數據包發送的最後一個字節的數字加1。數字894是發送的數據包的長度。表示「 ack 1624」的部分是「 acknowledge」的TCP術語-表示該數據包已被接受,下一個預期的數據包編號爲1624。以後,咱們看到「 win 9648」發送主機正在等待窗口大小爲9648個八位位組的數據包。這以後是時間戳。

如今,若是您認爲難以解釋,則使用-x選項,它將在十六進制輸出中包含數據包內容。

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請求。至於其他的,它不是人類可讀的,可是咱們很容易知道這是一個合法的數據包。使用這種格式的另外一個好處是,即便咱們沒法徹底解釋此數據包的情況,也能夠將其發送給可能的人。最終,這是未經任何過濾經過網絡傳輸的原始數據。

以上就是良許教程網爲各位朋友分享的使用tcpdump查看原始數據包。

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索