当前位置: 首页 > news >正文

tcpump | 深入探索网络抓包工具

关注:CodingTechWork

概述

tcpdump 是一款强大的命令行网络抓包工具,广泛应用于网络分析和故障排查。它能捕获并显示通过计算机网络接口传输的各种网络数据包,并且支持丰富的过滤规则,让用户能够精确地监控和分析网络流量。tcpdump 运行在类 Unix 系统(如 Linux 和 macOS)上,并且可以用于对本地网络接口或远程主机的网络流量进行捕获和分析。

安装

在大多数 Linux 发行版中,tcpdump 默认是预装的,但如果没有,可以使用以下命令安装:

  • 对于Ubuntu 系列:

    sudo apt-get install tcpdump
    
  • 对于 CentOS/RHEL 系列:

    sudo yum install tcpdump
    
  • 对于 macOS:

    brew install tcpdump
    

命令语法

tcpdump 的基本语法格式如下:

tcpdump [选项] [表达式]

常用选项

  • -i <interface>:指定监听的网络接口(如 eth0, wlan0, lo 等),指定网卡;-i any 为全部接口。
  • -w <file>:将抓到的数据包写入到文件中(通常是 .pcap 格式),以便之后分析。
  • -r <file>:从文件读取数据包进行分析。
  • -n:不进行 DNS 解析,直接显示 IP 地址。
  • -v / -vv / -vvv:提高输出的详细级别。
  • -c <count>:指定抓取的包数量,当抓取指定数量的数据包后自动退出。
  • -s <snaplen>:指定捕获的最大数据包长度,默认值是 262144。
  • -X:以十六进制和 ASCII 格式显示数据包内容。
  • -p:不将接口设置为混杂模式(默认启用)。

常用过滤表达式:

  • host <ip>:捕获指定 IP 地址的所有流量。
  • src <ip>:捕获源地址为指定 IP 的所有数据包。
  • dst <ip>:捕获目标地址为指定 IP 的所有数据包。
  • port <port>:捕获指定端口的流量。
  • tcp / udp:捕获指定协议的流量。
  • and, or, not:用来组合多个过滤条件。

使用案例

1. 捕获本地网络接口 eth0 上的所有 TCP 流量

sudo tcpdump -i eth0 tcp

这个命令将捕获所有通过 eth0 接口的 TCP 流量。

2. 捕获来自特定 IP 地址的流量

sudo tcpdump -i eth0 src 192.168.1.100

该命令将捕获所有源地址为 192.168.1.100 的数据包。

3. 捕获指定端口的流量

sudo tcpdump -i eth0 port 80

此命令会捕获所有通过 HTTP (端口 80) 的流量。

4. 捕获并保存数据包到文件

sudo tcpdump -i eth0 -w capture.pcap

这个命令会捕获所有流量并将其保存到名为 capture.pcap 的文件中。

5. 从文件读取数据包并分析

tcpdump -r capture.pcap

这个命令从文件 capture.pcap 中读取捕获的数据包并进行分析。

6. 捕获指定数量的数据包

sudo tcpdump -i eth0 -c 10

该命令会捕获 10 个数据包后自动停止。

7. 捕获并以十六进制和 ASCII 格式显示数据包内容

sudo tcpdump -i eth0 -X

这个命令不仅会捕获流量,还会以十六进制和 ASCII 格式显示数据包内容。

在以下使用场景中,结合具体命令和返回结果进行案例分析,帮助深入理解 tcpdump 的使用。


使用场景

1. 网络故障排查

场景

某个 web 服务(HTTP 端口 80)无法访问,网络管理员需要排查原因。

命令

sudo tcpdump -i eth0 port 80

返回结果分析

12:34:56.789123 IP 192.168.1.100.12345 > 192.168.1.200.80: Flags [S], seq 123456, win 512, length 0
12:34:56.789456 IP 192.168.1.200.80 > 192.168.1.100.12345: Flags [S.], seq 654321, ack 123457, win 512, length 0
12:34:56.789789 IP 192.168.1.100.12345 > 192.168.1.200.80: Flags [.], ack 654322, win 512, length 0

分析

  • 第一行:客户端 (192.168.1.100) 向服务器 (192.168.1.200) 发送 SYN 包,表示请求建立 TCP 连接。
  • 第二行:服务器回应一个 SYN-ACK 包,表示准备建立连接。
  • 第三行:客户端确认收到服务器的 SYN-ACK 包,发送 ACK 包表示连接建立。

如果没有收到服务器的回应,说明可能是服务器无法响应,或有防火墙阻止了连接。此时,tcpdump 有助于定位问题是否出在 TCP 握手阶段。


2. 安全分析

场景

怀疑内部网络遭遇 DDoS 攻击,管理员想要检测是否有大量的异常流量。

命令
sudo tcpdump -i eth0 icmp
返回结果分析
12:40:01.123456 IP 192.168.1.100 > 192.168.1.200: ICMP echo request, id 1, seq 1, length 64
12:40:01.123789 IP 192.168.1.100 > 192.168.1.200: ICMP echo request, id 1, seq 2, length 64
12:40:01.124123 IP 192.168.1.100 > 192.168.1.200: ICMP echo request, id 1, seq 3, length 64

分析

  • 如果出现大量 ICMP 回显请求(Ping)并且频繁发起,这可能是一个典型的 DDoS 攻击表现,攻击者利用大量的 ICMP 请求消耗目标服务器的资源。
  • tcpdump 捕获的 ICMP 包显示出攻击源地址及目标地址,安全人员可以进一步分析来源并采取防护措施,如封锁源 IP。

3. 流量分析

场景

管理员需要分析某台主机的流量,了解其带宽使用情况。

命令

sudo tcpdump -i eth0 host 192.168.1.100

返回结果分析

12:45:00.123456 IP 192.168.1.100.12345 > 192.168.1.200.80: Flags [P.], seq 123456, ack 654321, win 512, length 500
12:45:00.123789 IP 192.168.1.200.80 > 192.168.1.100.12345: Flags [.], ack 123457, win 512, length 0
12:45:01.123456 IP 192.168.1.100.12345 > 192.168.1.200.80: Flags [P.], seq 123457, ack 654322, win 512, length 300

分析

  • 通过 tcpdump 捕获目标主机(192.168.1.100)的流量,可以看到它与其他设备(192.168.1.200)的通信。
  • 数据包中的 length 字段显示了每个数据包的大小,例如第一行的 length 500 表示发送了 500 字节的数据。
  • 通过这些数据,管理员可以分析出该主机是否有异常流量或者带宽使用过高的情况。如果发现某个主机持续大量发送数据包,可能存在问题。

4. 网络协议分析

场景

开发人员需要调试一个自定义协议的实现,确保数据正确传输。

命令

sudo tcpdump -i eth0 -nn -v

返回结果分析

12:50:01.234567 IP 192.168.1.100.12345 > 192.168.1.200.80: Flags [P.], seq 123456, ack 654321, win 512, length 200x0000:  45 00 00 3c 1c 46 40 00 40 06 b1 e6 c0 a8 01 64  E..<.F@.@....d0x0010:  c0 a8 01 c8 30 39 00 50  02 04 d1 e8 8b 04 00 00  ..0.9.P........

分析

  • 通过 -nn 参数,tcpdump 显示原始的 IP 和端口,而不进行主机名解析。
  • -v 参数让输出信息更详细,显示 TCP 数据包的更多信息,包括序列号、确认号、窗口大小等。
  • 如果开发人员在调试自定义协议,可以分析数据包的详细内容,包括每个数据包的有效载荷,以确认协议是否按照预期工作。

总结

tcpdump 是一个强大的网络数据包捕获和分析工具,适用于多种场景:

  • 网络故障排查:可以检查是否有丢包、连接中断等问题。
  • 安全分析:可以检测异常流量,如 DDoS 攻击、未经授权的访问等。
  • 流量分析:帮助管理员了解网络带宽的使用情况。
  • 网络协议分析:帮助开发人员调试协议的实现,确保数据正确传输。

结果示例解析

1. TCP 三次握手(Three-Way Handshake)

场景

当客户端与服务器建立 TCP 连接时,经过三次握手。通过 tcpdump 捕获这些包,可以分析连接是否正常建立。

命令

sudo tcpdump -i eth0 tcp

返回结果分析

12:30:01.234567 IP 192.168.1.100.12345 > 192.168.1.200.80: Flags [S], seq 123456, win 512, length 0
12:30:01.234890 IP 192.168.1.200.80 > 192.168.1.100.12345: Flags [S.], seq 654321, ack 123457, win 512, length 0
12:30:01.235123 IP 192.168.1.100.12345 > 192.168.1.200.80: Flags [.], ack 654322, win 512, length 0

分析

  • 第一步(SYN):客户端(192.168.1.100)向服务器(192.168.1.200)发送一个带有 SYN 标志的数据包,表示请求建立连接。
  • 第二步(SYN-ACK):服务器回应一个带有 SYN 和 ACK 标志的数据包,表示同意建立连接,并确认客户端的请求。
  • 第三步(ACK):客户端向服务器发送 ACK 数据包,表示连接已建立,可以开始数据传输。

如果中间任何一步没有响应,表示连接没有正常建立,tcpdump 可帮助识别是客户端、服务器,还是网络设备(如防火墙)导致的连接问题。


2. TCP 四次挥手(Four-Way Handshake)

场景

TCP 连接关闭时,经过四次挥手。我们可以通过 tcpdump 观察到这一过程。

命令

sudo tcpdump -i eth0 tcp

返回结果分析

12:40:01.234567 IP 192.168.1.100.12345 > 192.168.1.200.80: Flags [F.], seq 123457, ack 654322, win 512, length 0
12:40:01.234890 IP 192.168.1.200.80 > 192.168.1.100.12345: Flags [F.], seq 654321, ack 123458, win 512, length 0
12:40:01.235123 IP 192.168.1.100.12345 > 192.168.1.200.80: Flags [.], ack 654322, win 512, length 0
12:40:01.235456 IP 192.168.1.200.80 > 192.168.1.100.12345: Flags [.], ack 123459, win 512, length 0

分析

  • 第一步(FIN):客户端发起连接关闭,发送带有 FIN 标志的数据包。
  • 第二步(FIN-ACK):服务器响应,发送带有 FIN 和 ACK 标志的数据包。
  • 第三步(ACK):客户端确认收到服务器的 FIN,发送 ACK 包。
  • 第四步(ACK):服务器确认收到客户端的 ACK 包,连接彻底关闭。

如果 tcpdump 捕获到某一步未完成,可能会导致连接无法正常关闭,进而影响资源释放和网络状态。


3. UDP 流量分析

场景

UDP 是一种无连接协议,通常用于实时通信或高效的数据传输,tcpdump 可以帮助分析 UDP 数据包。

命令
sudo tcpdump -i eth0 udp

返回结果分析

12:50:01.234567 IP 192.168.1.100.12345 > 192.168.1.200.53: UDP, length 57
12:50:01.235123 IP 192.168.1.200.53 > 192.168.1.100.12345: UDP, length 78

分析

  • 第一行表示客户端(192.168.1.100)发送一个 UDP 数据包到服务器(192.168.1.200)的 53 端口(通常是 DNS 查询)。
  • 第二行表示服务器返回的 UDP 数据包,可能是 DNS 响应。

由于 UDP 是无连接的,tcpdump 不会像 TCP 那样显示连接建立或关闭过程。它仅仅展示数据包的发送和接收。UDP 流量的捕获对于诊断实时服务(如 VoIP、视频流等)特别有用。


4. 源站访问(Source Host Access)

场景

网络管理员需要查看特定主机的所有访问记录,确定该主机是否频繁发起请求,或是否有异常的访问行为。

命令

sudo tcpdump -i eth0 host 192.168.1.100

返回结果分析

12:55:01.234567 IP 192.168.1.100.12345 > 192.168.1.200.80: Flags [P.], seq 123456, ack 654321, win 512, length 100
12:55:01.234890 IP 192.168.1.200.80 > 192.168.1.100.12345: Flags [.], ack 123457, win 512, length 0
12:55:02.234567 IP 192.168.1.100.12346 > 192.168.1.200.80: Flags [P.], seq 123457, ack 654322, win 512, length 200

分析

  • 捕获了主机 192.168.1.100 的流量,其中可以看到它向 192.168.1.200 的 80 端口发起了多个连接请求。
  • 通过这些数据,管理员可以判断该主机是否频繁发起请求,或者是否有异常流量,如不正常的频繁连接。

这种分析对于定位网络中的流量源、异常行为或潜在的网络攻击(如扫描或暴力破解)非常有用。


总结

tcpdump 是一个非常强大且灵活的网络抓包工具,适用于各种网络分析和调试场景。从简单的流量捕获到复杂的协议分析,tcpdump 都能提供强有力的支持。掌握 tcpdump 的使用,可以帮助网络管理员、开发人员和安全专家深入了解网络环境,解决网络问题。


文章转载自:

http://GLrrWqcX.rbsmm.cn
http://4oDwTiHV.rbsmm.cn
http://mWP9kQOv.rbsmm.cn
http://shJkLXmh.rbsmm.cn
http://JZDngsvo.rbsmm.cn
http://iDZgSaXP.rbsmm.cn
http://2k0CKjkA.rbsmm.cn
http://bbCc5xrt.rbsmm.cn
http://DePWQ2z8.rbsmm.cn
http://H7wWlwjE.rbsmm.cn
http://oYz3POqj.rbsmm.cn
http://7pr1udLQ.rbsmm.cn
http://NgI0p683.rbsmm.cn
http://meYAFVdL.rbsmm.cn
http://vUSgvn0A.rbsmm.cn
http://IfiXERk2.rbsmm.cn
http://fmuaufM8.rbsmm.cn
http://DG6P7UDe.rbsmm.cn
http://p0CG3EHn.rbsmm.cn
http://fED263wK.rbsmm.cn
http://Whl32Vp9.rbsmm.cn
http://TWS5pJzv.rbsmm.cn
http://l0UZrNOJ.rbsmm.cn
http://tPApFCNM.rbsmm.cn
http://sCwuCGtF.rbsmm.cn
http://SV2Ix6yi.rbsmm.cn
http://du43lyJm.rbsmm.cn
http://AIrdKdWw.rbsmm.cn
http://yMIfS6Fe.rbsmm.cn
http://LN1Pf1K9.rbsmm.cn
http://www.dtcms.com/a/382743.html

相关文章:

  • scikit-learn 分层聚类算法详解
  • Kafka面试精讲 Day 18:磁盘IO与网络优化
  • javaweb CSS
  • css`min()` 、`max()`、 `clamp()`
  • 超越平面交互:SLAM技术如何驱动MR迈向空间计算时代?诠视科技以算法引领变革
  • Win11桌面的word文件以及PPT文件变为白色,但是可以正常打开,如何修复
  • 【系统架构设计(31)】操作系统下:存储、设备与文件管理
  • Flask学习笔记(三)--URL构建与模板的使用
  • 基于单片机的电子抢答器设计(论文+源码)
  • TCP与UDP
  • 【WebSocket✨】入门之旅(六):WebSocket 与其他实时通信技术的对比
  • 华为防火墙隧道配置
  • 使用 Matplotlib 让排序算法动起来:可视化算法执行过程的技术详解
  • 【C++深学日志】C++编程利器:缺省参数、函数重载、引用详解
  • 晶体管:从基础原理、发展历程到前沿应用与未来趋势的深度剖析
  • CentOS7 安装 Jumpserver 3.10.15
  • jquery 文件上传 (CVE-2018-9207)漏洞复现
  • QML Charts组件之折线图的鼠标交互
  • 工程机械健康管理物联网系统:AIoT技术赋能装备全生命周期智能运维​
  • 第5课:上下文管理与状态持久化
  • SpringBootCodeGenerator使用JSqlParser解析DDL CREATE SQL 语句
  • 【WebSocket✨】入门之旅(五):WebSocket 的安全性
  • PHP使用echarts制作一个很漂亮的天气预报网站(曲线图+实况+未来一周预报)
  • 数据库造神计划第九天---增删改查(CRUD)(5)
  • 简单的折叠cell
  • 贪心算法在边缘计算卸载问题中的应用
  • pyAutoGUI 模块主要功能介绍-(2)键盘功能
  • 基于Qt Creator的Serial Port串口调试助手项目(代码开源)
  • Node.js 编码规范
  • Spring Boot 调度任务在分布式环境下的坑:任务重复执行与一致性保证