tcpdump 是一款强大的网络抓包工具,它使用 libpcap 库来抓取网络数据包,这个库在几乎在所有的 Linux/Unix 中都有。今天简单跟大家分享下tcpdump的基础使用。
01、基本使用语法
tcpdump 的常用参数如下:tcpdump -i eth0 -nn -s0 -v port 80
-i:选择要捕获的接口,通常是以太网卡或无线网卡,也可以是 vlan 或其他特殊接口。 如果该系统上只有一个网络接口,则无需指定。
-nn:单个 n 表示不解析域名,直接显示 IP; 两个 n 表示不解析域名和端口。 这样不仅方便查看 IP 和端口号,而且在抓取大量数据时非常高效,因为域名解析会降低抓取度。
-s0:tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number , number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。
-v:使用 -v , -vv 和 -vvv 来显示更多的详细信息,通常会显示更多与特定协议相关的信息。
port 80 : 这是一个常见的端口过滤器,表示仅抓取 80 端口上的流量,通常是 HTTP。
-p : 不让网络接口进入混杂模式。 默认情况下使用 tcpdump 抓包时,会让网络接口进入混杂模式。 一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。 当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序。 如果设备接入的交换机开启了混杂模式,使用 -p 选项可以有效地过滤噪声。
额外介绍几个常用语法参数
显示 ASCII 字符串
-A 表示使用 ASCII 字符串打印报文的全部数据,这样可以使读取更加简单,方便使用 grep 等工具解析输出内容。 -X 表示同时使用十六进制和 ASCII 字符串打印报文的全部数据。这两个参数不能一起使用。例如:tcpdump -A -s0 port 80
抓取特定协议的数据
后面可以跟上协议名称来过滤特定协议的流量,以 UDP 为例,可以加上参数 udp 或 protocol 17 ,这两个命令意思相同。例如:tcpdump -i eth0 udp
抓取特定主机的数据
使用过滤器 host 可以抓取特定目的地和源 IP 地址的流量。例如:tcpdump -i eth0 host 10.10.1.1
将抓取的数据写入文件
使用 tcpdump 截取数据报文的时候,默认会打印到屏幕的默认输出,你会看到按照顺序和格式,很多的数据一行行快速闪过,根本来不及看清楚所有的内容。不过,tcpdump 提供了把截取的数据保存到文件的功能,以便后面使用其他图形工具(比如 wireshark,Snort)来分析。-w 选项用来把数据报文输出到文件:tcpdump -i eth0 -s0 -w test.pcap
02、过滤器
当我们在使用tcpdump会发现网络报文数量异常多,而我们关心的数据通常只占到其中很小的一部分,这个时候过滤器就起到了重要作用。它提供了灵活的鱼饭可以精确的截取我们关系的数据,简化分析的工作量。
Host 过滤器
Host 过滤器用来过滤某个主机的数据报文,例如:tcpdump host 127.0.0.1,该命令只会抓取所有与127.0.0.1发生交互的流量数据,如果只想抓取该主机发出的流量,可以使用下面的命令:tcpdump src host 127.0.0.1
Network 过滤器
Network 过滤器用来过滤某个网段的数据,使用的是 CIDR [2] 模式。可以使用四元组(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
因篇幅有限,本文就先讲点基础的,欢迎大家一起沟通交流!