Tcpdump 网络抓包工具使用
Tcpdump 语法
Tcpdump 用于 linux 对网络进行抓包,可将抓包结果导出用 wireshark 查看
过滤语法
基于 IP 地址进行过滤 host
# 获取特定 IP 收到和发出的所有包
tcpdump host ip地址# 获取源 IP 是特定地址的包
tcpdump src host ip# 获取目的 IP 是特定地址的包
tcpdump dst host ip
基于网段进行过滤 net
# 获取特定网段收到和发出的所有包
tcpdump net 127.0.0.1/24# 获取源地址是特定网段的包
tcpdump src net 127.0.0.1/24# 获取目的地址是特定网段的包
tcpdump dst net 127.0.0.1/24
基于端口进行过滤,port,支持【src】【dst】
# 获取特定端口收到和发出的所有包
tcpdump port 3344# 获取某两个端口收到和发出的所有包
tcpdump port 3344 or 9999# 获取某个范围端口收到和发出的所有包
tcpdump portrange 8080-9999# 对于一些常见协议的端口,也可以使用协议名代表端口
tcpdump port http
基于协议进行过滤 protocal
# 获取特定协议收到和发出的所有包 (icmp、arp、ip、tcp、udp)
tcpdump icmp
tcpdump arp# 对于应用层协议,例如 http 和 https,就不能这样写了
# tcpdump http
tcpdump: syntax error
# tcpdump port http
参数语法
指定监听网络设备 -i
# 指定监听网络设备,ifconfig 可以查看所有网卡
tcpdump -i lo# 监听所有
tcpdump -i any
将抓包结果写入文件 -w,从文件中读取 -r
# 将抓包结果写入文件,最好保存为 cap 或 pacp 格式,可以导出用 wireshark 分析
tcpdump -w test.pacp# 从文件中读取抓包结果
tcpdump -r test.pacp
不解析 IP 地址和端口号 -n,-nn,-N
# 打印结果不解析 IP 地址,速度会快一些
tcpdump -n# 打印结果不解析 IP 地址和端口,例如不加这个参数,会把 22 端口解析为 ssh
tcpdump -nn
指定打印的时间格式 -t
# 不输出时间
tcpdump -t# 输出时间戳,距离 1970 年那个时间点时间戳
tcpdump -tt# 以第一条结果为0,每条输出距离第一条的时间
tcpdump -ttt# 输出年月日时分秒微秒这样的时间格式
tcpdump -tttt
输出更详细的抓包信息 -v
# 增加输出包的ttl、id标识、数据包长度等
tcpdump -v# 更加详细的输出
tcpdump -vv# 更加详细的输出
tcpdump -V
指定抓包条数 -c
# 指定抓包条数
tcpdump -c 20
指定抓包大小 -C,与 -W 配合使用,文件 -C 大小后就写一个新文件,最多写 -W 个,-C 单位百万字节
# 抓包,每个文件最多1百万字节,最多抓3个文件,保存为 abc0、abc1、abc2
tcpdump -C 1 -W 3 -w abc
指定包的方向 -Q
# 指定输入的包
tcpdump -Q intcpdump -Q outtcpdump -Q inout
简洁打印信息 -q
tcpdump -q
查看本机网络接口信息 -D, -L
# 查看网络接口列表
tcpdump -D# 列出网络接口的已知数据链路
tcpdump -L
指定每个包捕获的长度 -s
# 当执行 tcpdump,最开始就会打印默认的监听网络设备和捕获长度, 例如这个的默认就是 262144 byte
# tcpdump -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes# 指定每个包捕获的长度,如果超出后续的内容会被截断,截断包的最后会输出 [|protocal],即当前协议
# tcpdump -c 3 -s 50 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 50 bytes
12:00:23.360995 IP 172.16.63.116.22 > 60.209.181.228.54331: [|tcp]
12:00:23.361102 IP 172.16.63.116.22 > 60.209.181.228.54331: [|tcp]
12:00:23.361147 IP 172.16.63.116.22 > 60.209.181.228.54331: [|tcp]
以 ASICC 码格式打印包内容信息,方便 grep 进行分析 -A
# 另一个终端在此时 ping www.baidu.com 或者 curl www.baidu.com
# tcpdump -A | grep baidu
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
12:03:49.677347 IP iZm5e8izu4t87flkkvb649Z.39739 > 100.100.2.136.domain: 25687+ A? www.baidu.com. (31)
E..;^.@.@..B..?tdd...;.5.'R.dW...........www.baidu.com.....
E..y^.@.@...dd....?t.5.;.e..dW...........www.baidu.com..................www.a.shifen.com..+..........n.E..+..........n.F9
以 16 进制格式打印包内容信息 -x
# 以16进制格式打印包内容信息 -x
tcpdump -c 5 -x# 以 ASCII 和 16进制格式打印包内容信息 -X,注意 -X 无法与 -A 同时使用
tcpdump -c 5 -X
打印数据链路层内容信息 -e
# 打印数据链路层内容信息
tcpdump -e
以某文件中的规则进行抓包 -F,例如某些包抓一次要好多参数,就可以配置为文件使用
# -F [文件名],注意如果使用了 -F,命令行后如果再跟过滤规则就无效了
tcpdump -c 5 -F filter_rule# 这个时候的 icmp 就无效了
tcpdump -c 5 -F filter_rule icmp
同时输出到终端和文件 -l
# -l | tee [文件名]
tcpdump -c 5 -l | tee aaa
基于包大小进行过滤 less / greater,单位 byte
# 抓取少于 50 byte 的包
tcpdump -c 5 less 50tcpdump -c greater 100
除此之外 tcpdump 也支持一些逻辑符号,例如抓取端口不是 80 上的数据
tcpdump -c 5 not port 80
内容来自 B站视频 tcpdump抓包工具教程 ~