简介
tcpdump
是一款 Linux 平台的抓包工具。它可以抓取涵盖整个 TCP/IP 协议族的数据包,支持针对网络层、协议、主机、端口的过滤,并提供 and、or、not 等逻辑语句来过滤无用的信息.。
安装
语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ] [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ] [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ] [ -Q|-P in|out|inout ] [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ] [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ expression ]
常用的命令选项: -A 只使用 ASCII 打印报文的全部数据,不要和 `-X` 一起使用,获取 http 可以用 `tcpdump -nSA port 80` -b 在数据链路层上选择协议,包括 ip, arp, rarp, ipx 等 -c 指定要抓取包的数量 -D 列出操作系统所有可以用于抓包的接口 -e 输出链路层报头 -i 指定监听的网卡,`-i any` 显示所有网卡 -n 表示不解析主机名,直接用 IP 显示,默认是用 hostname 显示 -nn 表示不解析主机名和端口,直接用端口号显示,默认显示是端口号对应的服务名 -p 关闭接口的混杂模式 -P 指定抓取的包是流入的包还是流出的,可以指定参数 in, out, inout 等,默认是 inout -q 快速打印输出,即只输出少量的协议相关信息 -s len 设置要抓取数据包长度为 len,默认只会截取前 96bytes 的内容,`-s 0` 的话,会截取全部内容。 -S 将 TCP 的序列号以绝对值形式输出,而不是相对值 -t 不要打印时间戳 -vv 输出详细信息(比如 tos、ttl、checksum等) -X 同时用 hex 和 ascii 显示报文内容 -XX 同 -X,但同时显示以太网头部
|
过滤器
过滤器简单可分为三类:协议(proto)、传输方向(dir)和类型(type)。
一般的 表达式格式 为:tcpdump [options] [not] proto dir type
。
- 关于 proto:可选有 ip, arp, rarp, tcp, udp, icmp, ether 等,默认是所有协议的包。
- 关于 dir:可选有 src, dst, src or dst, src and dst,默认为 src or dst。
- 关于 type:可选有 host, net, port, portrange(端口范围,比如 21-42),默认为 host。
连接运算符
- and:所有的条件都满足
- or:只要满足一个条件
- not:取反,也可以用!
示例
抓取主机172.0.0.1的eth0网口的8080、8081端口传输的数据包并保存文件
tcpdump -i eth0 -s0 port 8080 or port 8081 host 172.0.0.1 -w 1.pcap
简单查看数据包内容:tcpdump -r 1..pcap
- 按 crtl+c 停止抓包,当前目录会生成一个1.pcap文件
- 一般对抓取的数据包用Wireshark工具进行分析