找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

478

积分

0

好友

62

主题
发表于 前天 12:13 | 查看: 7| 回复: 0

tcpdump是Linux/Unix系统上一款功能强大的命令行网络抓包与分析工具。它能帮助工程师和系统管理员洞察网络流量,快速定位和解决各类网络问题。

基础使用

tcpdump的基本命令格式如下:

tcpdump [选项] [表达式]
  • 选项:控制抓包行为,如指定网卡、输出格式等。
  • 表达式:用于过滤和筛选特定的数据包。
示例 1:捕获指定网卡流量

要监听名为ens33的网卡上的所有流量,需使用sudo获取权限:

sudo tcpdump -i ens33
  • -i:指定网络接口名称,可通过ip addr命令查看。
示例 2:过滤特定协议

若只需捕获UDP协议的数据包,在命令后添加协议关键字即可:

sudo tcpdump -i ens33 udp

同理,使用tcp关键字可过滤TCP流量。

示例 3:针对特定端口抓包

通过port关键字可以抓取来往于特定端口的数据,例如监控DNS查询(端口53):

sudo tcpdump -i ens33 port 53
示例 4:保存抓包结果

使用-w选项可以将原始数据包保存为文件,便于后续使用如Wireshark等图形化工具进行深度分析。这对于运维/DevOps工作中的问题复盘非常有用。

sudo tcpdump -i ens33 -w capture.pcap

进阶过滤技巧

tcpdump支持使用andornot等逻辑运算符组合复杂的过滤表达式,实现精准捕获。

  • 捕获来自特定IP且目标为Web服务的流量
    sudo tcpdump -i ens33 ‘tcp and src host 192.168.1.100 and dst port 80’
  • 捕获发往多个目标主机的流量
    sudo tcpdump -i ens33 ‘dst host 192.168.1.1 or dst host 192.168.1.2’
常用选项速查
选项 说明
-n 禁用主机名解析,直接显示IP地址。
-nn 禁用主机名和端口名解析,全部以数字显示。
-c N 仅捕获N个数据包后自动停止。
-s 0 设置抓包长度,0表示抓取完整数据包。
-X 同时以十六进制和ASCII码形式输出数据包内容。

实战:分析DNS查询过程

让我们通过一个实例,观察一次完整的DNS查询。

  1. 在终端A启动tcpdump,监听DNS端口流量:
    sudo tcpdump -i ens33 -n udp port 53
  2. 在终端B执行一条ping命令,触发DNS查询:
    ping www.baidu.com
  3. 观察终端A的输出,结果类似于:
    22:19:17.750222 IP 192.168.1.39.36573 > 192.168.1.1.53: 38393+ A? www.baidu.com. (31)
    22:19:17.763217 IP 192.168.1.1.53 > 192.168.1.39.36573: 38393 3/5/9 CNAME www.a.shifen.com., A 111.45.11.5 (351)
    • 第一行:客户端(192.168.1.39)向DNS服务器(192.168.1.1)发出一个A记录查询请求。
    • 第二行:DNS服务器返回响应,包含了查询到的IP地址(111.45.11.5)。 这个简单的过程清晰地展示了网络/系统层面DNS协议的应用层交互。

总结

tcpdump是网络问题排查和协议学习的利器。通过命令行的灵活组合,你可以精确捕获并分析网络流量,如同拥有透视网络的能力。掌握其基础与进阶用法,将极大提升你在Linux环境下的网络调试效率。将捕获的pcap文件导入Wireshark进行可视化分析,是深入理解复杂网络协议交互的常见工作流。




上一篇:HexHub一站式开发运维工具:集成数据库、SSH终端与Docker可视化管理
下一篇:CMake嵌入式开发实战:模块化项目构建与交叉编译配置指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-7 03:45 , Processed in 0.070594 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表