linux下抓包工具--tcpdump介绍

文章目录

    • [1. 前言](#1. 前言)
    • [2. 命令介绍](#2. 命令介绍)
    • [3. 常见选项](#3. 常见选项)
        • [3.1. 接口与基本控制](#3.1. 接口与基本控制)
        • [3.2 输出控制](#3.2 输出控制)
        • [3.3 文件操作](#3.3 文件操作)
        • [3.4 高级调试](#3.4 高级调试)
    • [4. 过滤表达式](#4. 过滤表达式)
        • [4.1 协议类型](#4.1 协议类型)
        • [4.2 方向与地址](#4.2 方向与地址)
        • [4.3 逻辑运算符](#4.3 逻辑运算符)
    • [5. 典型使用场景](#5. 典型使用场景)
        • [5.1 网络故障排查](#5.1 网络故障排查)
        • [5.2 安全分析与入侵检测](#5.2 安全分析与入侵检测)
        • [5.3 性能分析与优化](#5.3 性能分析与优化)

linux下抓包工具--tcpdump介绍

1. 前言

⽹络世界中的数据包交互我们⾁眼是看不⻅的,这个时候对于我们而言就是很抽象,如果可以把交互过程"可视化",我们就更容易了解网络了。tcpdump和wireshark就是2个分析网络的神器。

  • tcpdump 仅⽀持命令⾏格式使⽤,常⽤在 Linux 服务器中抓取和分析⽹络包。

  • Wireshark 除了可以抓包外,还提供了可视化分析⽹络包的图形⻚⾯。

这两个工具实际上是搭配使⽤的,先⽤ tcpdump 命令在 Linux 服务器上抓包,接着把抓包的⽂件拖出到

Windows 电脑后,⽤ Wireshark 可视化分析。如果实在 win 环境下,直接使用 Wireshark 就可以了。

本文主要针对tcpdump抓包进行介绍。

2. 命令介绍

tcpdump 命令格式如下:

bash 复制代码
tcpdump [ -adeflnNOpqStvx ] [ -c count ] [ -F file ]
[ -i interface ] [ -r file ] [ -s snaplen ]
[ -T type ] [ -w file ] [ expression ]

# 简化一下命令形式
tcpdump [选项] [过滤表达式]

核心组成:

  • 选项:控制抓包行为(如接口选择、输出格式、保存文件等)。
  • 过滤表达式:基于协议、IP、端口等条件筛选数据包

3. 常见选项

3.1. 接口与基本控制
选项 作用 示例
-i <接口> 指定监听网卡(如eth0、any) tcpdump -i eth0(监听eth0网卡)
-c <数量> 抓取指定数量包后停止 tcpdump -c 10(抓10个包后退出)
-D 列出系统可用网络接口 tcpdump -D(查看所有接口名称)

3.2 输出控制
选项 作用 示例
-n 禁用DNS解析,直接显示IP地址 tcpdump -n(显示192.168.1.1而非主机名)
-nn 禁用端口服务名解析(显示数字端口) tcpdump -nn(显示80而非HTTP)
-v/-vv 输出详细信息(TTL、协议头等) tcpdump -vv(显示完整协议头)
-A 以ASCII格式显示数据内容 tcpdump -A(查看HTTP明文请求)
-X 十六进制+ASCII显示数据包 tcpdump -X(分析二进制协议)
3.3 文件操作
选项 作用 示例
-w <文件> 保存抓包数据到文件 tcpdump -w capture.pcap(保存为Wireshark可读格式)
-r <文件> 读取已保存的抓包文件 tcpdump -r capture.pcap(分析离线数据)
-C <大小> 限制抓包文件大小(单位MB) tcpdump -C 100(每100MB分割文件)
3.4 高级调试
选项 作用 示例
-e 显示数据链路层头部(MAC地址) tcpdump -e(分析ARP或交换机转发)
-t 不显示时间戳 tcpdump -t(简化输出)

4. 过滤表达式

过滤表达式由 协议类型 、方向 、逻辑运算符 组合构成:

4.1 协议类型
  • 协议 :tcp、udp、icmp、arp等。

  • 示例 :tcpdump icmp(仅抓ICMP包)

    bash 复制代码
    # ether:icmp协议中没有源ip和目的ip,所以需要依赖于ether 协议
    tcpdump -i wlan0 ether src 48:8f:4c:ee:c6:aa #抓取源mac为48:8f:4c:ee:c6:aa的数据包
4.2 方向与地址
  • 方向 :src(源)、dst(目标)、host【src or dst(双向)】。
  • IP/端口 :host 192.168.1.1、port 80、portrange 1-1024 (portrange 用于指定端口范围,格式为 portrange start-end)
bash 复制代码
sudo tcpdump 'src 192.168.1.106 and src port 22'  # 抓取来自192.168.1.106的SSH流量
4.3 逻辑运算符
  • 与 :and(如tcp and port 80)。
  • 或 :or(如host 192.168.1.1 or 192.168.1.2)。
  • 非 :not(如not arp)

5. 典型使用场景

5.1 网络故障排查
  • 场景:当遇到网络连接延迟、丢包或服务不可达时,通过抓包分析数据包交互过程。

  • 示例:

    • 排查 SSH 连接缓慢

      bash 复制代码
      sudo tcpdump -i eth0 port 22

      若发现大量 DNS 查询请求,可能是 DNS 解析延迟导致问题。

    • 分析 TCP 握手失败

      bash 复制代码
      sudo tcpdump -i wlan0  'tcp[tcpflags] & (tcp-syn | tcp-ack) != 0'
    • 检测ICMP不可达错误

      bash 复制代码
      sudo tcpdump 'icmp[0] == 3'  # 抓取ICMP目标不可达消息
5.2 安全分析与入侵检测
  • 场景:检测异常流量(如端口扫描、DDoS 攻击)或未授权访问。

  • 示例:

    • 捕获高频 SYN 包(可能为 SYN Flood 攻击):

      bash 复制代码
      sudo tcpdump -i wlan0 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0' | wc -l
    • 分析恶意 HTTP 请求:

      bash 复制代码
      sudo tcpdump -i wlan0 'port 80 and (tcp port 80) and (tcp[tcpflags] & tcp-push != 0)' | grep "GET /malicious.php"
5.3 性能分析与优化
  • 场景:监控网络带宽占用、协议开销或优化网络参数(如 TCP 窗口大小)。

  • 示例:

    • 统计特定端口的流量速率:

      bash 复制代码
      sudo tcpdump -i wlan0 -c 1000 port 443 | pv -l -s 10M > /dev/null
    • 分析 TCP 重传率:

      bash 复制代码
      sudo tcpdump -i wlan0 'tcp & 0x08 != 0' #通过标志位 0x08(重传标志)判断丢包情况
相关推荐
迷途之人不知返10 小时前
【动态库与静态库】-3-静态链接与加载
linux
Gauss松鼠会10 小时前
GaussDB 中 gsql 与 DBeaver(JDBC)客户端工具查询时间不一致:原因、排查与处理
运维·服务器·数据库·sql·gaussdb·经验总结
谙弆悕博士10 小时前
debian快速换源
linux·运维·windows·debian·下载·换源·网络问题
.道阻且长.10 小时前
Linux基本开发工具:编译器gcc/g++
linux·运维·服务器·职场和发展
Industio_触觉智能11 小时前
瑞芯微RK系列调试工具与量产测试手册-上|串口日志打通与JTAG兜底调试
linux·sdk·jtag·瑞芯微·调试工具·rk3576·量产调试
Decay__17 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
贞明电子19 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
HideF19 小时前
Linux
linux·服务器·网络
万联WANFLOW19 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
Ruiery21 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器