tcpdump使用
序言
通常在 Windows 上查看分析 tcp 协议会使用 wireshark,但 Linux 上一般使用 tcpdump. deepin 上使用apt-get install tcpdump
安装命令。如果提示权限不足,使用sudo
提权。
1. tcpdump 常用的参数
参数 | 释义 | 示例 | 备注 |
---|---|---|---|
host | 基于 host 过滤 | tcpdump host 127.0.0.1 | |
src | 基于源过滤 | tcpdump src 127.0.0.1 | |
dst | 基于目的地过滤 | tcpdump dst 127.0.0.1 | |
net | 基于网段过滤 | tcpdump net 1192.168.31.0/24 | 同样可以指定源和目的 tcpdump [src\dst] net 192.168.31.0/24 |
port | 基于端口过滤 | tcpdump tcp port 80 | 加上具体的协议 tcp 可以更精准的捕获。同样可以指定源和目的 tcpdump [src\dst] port 80。如果要指定多个端口 tcpdump port 80 or port 22 或 tcpdump port 80 or 22。如果要抓去一个端口范围 tcpdump portrange 8000-8080。对于一些常见的协议可以使用协议名如 tcpdump tcp port http |
icmp | 基于协议过滤 | tcpdump icmp | 一般常用的协议,如 ip, ip6, arp, icmp, udp 等。但 http, dns, https, ssh 等应用层协议不能直接这样写,需要写成 tcpdump port http 或 tcpdump port 53(dns)。 |
-i | 指定监听网络接口 | tcpdump -i eht0 | 未指定时,默认监听第一块网卡上通过的数据包。tcpdump -i any 监听所有网卡,用来查看是否有网络流量。 |
-w | 将捕获的信息保存到文件中 | tcpdump -i eth0 -w a.pcap | 不分析和打印到屏幕,导出文件为 cap 或 pcap 格式,可以直接使用 wireshark 打开,进行报文分析。 |
-r | 从文件中读取数据 | tcpdump -r a.pcap | 读取后可以使用上述语法进行过滤分析 |
-n | 直接显示 ip | tcpdump -n | 避免执行 dns lookups 解析为主机名,速度会快很多。但端口还是会翻译为协议名 |
-nn | 不把协议和端口转化成名字 | tcpdump -nn | 速度会快很多 |
-N | 不打印 host 域名部分内容 | tcpdump -N | 如 192.168.10.135.12345 会被简化为 192.12345 |
-t | 不输出时间 | tcpdump -t | |
-tt | 输出显示为时间戳 | tcpdump -tt | |
-ttt | 输出每两行打印的时间间隔 | tcpdump -ttt | 单位:毫秒 |
-tttt | 在时间戳之前输出日期 | tcpdump -tttt | 输出的时间最直观 |
-v | 详细输出 | tcpdump -v | |
-vv | 更详细输出 | tcpdump -vv | |
-vvv | 更更详细输出 | tcpdump -vvv | |
-c | 指定抓包数量 | tcpdump -c 20 | 抓满20包个停止 |
-C | 文件分割 | tcpdump -C 1 -W 3 -w a.pcap | -C 与 -w 一起使用,数据在写入文件前检查是否超过了file_size(这里是1百万个字节),单位是百万字节 1000000 个字节,超过后会自动写入新文件,文件名为 a.pcap1,a.pcap2 ... -W 表示最多写 3 个文件。 |
-Q | 过滤数据包的方向 | tcpdump -Q in\out\inout | 不写和 inout 一样双向的。-Q 也可以用 --direction 等价代替 |
-q | 简洁打印 | tcpdump -q | |
-D | 显示所有可用网卡 | tcpdump -D | |
-L | 列出网卡的已知数据链路 | tcpdump -L | |
-s | 指定捕获包的长度 | tcpdump -s 20 | 单位是 byte,默认是 262144 个 byte。如果超过了大小,显示就会被截断,而打印出[ |
-A | 以 ASCII 格式打印所有分组数据 | tcpdump -A | 这样方便使用 grep 等工具解析输出内容。例如:tcpdump -A |
-X | 同时使用十六进制和 ASCII 字符串打印报文 | tcpdump -X | -X 和 -A 不能一起用 |
-e | 打印出数据链路层的头部信息 | tcpdump -e | 如显示源和目的 MAC 地址,及 WLAN tag 信息 |
-F | 使用指定文件(filter_rule)中的表达式抓包 | tcpdump -F filter_rule | 此时命令行后输入的规则将被忽略,这种情况适合表达式长期维护 |
-l | 对标准输出进行缓冲 | tcpdump -l | 使标准输出设备遇到换行符时就讲这行内容打印出来,这在观察输出的同时写入文件很有用。如:tcpdump -l |
less | 基于包大小进行过滤 | tcpdump less 32 | 抓取小于 32 个 byte 的数据包 |
greater | 基于包大小进行过滤 | tcpdump greater 50 | 抓取大于 100 个 byte 的数据包 |
-v | 查看版本 | tcpdump -v |
tcpdump 帮助命令man tcpdump
, 使用quit
退出。
2. tcp 协议分析
逻辑运算符:and(&&) or(||) not(!)。and 优先级高于 or。多个过滤器组合时需要用到圆括号,但在 shell 中圆括号是特殊字符,需要用引号,如:tcpdump "src 127.0.0.1 and (dst port 3306 or 22)"
只抓 SYN 包 tcpdump 'tcp[tcpflags] = tcp-syn' 抓 SYN 和 ACK tcpdump 'tcp[tcpflags]'
注意,监听本机时应使用回环地址 lo。
版权所有
版权归属:Mayee