-w 选项用来把数据报文输出到文件:
$ tcpdump -i eth0 -s0 -w test.pcap复制代码
行缓冲模式如果想实时将抓取到的数据通过管道传递给其他工具来处理 , 需要使用 -l 选项来开启行缓冲模式(或使用 -c 选项来开启数据包缓冲模式) 。使用 -l 选项可以将输出通过立即发送给其他命令 , 其他命令会立即响应 。
$ tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'复制代码
组合过滤器过滤的真正强大之处在于你可以随意组合它们 , 而连接它们的逻辑就是常用的 与/AND/&& 、 或/OR/|| 和 非/not/! 。
and or &&or or ||not or !复制代码
2. 过滤器关于 tcpdump 的过滤器 , 这里有必要单独介绍一下 。
机器上的网络报文数量异常的多 , 很多时候我们只关系和具体问题有关的数据报(比如访问某个网站的数据 , 或者 icmp 超时的报文等等) , 而这些数据只占到很小的一部分 。把所有的数据截取下来 , 从里面找到想要的信息无疑是一件很费时费力的工作 。而 tcpdump 提供了灵活的语法可以精确地截取关心的数据报 , 简化分析的工作量 。这些选择数据包的语句就是过滤器(filter)!
Host 过滤器Host 过滤器用来过滤某个主机的数据报文 。例如:
$ tcpdump host 1.2.3.4复制代码
该命令会抓取所有发往主机 1.2.3.4 或者从主机 1.2.3.4 发出的流量 。如果想只抓取从该主机发出的流量 , 可以使用下面的命令:
$ tcpdump src host 1.2.3.4复制代码
Network 过滤器Network 过滤器用来过滤某个网段的数据 , 使用的是 CIDR 模式 。可以使用四元组(x.x.x.x)、三元组(x.x.x)、二元组(x.x)和一元组(x) 。四元组就是指定某个主机 , 三元组表示子网掩码为 255.255.255.0 , 二元组表示子网掩码为 255.255.0.0 , 一元组表示子网掩码为 255.0.0.0 。例如 ,
抓取所有发往网段 192.168.1.x 或从网段 192.168.1.x 发出的流量:
$ tcpdump net 192.168.1复制代码
抓取所有发往网段 10.x.x.x 或从网段 10.x.x.x 发出的流量:
$ tcpdump net 10复制代码
和 Host 过滤器一样 , 这里也可以指定源和目的:
$ tcpdump src net 10复制代码
也可以使用 CIDR 格式:
$ tcpdump src net 172.16.0.0/12复制代码
Proto 过滤器Proto 过滤器用来过滤某个协议的数据 , 关键字为 proto , 可省略 。proto 后面可以跟上协议号或协议名称 , 支持 icmp, igmp, igrp, pim, ah, esp, carp, vrrp, udp和 tcp 。因为通常的协议名称是保留字段 , 所以在于 proto 指令一起使用时 , 必须根据 shell 类型使用一个或两个反斜杠(/)来转义 。Linux 中的 shell 需要使用两个反斜杠来转义 , MacOS 只需要一个 。
例如 , 抓取 icmp 协议的报文:
$ tcpdump -n proto \icmp# 或者$ tcpdump -n icmp复制代码
Port 过滤器Port 过滤器用来过滤通过某个端口的数据报文 , 关键字为 port 。例如:
$ tcpdump port 389复制代码
3. 理解 tcpdump 的输出截取数据只是第一步 , 第二步就是理解这些数据 , 下面就解释一下 tcpdump 命令输出各部分的意义 。
21:27:06.995846 IP (tos 0x0, ttl 64, id 45646, offset 0, flags [DF], proto TCP (6), length 64)192.168.1.106.56166 > 124.192.132.54.80: Flags [S], cksum 0xa730 (correct), seq 992042666, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 663433143 ecr 0,sackOK,eol], length 021:27:07.030487 IP (tos 0x0, ttl 51, id 0, offset 0, flags [DF], proto TCP (6), length 44)124.192.132.54.80 > 192.168.1.106.56166: Flags [S.], cksum 0xedc0 (correct), seq 2147006684, ack 992042667, win 14600, options [mss 1440], length 021:27:07.030527 IP (tos 0x0, ttl 64, id 59119, offset 0, flags [DF], proto TCP (6), length 40)192.168.1.106.56166 > 124.192.132.54.80: Flags [.], cksum 0x3e72 (correct), ack 2147006685, win 65535, length 0复制代码
最基本也是最重要的信息就是数据报的源地址/端口和目的地址/端口 , 上面的例子第一条数据报中 , 源地址 ip 是 192.168.1.106 , 源端口是 56166 , 目的地址是 124.192.132.54 , 目的端口是 80 。> 符号代表数据的方向 。
此外 , 上面的三条数据还是 tcp 协议的三次握手过程 , 第一条就是 SYN 报文 , 这个可以通过 Flags [S] 看出 。下面是常见的 TCP 报文的 Flags:
推荐阅读
- 网络交换机的简单知识
- 网络安全:这十招可帮助你的网络远离黑客
- 科普|网络推广和网络营销的区别
- 推荐 10 个不错的网络监视工具,值得收藏
- 6个好用的网络监视工具,值得收藏
- 最详细的Python库总结
- 华为网络设备单臂路由配置实验
- 网络基础知识,IP地址划分及子网掩码,一分钟了解下
- VPN技术介绍
- 超详细实战演示破解windows电脑登录密码,并初步认识hash加密