linux 抓包命令 tcpdump

tcpdump 是一個功能強大的命令行數據包分析器,它是通過監聽服務器的網卡來獲取數據包,所有通過網絡訪問的數據包都能獲取到。它也提供了過濾器的功能,可以獲取指定的網絡、端口或協議的數據包

程序員日常排查問題,最常用的是使用過濾器功能獲取指定端口的數據包,用來分析服務器是否收到請求、請求數據是否完整。

參數介紹

tcpdump 命令的參數很多,詳見如下

這裏只介紹一些常用的參數

-c count

count 表示數量。抓取數據包的數量達到 count 後結束命令,如果不使用 - c 參數,會不停的抓取數據包,直到手動停止

-C file_size

抓取數據包保存到文件時,通過該命令指定文件的大小。文件達到指定大小後,會創建一個在原文件名稱後面加上序號的新文件,如:dump.txt,dump.txt1。file_size 的單位是 b

-D

列出服務器所有網卡。tcpdump 默認監聽的是編號最小的那個網卡,一般是 eth0。在進行抓包時可以通過 -i 參數指定監聽的網卡,any 表示監聽所有網卡

-i interface

指定監聽的網卡名稱,any 表示監聽所有的網卡

-n

輸出結果中,不把 ip 轉換成主機名(默認顯示的是主機名)

-q

快速輸出,只輸出簡要的數據包信息

-r file

從文件中獲取數據包,不再從網絡獲取數據包

-t

不輸出時間戳

-w file

將抓取的數據包保存到文件,-r 參數可以從文件中讀取數據包

-W filecount

指定文件的數量,當文件滾動到指定數量後會從第一個文件開始覆蓋

除了以上參數,還有一些關鍵字可以用來進行條件過濾,常用關鍵字如下

-host

過濾主機,如 tcpdump host 192.168.1.110  只抓取經過這個 ip 的數據包

-src

用來過濾請求來源方的參數,如:tcpdump src host 192.168.1.110  只抓取從這個 ip 過來的數據包

-dst

用來過濾請求接收方的參數,如:tcpdump dst host 192.168.1.110  只抓取發送到這個 ip 的數據包

-port

過濾端口,如:tcpdump port 8080  只抓取經過 8080 端口的數據包

-net

過濾網絡,如:tcpdump net 192.168  只抓取經過這個網段的數據包

-and、not、or

條件過濾,和字面意思一樣。如:tcpdump net 192.168 and port 8080  抓取經過 192.168 網段並經過 8080 端口的數據包

數據包分析

抓取的數據包格式如下

20:17:43.496528

時間戳,時: 分: 秒. 微秒

IP

網際網絡協議的名稱

180.101.49.12.http > iZbp14w0b2rs7i1400bjjmZ.42468180.101.49.12.http

請求發送方的 ip 和端口 > 請求接收方的 ip 和端口。端口有時會顯示爲某個網絡協議,如 http、ssh、mysql 等

Flags [R]

flag 標識和狀態,可選的狀態有: [S.] [.] [P.] [F.][R]

seq、ack、fin

表示 tcp 協議的 3 次握手和 4 次揮手的過程。seq 表示請求的序列號,ack 是回答的序列號,fin 表示完成。這裏顯示的序列號是相對值,-S 參數可以顯示絕對值

win

表示當前窗口的可用大小

length

表示報文體的長度,從長度可以簡單分析是否正確接收了請求

通過以上結果只能做簡單的分析,可以使用 - w 參數把數據包寫入文件,文件中記錄的數據包比命令行要詳細的多。藉助分析工具可以對文件進一步分析,這裏推薦使用 Wireshark,這個工具是開源的,開箱即用使用簡單,這裏不做詳細介紹了

常用的命令組合

抓取 8080 端口的數據包

tcpdump -i any port 8080

抓取從 192.168.1.110 發送到 192.168.1.111 的數據包

tcpdump -i any src host 192.168.1.110 and dst host 192.168.1.111

抓取 192.168 網段除了 192.168.1.110 的請求的數據包

tcpdump -i any src net 192.168 and 'src host not 192.168.1.110'

抓取 8080 端口的數據包並寫入 dump.log 文件中

tcpdump -i any port 8080 -w dump.log

注意事項

1.tcpdump 需要用管理員權限運行,可以用 sudo 命令或者 root 用戶

  1. 抓取的數據包通過 length 字段只能做一些簡單的判斷,想要詳細分析,需要藉助數據包分析工具,如:Wireshark
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/V1Ahvvgce1YHoDdclsenUQ