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