tcpdump是一个强大的命令行工具,用于捕获和分析TCP、UDP、ICMP等协议的网络流量。
功能与用途
- 捕获网络流量:tcpdump可以捕获和显示来自本地计算机或通过网络传输的数据包,提供有关数据包的详细信息,如源和目的IP地址、端口号、协议类型、数据长度等。
- 分析数据包:通过捕获的数据包,tcpdump可以帮助用户分析网络问题,如延迟、丢包、重传等,对于网络调试、安全审计和性能优化等方面非常有用。
- 过滤功能:tcpdump支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助用户去掉无用的信息,专注于分析特定类型的流量。
软件安装
yum install -y tcpdump #centos系统
apt-get install -y tcpdump #ubuntu系统
语法格式及常用选项
tcpdump[ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen] [ -T 类型 ] [ -w 文件名 ] [表达式 ]
文件操作参数
参数 | 描述 |
-nn | 直接以IP及port号码显示,而非显示主机名与服务名称 |
-w | 将监听所得到的数据包内容存储下来,输出结果至文件 |
-W | 指定输出文件的最大数量,到达后会重新覆写第1个文件 |
-r | 读取一个抓包文件 |
-C | 限制输入文件的大小,超出以后后缀加1等数字的形式递增,注意单位是1000000字节 |
-G | 指定每隔N秒就重新输出至新文件,注意-w参数应该基于strftime参数指定文件名 |
监听及停止条件参数
参数 | 描述 |
-D | 列举所有网卡设备 |
-i | 后面接要监听的网络接口设备,例如eth0、lo、ppp0等的界面 |
-c | 监听的数据包数,如果没有这个参数,tcpdump会持续不断监听 |
-s | 指定每条报文的最大字节数,默认是262144字节,可以设置大小 |
–time-stamp-precision | 制定捕获时的时间精度,默认是毫秒级micro,可选选择纳秒nano |
输出时间戳格式参数
参数 | 描述 |
-t | 不显示时间戳 |
-tt | 自1970年1月1日0点至今的秒数 |
-ttt | 显示邻近两行报文间经过的秒数 |
-tttt | 自第一个监听的报文起经历的秒数 |
分析信息详情参数据
参数 | 描述 |
-e | 使用数据链路层(OSI第二层)的MAC数据包数据来显示 |
-q | 仅列出较为简单的数据包信息,每一行的内容比较精简 |
-v | 显示网络层头部更多的信息,如TTL、id等 |
-n | 显示IP地址、数字端口代替hostname等 |
-S TCP | 信息以绝对序列号代替相对序列号 |
-A | 数据包的内容以ASCII格式显示,通常用来监听WWW网页数据包数据 |
-x | 以16进制方式显示报文内容,不显示数据链路层 |
-xx | 以16进制方式显示报文内容,显示数据链路层 |
-X | 可以列出十六进制(hex)以及ASCII的数据包内容,不显示数据链路层 |
-XX | 可以列出十六进制(hex)以及ASCII的数据包内容,显示数据链路层 |
参考例子
1、查看本机全部网卡信息
如果我们想快速查看本机全部网卡设备信息,使用tcpdump代替ifconfig会更加高效,包括网桥设备(br0、docker0)、虚拟机网卡(virbr0)、蓝牙网卡(bluetooth0)、usb总线接口(usbmon1、usbmon2)、本机网卡(ens33)、回环地址(lo)等常见设备信息,系统对查询出的全部网卡接口设备进行编号。
tcpdump -D
2、监听指定网卡的数据包信息
监听ens33网卡上的全部网络数据包,需要显示IP及PORT号码,持续收到6条数据包以后自动停止
tcpdump -i ens33 -nn -c 6
3、将监听的数据包数据保存至文件
使用tcpdump监听经过ens33网卡的数据包,将数据包每隔3秒时长写入一个特定格式文件(文件生成格式定义为def%M-%S),并且读取其中一个生成文件的内容
tcpdump -i ens33 -G 3 -w def%M-%S
ll def*
tcpdump -r def04-11
tcpdump条件表达式详解
主机过滤
host、src host、dst host:设置主机、来源主机、目的主机作为过滤条件,
例如:tcpdump -nn host 192.168.31.101 代表过滤指定主机IP地址的网络数据包。
网络过滤
net、src net、dst net: 设置网段、来源网段、目的网段作为过滤条件,
例如:tcpdump net -nn 192.168.0.0 代表过滤指定网段的网络数据包
端口过滤
port、src port、dst port、portrange:设置端口、来源端口、目的端口、端口范围作为过滤条件,
例如:tcpdump -nn dst port 80 代表过滤从目的端口80发来的网络数据包
协议过滤
可以指定网络协议类型,包括ether、fddi、tr、wlan、ip、ip6、arp、rarp、tcp、udp、icmp、igmp、icmp、igrp、pim、ah、esp、vrrp等,
例如:tcpdump -nn icmp or tcp 代表过滤icmp协议或者tcp协议数据包。
逻辑表达式过滤
and(&&)、or(||)、not(!): 分别代表并且、或者、非逻辑运算,
例如:tcpdump ‘src host 192.168.31.101 and dst port 8080’ 代表监听源IP是192.168.31.101主机发送给目的端口8080的所有数据包。
特定状态过滤
tcp[tcpflas]: 按照tcp指定状态标志位进行过滤,
例如: tcpdump -i eth0 -nn ‘tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack’ 代表希望同时捕获syn类型和ack类型的数据包
综合
如何使用tcpdump命令实现如下监控目标:1.监听来自ens33网卡数据,通信协议为port 22,目标数据包来源为192.168.31.101的数据包,请给出正确答案。
tcpdump -i eth0 -nn ‘port 22 and src 192.168.1.101’