tcpdump-一款经典的网络抓包工具
用过的命令:
sudo tcpdump -i eno1 tcp port 8079 and host 192.168.1.188 -X
tcpdump
-n 使用IP地址表示主机,而不是主机名;使用数字表示端口号,而不是服务名称
-i 指定要监听的网卡接口,-i any 表示抓去所有网卡上的数据包
-v 输出一个稍微详细的信息,例如TTL和TOS信息
-t 不打印时间戳
-e 显示网卡帧头部信息
-c 紧抓取指定数量的数据包
-x 以十六进制数显示数据包的内容,但不显示包中以太网帧的头部信息
-X 与-x类似,不过打印每个十六进制字节对应的ASCII字符
-XX 与-X相同,不过还要打印以太网帧的头部信息
-s 设置抓包时的抓取长度
-S 以绝对值来显示TCP报文段的序号,而不是相对值
-w 将tcpdump的输出以特殊的格式定向到某个文件
-r 从文件读取数据包信息并显示
tcpdump net 1.2.3.0/24 # 抓取整个1.2.3.0/255.255.255.0网络上的数据包
tcpdump dst port 1234 # 抓取进入端口1234的数据包
tcpdump icmp # 抓取所有ICMP数据包
tcpdump ip host host1 and not host2 # 抓取所有host1上的数据包而不是host2上的数据包
tcpdump src 10.0.0.1 and dst port 1234 or 22 # 抓取来自主机10.0.0.1并且端口号是1234或者22的包
tcpdump tcp[13]&2!=0 # 仅抓取TCP同步报文段
tcpdump表达式操作数:类型(type),方向(dir)和协议(proto)
1、类型:解释器后面紧跟着的参数的含义。tcpdump支持的类型包括host、net、port和portrange。他们分别指定主机名(或IP地址),用CIDR方法表示的网络地址、端口号以及端口范围。比如抓取整个1.2.3.0/255.255.255.0网络上的数据包可以使用如下命令
tcpdump net 1.2.3.0/24
2、方向,src指定数据报的发送端,dst指定数据包的目的端。比如要抓取进入端口13579的数据包,可以使用如下命令:
tcpdump dst port 13579
3、协议,指定目标协议。比如要抓取所有ICMP数据包,可以使用如下命令:
tcpdump icmp
逻辑操作符:and、 or、 not、
比如抓取主机A和所有非B的主机之间交换的IP数据包,可以使用如下命令:
tcpdump ip host A and not B
如果表达式比较复杂,那么我们可以使用括号将它们分组。不过在使用括号时,我们要么使用反斜杠" \ "对它转义,要么用单引号“ ‘ ”将其括住,以避免它被shell所解释。
比如要抓取来自主机A , 目标端口是88或22的数据包,可以使用如下命令:
tcpdump 'src A and (dst port 88 or 22)'
此外,tcpdump还允许直接使用数据包中的部分协议字段的内容来过滤数据包。
比如仅抓取TCP同步报文段,可使用如下命令:
tcpdump 'tcp[13] & 2 != 0'
这是因为TCP头部的第14个字节的第2个位正是同步标志。该命令也可以表示为:
tcpdump 'tcp[tcpflags] & tcp-syn != 0'