tcpdump安装和使用

2022/3/6 7:17:08

本文主要是介绍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命令解析

命令格式

tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ]
        [ -s snaplen ] [ -w file ] [ expression ]

抓包选项:
-c:指定要抓取的包数量。注意,是最终要获取这么多个包。例如,指定"-c 10"将获取10个包,但可能已经处理了100个包,只不过只有10个包是满足条件的包。
-i interface:指定tcpdump需要监听的接口。若未指定该选项,将从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),一旦找到第一个符合条件的接口,搜寻马上结束。可以使用'any'关键字表示所有网络接口。
-n:对地址以数字方式显示。
-nn:在-n基础上,把端口显示为数值。
-N:不打印出host的域名部分。例如tcpdump将会打印'nic'而不是'nic.ddn.mil'。
-P:指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。
-s len:设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断,若出现包截断,输出行中会出现"[|proto]"的标志(proto实际会显示为协议名)。但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,从而会导致数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好。

输出选项:
-e:输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC。
-q:快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短。
-X:输出包的头部数据,会以16进制和ASCII两种方式同时输出。
-XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。
-v:当分析和打印的时候,产生详细的输出。
-vv:产生比-v更详细的输出。
-vvv:产生比-vv更详细的输出。

其他功能性选项:
-D:列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"后。
-F:从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。
-w:将抓包数据输出到文件中而不是标准输出。可以同时配合"-G time"选项使得输出文件每time秒就自动切换到另一个文件。可通过"-r"选项载入这些文件以进行分析和打印。 
-r:从给定的数据包文件中读取数据。使用"-"表示从标准输入中读取。

示例

# -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

抓取两个不同节点上的容器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地址



这篇关于tcpdump安装和使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程