會了這個命令,別人都會高看你一眼

640?wx_fmt=png

前言

說到這個tcpdump命令,就不得不提自己參加的中國移動內蒙古分公司第三代CRM系統的開發與實施。如果沒有記錯的話,那應該是2016年,自己單獨負責整個10086客服系統自助渠道的整體改造工作;在系統壓測階段,調用接口平臺時,總是出現超時現象。後來這個問題越來越嚴重,同時短廳渠道、CBOSS渠道也反饋有這個問題,這時這個問題就引起了大BOSS的注意,然後就是各方專家會診。在這種大型項目中,專家會診,都有一個特色,就是專家指揮,小弟幹活,而我那個時候,就是那個小弟。

好吧,專家發話了,抓包先。這就開始了我的抓包工作,開始了我對tcpdump的全面理解。

首先需要說的是,這個tcpdump是一個非常功能強大的命令,功能強大,那也就意味着這個命令的使用是非常複雜的,也就是說,我接下來整理的內容也會是非常多的。如果你想去掌握整個tcpdump命令的話,就需要你稍微有點耐心去把整篇文章讀完。OK,Let's go!

命令簡介

tcpdump是一款強大的網絡抓包工具,運行在Linux平臺上。熟悉tcpdump的使用能夠幫助我們分析、調試網絡數據。但是要想很好地掌握tcpdump, 就必須對網絡報文(TCP/IP協議)有一定的瞭解。不過對於簡單的使用來說,只要有網絡基礎概念就行了。

作爲互聯網上經典的的系統管理員必備工具,tcpdump以其強大的功能,靈活的截取策略,成爲每個高級的系統管理員分析網絡,排查問題等所必備的工具之一。在實際工作中,需要以root權限去執行該命令。

tcpdump是一個很複雜的命令,想了解它的方方面面非常不易,也不值得推薦,能夠使用它解決日常工作中的問題纔是關鍵,所以,以下的總結我將更側重於從實際工作出發,整理一些實際工作中經常用到的用法,對於一些冷門用法,我這裏基本不會涉及,如果日後在工作中用到了,我這裏也會更新進來。

命令詳解

下面就先對tcpdump一些常用的選項進行總結。

  • -s numbertcpdump默認只會截取前96字節的內容,要想截取所有的報文內容,就需要使用這個選項,其中number是需要截取的報文字節數,如果是0的話,表示截取報文全部內容;

  • -nn:表示不解析域名,直接顯示IP,在netstat命令中,也有這個選項;

  • -X:同時使用hex和ascii顯示報文內容;

  • -S:顯示絕對的序列號(sequence number),而不是相對編號;

  • -i:指定監聽的網卡,如果爲-i any則表示監聽所有的網卡;

  • -v,-vv,-vvv:顯示更多的詳細信息;

  • -c number:表示截取number個報文,然後結束;

  • -w:將監聽到的數據包寫入文件中保存,而並不分析和打印出來;

  • -A:只使用ascii打印報文的全部數據,不要和-X選項一起使用。截取HTTP請求的時候可以用sudo tcpdump -nSA port 80

雖然tcpdump命令的選項特別多,但是常用的選項也就上面那幾個,我這裏將更多的把注意力放在使用實例上,通過使用實例來學習tcpdump這個命令。

過濾器

先進行使用實例詳解時,有必要先掌握tcpdump一些基本的使用理論知識,先來說說過濾器。

在服務器上的網絡報文是異常的多,很多時候我們只關注和具體問題有關的數據報文,而這些有用的報文只佔到很小的一部分,爲了不讓我們在報文的海洋裏迷失自己,我們就非常有必要學習一下tcpdump提供的靈活而且功能強大的過濾器。

過濾器也可以簡單地分爲三類:typedirproto

  • type:主要用來區分過濾報文源類型,主要由host主機報文,net網段報文和port指定端口的報文組成;

  • dir:只過濾報文的源地址和目的地址,主要包括src源地址和dst目的地址;

  • proto:只過濾報文的協議類型,支持tcpudpicmp等;使用的時候可以省略proto關鍵字:

    • tcpdump -i eth1 arp

    • tcpdump -i eth1 ip

    • tcpdump -i eth1 tcp

    • tcpdump -i eth1 udp

    • tcpdump -i eth1 icmp

在我們使用tcpdump命令時是離不開這些過濾器的。

條件組合

在茫茫網絡中,想要找到那個你想要的網絡包,還是有一定難度的。爲了抓住那個我們想要的網絡包,在我們抓包命令中,包含越多的限制條件,抓的無關包就會越少,所以在進行抓包時,我們可以使用“與”(and&&)、“或”(or||)和“非”(not!)來將多個條件組合起來。這對我們需要基於某些條件來分析網絡包是非常有用的。

使用實例

  • 命令:tcpdump -i eth1 說明:監視指定網絡接口的數據包

  • 命令:tcpdump host 210.27.48.3 說明:截獲210.27.48.3主機收到的和發出的所有數據包

  • 命令:tcpdump host 210.27.48.4 and (210.27.48.5 or 210.27.48.6) 說明:截獲210.27.48.3主機和210.27.48.5或者210.27.48.6主機進行通信的所有數據包

  • 命令:tcpdump net 192.168.1.0/24 說明:截獲192.168.1.0/24整個網絡的數據包

  • 命令:tcpdump -i eth0 src host 210.27.48.3 說明:監視eth0網卡上源地址是210.27.48.3的所有網絡包

  • 命令:tcpdump -i eth0 dst host 210.27.48.3 說明:監視eth0網卡上目的地址是210.27.48.3的所有網絡包

  • 命令:tcpdump tcp port 23 and host 210.27.48.3 說明:獲取主機210.27.48.3上端口爲23的應用發出和接收的所有TCP協議包

  • 命令:tcpdump udp port 123 說明:獲取本機123端口發出和接收的所有UDP協議包

  • 命令:tcpdump src host 10.126.1.222 and dst net 10.126.1.0/24 說明:截獲源主地址爲10.126.1.222,目的地址是10.126.1.0/24整個網絡

  • 命令:tcpdump -i eth0 -s0 -G 60 -Z root -w %Y_%m%d_%H%M_%S.pcap 說明:抓取報文後按照指定時間間隔保存;-G選項後面接時間,單位爲秒;上述命令就是每隔60秒生存一個文件

  • 命令:tcpdump -i eth0 -s0 -C 1 -Z root -w eth0Packet.pcap 說明:抓取報文後按照指定報文大小保存;-C選項後接文件大小,單位爲MB;上述命令就是每抓包文件達到1MB時就使用一個新的文件保存新抓的報文

上面說到tcpdump抓包後生成對應的文件,那這個文件如何進行分析呢?是的,有這麼樣一個叫做“Wireshark”的軟件,可以非常完美的和tcpdump進行結合,提供可視化的分析界面;有興趣的話可以去學習一下,後續如果有時間,我也整理一個“Wireshark”入門系列。

總結

拖的時間比較長,終於整理完畢!當然了,tcpdump這麼複雜的一個命令,我這裏並沒有進行非常全面的整理,但是我這裏整理的內容絕對不會影響你在工作中使用tcpdump這個命令。還是那個“二八定律”,複雜的命令,常用的功能也就佔用20%,其餘80%都是比較偏僻生冷的功能,或者說工作中很少會用到的功能。看到這裏,是不是感覺會了這個命令,別人都會高看你一眼???如果覺的還不錯,可以點下左小角的“在看”哦!!!

往期精彩回顧

書籍推薦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章