介绍

Tcpdump 是 Linux 系统下的一个强大的命令行网络抓包工具,同时也是一个网络数据采集分析工具。它使用 libpcap 库来抓取网络数据包,这个库在几乎所有的 Linux/Unix 系统中都有。 Tcpdump 可以截获网络上传送的数据包并进行分析,支持针对网络层、协议、主机、网络或端口的过滤,并提供与(and)、或(or)、非(not)等逻辑语句来帮助去除无用的信息。

作为管理员必备的工具之一,tcpdump 以其强大的功能和灵活的截取策略,成为高级系统管理员分析网络和排查问题的重要工具。此外,由于提供了源代码并且公开了接口,所以 tcpdump 具备很强的可扩展性,对于网络维护和入侵检测都是非常有用的工具。需要注意的是,因为 tcpdump 需要将网络接口设置为混杂模式,所以普通用户不能正常执行,只有具有 root 权限的用户才能直接执行它来获取网络上的信息。

安装

有部分系统已经默认安装了 tcpdump,如果没有安装,直接使用软件包管理器进行安装即可。

使用

捕捉数据包

捕捉数据包,并将其保存为 pcap 格式数据包。默认监听的网卡为 eth0,运行一段时间后,按 ctrl+c 停止抓包,数据会自动保存。

1
tcpdump -w output.pcap

捕获指定 IP

通常情况下,TCPDump 会捕获全局域网的数据包。这样会造成数据包很大,不易分析数据,因为我们可以对其进行简单的过滤。如,只捕获 192.168.123.43 这台设备的数据包。

1
tcpdump host 192.168.123.43 -w output.pcap

捕获特定协议

TCPDump 可以通过协议名称 (tcp udp icmp arp) 过滤要捕获的数据包。

1
tcpdump tcp -w output.pcap

捕获特定端口

1
tcpdump port 80 -w output.pcap

捕获特定网卡

1
tcpdump -i eth0 -w output.pcap

其他参数

参数 说明
-a 尝试将网络和广播地址转换成名称
-d 把编译过的数据包编码转换成可阅读的格式。
-e 在每列上显示连接层级的文件头
-f 用数字显示网际网络地址
-i 使用指定的网络设备送出数据包
-v 详细显示指令执行过程
-w 把数据包数据写入指定的文件