TCPDump可以將網絡中傳送的數據包完全截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的信息。
DNS解析抓包
以下將查看dns解析是否正常,先看下配置的DNS服務器
#vi /etc/resolv.conf
nameserver 114.114.114.114
nameserver 114.114.115.115
然後在執行如下命令
[root@k8s-node01 ~]# tcpdump -n -i any port 53
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
其中-n表示不要把IP地址解析成域名,-i表示抓取哪塊網卡的通信
數據包,any表示任意一塊,port是指定要抓取數據包的端口,DNS服務工作在53端口上。
在另一個終端下ping百度,-c3表示ping次停下
[root@k8s-node01 ~]# ping -c3 www.baidu.com
#切到第一個終端,可以看到如下信息
21:55:38.533888 IP 192.168.1.105.32895 > 114.114.114.114.domain: 39946+ A? www.baidu.com. (31)
21:55:38.591319 IP 114.114.114.114.domain > 192.168.1.105.32895: 39946 3/0/0 CNAME www.a.shifen.com., A 163.177.151.110, A 163.177.151.109 (90)
21:55:38.639687 IP 192.168.1.105.50333 > 114.114.114.114.domain: 5641+ PTR? 110.151.177.163.in-addr.arpa. (46)
21:55:38.676668 IP 114.114.114.114.domain > 192.168.1.105.50333: 5641 NXDomain 0/1/0 (121)
在上圖中我們可看到本地192.168.1.105,端口39946進程向DNS服務器114.114.114.114,請求告知www.baidu.com的IP地址是什麼?114.114.114.114DNS服務器成功給了我們答覆,由此可以說明,我們的DNS工作正常。
抓取一個TCP包
安裝nginx服務並啓動
yum install nginx -y
cd /usr/local/
./nginx
然後windows訪問
在終端執行tcpdump -n -i ens33 port 80,ens33當前網卡的名稱。
[root@k8s-node01 local]# tcpdump -n -i ens33 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
然後在瀏覽器中刷新一下,可以看到抓取到了如下內容
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
22:16:42.420241 IP 192.168.1.101.55212 > 192.168.1.105.http: Flags [S], seq 4001849877, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
22:16:42.420684 IP 192.168.1.105.http > 192.168.1.101.55212: Flags [S.], seq 338815126, ack 4001849878, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
22:16:42.425098 IP 192.168.1.101.55212 > 192.168.1.105.http: Flags [.], ack 1, win 16425, length 0
tcpdump常見參數
-i 指定要抓取數據包的網卡名稱
tcpdump -i ens33 抓取ens33網卡的數據包
-c 指定抓取包的個數
tcpdump -i eth0 -c 10 # 只抓取10個包
-w 把抓取到的數據存放到文件中供以後分析
[root@k8s-node01 tmp]# tcpdump -n -i ens33 tcp port 80 -c 10 -w /tmp/tcp.cap
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
將tcp.cap在windows中用wireshark打開
指定過濾端口(port)和主機名(host)
tcpdump -n -i eth0 port 80
tcpdump -n -i eth0 host baidu.com
tcpdump -n -i eth0 host baidu.com and port 80
tcpdump -i eth0 port 80 -nn -S
-i 指定網卡
port 指定端口號 http 80;ftp 21 ;ssh 22;telnet 23;smtp 25 ;dns udp53 ;ntp udp 123
抓icmp
tcpdump -i eth0 icmp -n
-n 不把ip解析成主機名
-nn 不把端口解析成應用層協議
-c 指定抓包的數量
-S 不把隨機序列和確認序列解析成絕對值
tcpdump -i eth0 port 80 -c 10 -S
抓tcp某端口的數據包
tcpdump -i eth0 tcp port 21 -nn
抓udp某端口的數據包
tcpdump -i eth0 udp port 53 -nn
抓icmp的數據包
tcpdump -i eth0 icmp -nn -w /tmp/123.cap