tcpdump
安装tcpdump
通过yum命令来直接安装(推荐)
yum install tcpdump -y
通过源码来安装tcpdump
# 登录http://www.tcpdump.org/,下载源码包。
# 下载tcpdump-4.9.3.tar.gz和libpcap-1.9.1.tar.gz。
# 安装libpcap
tar -zxvf libpcap-1.9.1.tar.gz
cd libpcap-1.9.1
./configure
yum install -y gcc
./configure
yum install flex bison -y
./configure
make
make install
# 安装tcpdump
tar -zxvf tcpdump-4.9.3.tar.gz
cd tcpdump-4.9.3
./configure
make
make install
tcpdump二进制文件在/usr/local/sbin目录下。
tcpdump命令解析
命令格式
抓包参数:
-c:指定要抓取的包数量。
-i interface:指定tcpdump需要监听的接口。
-n:对地址以数字方式显示。
-nn:在-n基础上,把端口显示为数值。
-N:不打印出host的域名部分。
-P:指定要抓取的包是流入还是流出的包,支持"in"、"out"和"inout",默认是"inout"。
-s len:设置tcpdump的数据包抓取长度。
示例
# -s 0表示包不截断
tcpdump -v -n -i eth2 dst xxx.xxx.xxx.xxx -s 0 -w test.cap
tcpdump -i eth0 host 192.168.0.2 -nevvv
tcpdump -i ens33 src 192.168.0.108 and icmp -nevvv
抓取两个不同节点上的容器ping包
环境信息
node1-192.168.0.108
容器1-10.244.1.2
node2-192.168.0.101
容器2-10.244.2.2
通信场景
容器1一直ping容器2。
抓包方法
# node2上抓包
tcpdump -v -n -i ens33 udp and dst 192.168.0.101 -s 0 -w test.cap
分析包
问题:Linux上抓取的UDP 8472端口报文在Wireshark中没有显示成vxlan格式
通过wireshark打开test.cap。
默认情况,Wireshark认为udp 4789端口对应的数据包为Vxlan协议数据包。Linux内核默认vxlan的协议端口是UDP 8472端口,因此在抓包使用wireshark统计观察分析Linux系统下的数据时,不能默认直接解析为vxlan协议,直接将vxlan协议的数据作为UDP的数据。需要手动设置,把8472端口的数据包解析为vxlan格式。
选择一个报文后右键点击Decode As
当前选择VXLAN,点击OK。
重启Wireshark之后失效。
查看vxlan包内容
手动输入过滤条件ip.src==10.244.1.2并回车,筛选出源地址是10.244.1.2的报文。
报文结构分为UDP报文、VXLAN头和ICMP报文。
UDP报文源IP是192.168.0.108,目的端口是192.168.0.101,源端口是48361,目的端口是8472,源MAC地址是00:0c:29:ad:12:d1,目的MAC地址是00:0c:29:d4:93:47。
node1 ens33 MAC地址
node2 ens33 MAC地址
VXLAN头的VNI是1。
ICMP报文的源地址是10.244.1.2,目的地址是10.244.2.2,源MAC地址是f6:31:e1:0d:58:2c,目的MAC地址是76:57:ad:7d:45:b6。
node1 flannel.1 MAC地址
node2 flannel.1 MAC地址