Linux 抓包工具——tcpdump

119 阅读3分钟

1 简介

用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

再简单一点就是:抓取网卡上传输的数据流。

再简单些:抓包。

image.png

2 tcpdump 与 wireshark

Wireshark(以前是ethereal) 是 Windows下非常简单易用的抓包工具。但在Linux下很难找到一个好用的能与之匹敌的图形化抓包工具。

幸好 Linux 下还有tcpdump这个工具。可以使用 tcpdump + wireshark 的完美组合实现:

在 Linux 里抓包,然后在 windows 里对数据包进行分析。

3 命令格式

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型

(2)-i eth1 : 只抓经过接口eth1的包,服务器上可能会存在多个网络接口,需要指明是监听哪个接口

(3)-t : 不显示时间戳

(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包

(5)-c 100 : 只抓取100个数据包

(6)dst port ! 22 : 不抓取目标端口是22的数据包

(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24,可以是某一个网络地址或是具体的IP地址

(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

对于这条指令的翻译

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

  • 抓取Linux上所有经过 eth1 这个网络接口的 TCP 协议的包;

  • 排除22端口,同时只抓取来自网络地址为 192.168.1.0 的数据;

  • 在抓取的报文中不要显示时间戳,且只抓取前100个数据完整的数据包;

  • 最后,将抓取的数据保存到 target.cap 这个文件中。

需要注意的是,这里仅能抓取执行命令后的数据,在命令执行前的数据,是无法抓取到的。

4 数据抓取

执行命令后,将对数据包进行抓取。

[root@node1 ~]# tcpdump tcp -i eth0 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.137.5 -w ./target.cap

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

当不再需要抓取时,使用 Ctrl + C 停止命令即可。

因为这里是将生成的文件放在了当前目录,所以可在当前目录下查看到生成的文件。

image.png

可以将该文件下载到 Windows 电脑上,使用 WireShark 打开文件即可查看到相关会话内容。

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 22 天,点击查看活动详情