1、什么是tcpdump
Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是不可少的。TcpDump是Linux中强大的网络数据采集分析工具之一。
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。
作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的工具之一。
tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。
tcpdump存在于基本的 FreeBSD系统中,由于它需要将网络接口设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。
因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。
2、为什么需要tcpdump
工作环境中,经常遇到数据交互异常、数据对接异常等各类故障。抓包分析是定位问题的一种快速手段,windows抓包可以使用wireshark等工具,linux因为大多数使用shell命令行的缘故,需要例如tcpdump之类的工具进行抓包。
具有以下优点:
- 实时性: 抓包过程中可以实时显示捕获的流量
- 全面性: 支持单独过滤网络协议
- 灵活性: 支持复杂的与或非过滤规则,减少数据包的捕获量
- 兼容性: 支持跨平台多种操作系统
3、tcpdump原理
TCPdump 是 Linux 系统中非常有用的网络工具,运行在用户态,本质上是通过调用 libpcap 库的各种 api 来实现数据包的抓取功能。
通过上图,我们可以很直观的看到,数据包到达网卡后,经过数据包过滤器(BPF)筛选后,拷贝至用户态的 TCPdump 程序,以供 TCPdump 工具进行后续的处理工作,输出或保存到 pcap 文件。
数据包过滤器(BPF)主要作用,就是根据用户输入的过滤规则,只将用户关心的数据包拷贝至 TCPdump,这样能够减少不必要的数据包拷贝,降低抓包带来的性能损耗。
4、如何下载安装tcpdump
官网下载地址:https://www.tcpdump.org/
4.1 先安装libpcap
tar -zxvf libpcap-1.10.3.tar.gzcd libpcap-1.10.3./configuremake make install
4.2 再安装tcpdump
cd tcpdump-4.99.3 ./configuremakemake install
5、tcpdump常用命令
5.1 tcpdump命令基本格式:
tcpdump [选项] [过滤条件]
5.2 tcpdump常用命令组合
常用选项:
1、-i eth0 指定监听的网络接口,例如eth0。
2、-v:详细输出协议信息。-nn:不进行地址和端口的名称解析,直接显示数字。
3、-c 100:只捕获100个数据包后停止。
4、-w /tmp/file:将捕获的数据包写入文件,而不是直接输出到屏幕。
5、-r /tmp/file:从文件中读取数据包。
过滤条件:
1、src host 10.10.10.122:捕获源IP为10.10.10.122的数据包。
2、dst port 22:捕获目的端口为22的数据包。
3、src host 10.10.10.122 and dst port 22:同时满足源IP和目的端口的条件。
4、(src host 10.10.10.2 and dst port 22) or (src host 10.10.10.65 and dst port 80):满足任一条件的包都会被捕获。
6、工作中tcpdump实操命令
(1)捕获eth0网口的所有数据包,以test.pcap保存到/tmp目录下,抓包过程中详细输出协议信息。
tcpdump -i eth0 -w /tmp/test.pcap -v
(2)捕获eth0网口到和IP192.168.1.1交互的所有数据包,以test.pcap保存到/tmp目录下,抓包过程中详细输出协议信息。
tcpdump -i eth0 host 192.168.1.1 -w /tmp/test.pcap -v
(3)捕获eth0网口到和IP192.168.1.1的80端口交互的所有数据包,以test.pcap保存到/tmp目录下,抓包过程中详细输出协议信息。
tcpdump -i eth0 host 192.168.1.1 and dst port 80 -w /tmp/test.pcap -v
(4) 捕获eth0网口到和IP192.168.1.1的80端口交互的前100个数据包,以test.pcap保存到/tmp目录下,抓包过程中详细输出协议信息。
tcpdump -i eth0 host 192.168.1.1 and dst port 80 -w /tmp/test.pcap -v -c 100
(5)捕获eth0网口到和IP192.168.1.1交互的所有数据包,以test.pcap保存到/tmp目录下,当保存的数据包大小超过20M后,创建新的文件继续抓包。抓包过程中详细输出协议信息。
tcpdump -i eth0 host 192.168.1.1 -w /tmp/test.pcap -v -C 20M当第一个文件达到20MB时,它会命名为test.pcap,第二个文件为test-1.pcap,第三个文件为test-2.pcap,依此类推
(6)捕获eth0网口上的arp报文,test.pcap保存到/tmp目录下。抓包过程详细输出协议信息。
tcpdump -i eth0 arp -w /tmp/test.pcap -v
7、抓包过程中可能会遇到的问题
在分析故障时,李工抓取的数据包总是有缺少,请问问题可能出在哪里?
可能抓包时没有使用-s 0
参数。-s 0
这个选项表示不对抓取的数据包进行长度限制,即抓取完整的数据包内容。
默认情况下,tcpdump抓取的数据包长度为68字节,使用-s 0
可以抓取完整的数据包内容,这对于分析网络通信的详细信息非常有用。