Linux系统应用与设置(4):Linux抓包工具tcpdump

1. 简述

tcpdump 是一款广泛使用的命令行网络分析工具,它能够捕获和分析网络上的数据包。这个强大的工具对于网络故障排查、安全监控和网络流量分析非常有用。

值得注意的是,通过tcpdump抓取的数据还可以通过保存为*.pcap文件,然后使用wireshark进行更深层次的可视化分析。

2. 基本语法

tcpdump 的基本语法如下:

tcpdump [options] ... [expression]

其中,

options:用于指定如何捕获和显示数据包的各种参数。

expression:用于过滤捕获的数据包。

3. 常用选项

****-i <interface>:****指定网络接口,如 eth0。

****-nn:****不要解析网络名称(例如,不要将IP地址转换为主机名)。

****-X 或 -XX:****显示十六进制和 ASCII 编码的数据。如下所示,除第一行以外,数据域用HEX形式进行打印输出,同时也伴有ASCII输出。

****-A:****将接收到的数据以ASCII码的形式打印出来,如下所示,除第一行外,数据域都是ASCII码。

****-w <file>:****将捕获的数据包写入文件,用于后续分析。

****-r <file>:****从文件中读取数据包。

****-c <count>:****捕获指定数量的数据包后停止。

除以上常用的选项以外,还有如下,可灵活使用。

****-C:****在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。

****-d:****将匹配信息包的代码以人们能够理解的汇编格式给出。

****-dd:****将匹配信息包的代码以c语言程序段的格式给出。

****-ddd:****将匹配信息包的代码以十进制的形式给出。

****-D:****打印出系统中所有可以用tcpdump截包的网络接口。

****-e:****在输出行打印出数据链路层的头部信息。

****-E:****用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。

****-f:****将外部的Internet地址以数字的形式打印出来。

****-F:****从指定的文件中读取表达式,忽略命令行中给出的表达式。

****-l:****使标准输出变为缓冲行形式,可以把数据导出到文件。

****-L:****列出网络接口的已知数据链路。

****-m:****从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。

****-M:****如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。

****-b:****在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。

****-n:****不把网络地址转换成名字。

****-N:****不输出主机名中的域名部分。例如,'nic.ddn.mil'只输出'nic'。

****-t:****在输出的每一行不打印时间戳。

****-O:****不运行分组分组匹配(packet-matching)代码优化程序。

****-P:****不将网络接口设置成混杂模式。

****-q:****快速输出。只输出较少的协议信息。

****-S:****将tcp的序列号以绝对值形式输出,而不是相对值。

****-s:****从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。

****-T:****将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。

****-t:****不在每一行中输出时间戳。

****-tt:****在每一行中输出非格式化的时间戳。

****-ttt:****输出本行和前面一行之间的时间差。

****-tttt:****在每一行中输出由date处理的默认格式的时间戳。

****-u:****输出未解码的NFS句柄。

****-v:****输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。

****-vv:****输出详细的报文信息。

4. 过滤表达式

host <hostname>:只捕获与指定主机名或IP地址相关的数据包。

port <port>:只捕获特定端口的数据包。

src <address>:只捕获源地址为指定地址的数据包。

dst <address>:只捕获目的地址为指定地址的数据包。

and、or、not:逻辑运算符,用于组合多个过滤条件。

5. 示例

(1)捕获所有经过eth0接口的TCP数据包:

tcpdump -i eth0 tcp

(2)捕获指定接口的所有数据包,并写入文件:

tcpdump -i eth0 -w capture.pcap

(3)从文件中读取数据包:

tcpdump -r capture.pcap

(4)只捕获源地址为192.168.1.100的数据包:

tcpdump src 192.168.1.100

(5)只捕获目的端口为80的数据包:

tcpdump 'dst port 80'

(6)同时根据源地址和目的端口过滤数据包:

tcpdump 'src 192.168.1.100 and dst port 80'

(7)实时显示数据包的十六进制和ASCII编码:

tcpdump -X -nn -i eth0

(8)捕获特定数量的数据包:

tcpdump -c 100 -i eth0

(9)使用复杂过滤表达式:

tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst 192.168.1.0/24'

6. 高级用法

使用 tcpdump 进行实时监控:

tcpdump -i any 'tcp port 22' -l -n -vvv -s 0 -w ssh_traffic.pcap

这个命令实时捕获所有进入22端口的TCP数据包,不解析主机名,不限制源和目的端口,不使用任何捕获长度限制,并将结果写入 ssh_traffic.pcap 文件。

分析 tcpdump 捕获的数据包: 使用 -nnX 选项可以显示更详细的信息,包括每个数据包的十六进制和ASCII编码,这对于深入分析数据包内容非常有用。

7. 使用wireshark分析

(1)写入本地

使用tcpdump进行抓包时,通过"-w"选项,将抓到的数据包写入本地,参考如下。

tcpdump -i eth0 -w capture.pcap

(2)wireshark导入

在 Wireshark 中,选择 "File"(文件)> "Open"(打开),然后浏览到你保存 tcpdump 捕获数据的 .pcap 文件。选择文件并点击 "Open"(打开)。

(3)过滤分析

通过wireshark的过滤功能,协议分析功能以及图像化显示功能,分析当前数据包,并可将分析结果写入本地。

8. 注意事项

(1)使用 tcpdump 可能需要管理员权限,尤其是在捕获经过网络接口的数据包时。

(2)过滤表达式需要仔细设计,以确保只捕获所需的数据包。

(3)分析 tcpdump 的输出需要一定的网络协议知识。

(4)tcpdump 是网络管理员和安全专家的重要工具,通过掌握其使用,可以更有效地监控和分析网络流

相关推荐
枫叶丹41 小时前
【在Linux世界中追寻伟大的One Piece】进程信号
linux·运维·服务器
刻词梨木1 小时前
ubuntu中挂载点内存不足,分配不合理后使用软链接的注意事项
linux·运维·ubuntu
灯火不休ᝰ2 小时前
[win7] win7系统的下载及在虚拟机中详细安装过程(附有下载文件)
linux·运维·服务器
powerfulzyh6 小时前
Ubuntu24.04远程开机
linux·ubuntu·远程工作
ulimpid6 小时前
Command | Ubuntu 个别实用命令记录(新建用户、查看网速等)
linux·ubuntu·command
HHoao6 小时前
Ubuntu启动后第一次需要很久才能启动GTK应用问题
linux·运维·ubuntu
小灰兔的小白兔6 小时前
【Ubuntu】Ubuntu常用命令
linux·运维·ubuntu
GFCGUO6 小时前
ubuntu18.04运行OpenPCDet出现的问题
linux·python·学习·ubuntu·conda·pip
winds~6 小时前
ubuntu中软件的进程管理-结束软件运行
linux·运维·ubuntu
阳光不锈@6 小时前
麒麟桌面系统安装和配置Node.js
linux·麒麟系统安装node.js