tcpdump的參數和表達式很多,這裡只演示一些常用的操作。
常用參數:
-D 查看哪些接口可以抓包。
-i 指定監聽接口。如果沒指定,tcpdump 會從系統接口列表中搜尋編號最小的已配置好的接口(不包括 loopback 接口)
-c 抓幾個包。
-n 不解析主機名
-nn 不對協議和端口號解析
-v 詳細信息,-vv、-vvv詳細程度遞增
-w 將抓取的數據包保存為文件
常用表達式關鍵字:
tcp 抓取tcp協議數據包
udp 抓下UDP協議數據包
icmp 抓ping包
src 源
dst 目的
and or not等表達式
實驗部分:
2臺Linux服務器:PC1:
192.168.50.100和PC2:192.168.50.200。PC1使用tcpdump抓包,PC2發包。tcpdump -i enp0s3 -c 10
抓取接口enp0s3的所有數據包,因為數據包太多,所以這裡只抓10個:
[root@ljds ~]# tcpdump -i enp0s3 port 22 -c 10
抓取接口enp0s3上端口是22的數據包,也只抓了10個:
這裡沒有帶參數-nn,所以22端口自動解析為ssh,192.168.50.100解析為ljds的主機名。如果帶上-nn,則不做解析,直接以數字形式顯示:
[root@ljds ~]# tcpdump -i enp0s3 port 22 -c 10 -nn
[root@ljds ~]# tcpdump -i enp0s3 port 999 and host 192.168.50.200 -nn
抓取接口enp0s3上端口是999和主機192.168.50.200通信的數據包:
以上輸出顯示了數據包的收發,如果帶上src或者dst則可只抓取“源”自xx的數據包,或者“目標”是xx的數據包:
[root@ljds ~]# tcpdump -i enp0s3 port 999 and src 192.168.50.200 -nn
除了直接看抓包信息排查網絡問題,也可把數據包全部抓取保存成文件。回去慢慢分析:
[root@ljds ~]# tcpdump -i enp0s3 -w /root/ljds.pcap
之後用Wireshark打開該文件:
閱讀更多 樑家大叔 的文章