歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> Linux系統抓包命令tcpdump使用實例

Linux系統抓包命令tcpdump使用實例

日期:2017/3/2 16:31:36   编辑:Linux服務器

  tcpdump是linux命令行下常用的的一個抓包工具,記錄一下平時常用的方式,測試機器系統是ubuntu 12.04。

  tcpdump的命令格式

  tcpdump的參數眾多,通過man tcpdump可以查看tcpdump的詳細說明,這邊只列一些筆者自己常用的參數:

  tcpdump [-i 網卡] -nnAX '表達式'

  各參數說明如下:

  -i:interface 監聽的網卡。

  -nn:表示以ip和port的方式顯示來源主機和目的主機,而不是用主機名和服務。

  -A:以ascii的方式顯示數據包,抓取web數據時很有用。

  -X:數據包將會以16進制和ascii的方式顯示。

  表達式:表達式有很多種,常見的有:host 主機;port 端口;src host 發包主機;dst host 收包主機。多個條件可以用and、or組合,取反可以使用!,更多的使用可以查看man 7 pcap-filter。

  下面進行一些命令測試,如果沒有權限,可以先切換成root用戶。

  監聽網卡eth0

  $ tcpdump -i eth0

  這個方式最簡單了,但是用處不多,因為基本上只能看到數據包的信息刷屏,壓根看不清,可以使用ctrl+c中斷退出,如果真有需求,可以將輸出內容重定向到一個文件,這樣也更方便查看。

  監聽指定協議的數據

  $ tcpdump -i eth0 -nn 'icmp'

  這個是用來監聽icmp協議的數據,就是ping命令使用的協議。類似的,如果要監聽tcp或者是udp協議,只需要修改上例的icmp就可以了。ping下監聽的機器,輸出如下:

Linux系統抓包命令tcpdump使用實例 三聯

  linux使用tcpdump抓包示例

  每一行的各個數據表示的含義:

  抓到包的時間 IP 發包的主機和端口 > 接收的主機和端口 數據包內容

  監聽指定的主機

  $ tcpdump -i eth0 -nn 'host 192.168.1.231'

  這樣的話,192.168.1.231這台主機接收到的包和發送的包都會被抓取。

  $ tcpdump -i eth0 -nn 'src host 192.168.1.231'

  這樣只有192.168.1.231這台主機發送的包才會被抓取。

  $ tcpdump -i eth0 -nn 'dst host 192.168.1.231'

  這樣只有192.168.1.231這台主機接收到的包才會被抓取。

  監聽指定端口

  $ tcpdump -i eth0 -nnA 'port 80'

  上例是用來監聽主機的80端口收到和發送的所有數據包,結合-A參數,在web開發中,真是非常有用。

  監聽指定主機和端口

  $ tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.231'

  多個條件可以用and,or連接。上例表示監聽192.168.1.231主機通過80端口發送的數據包。

  監聽除某個端口外的其它端口

  $ tcpdump -i eth0 -nnA '!port 22'

  如果需要排除某個端口或者主機,可以使用“!”符號,上例表示監聽非22端口的數據包。

  小結:

  tcpdump這個功能參數很多,表達式的選項也非常多,非常強大,不過常用的功能確實不多。詳情可以通過man查看系統手冊。

  另外在抓取web包的時候,發送網頁內容都是很奇怪的字符,發現是apache開啟了gzip壓縮的緣故,關閉掉gzip壓縮就可以了。在ubuntu 12.04下,編輯vim /etc/apache2/mods-enabled/deflate.load文件,將加載模塊deflate_module的語句注釋掉,然後重啟apache就OK了。

Copyright © Linux教程網 All Rights Reserved