通过Linux抓包与Wireshark分析老旧服务流量

190 阅读7分钟

通过Linux抓包与Wireshark分析老旧服务流量

在运维或开发工作中,经常会遇到需要下线老旧服务的情况。然而,在没有任何日志记录、代码老旧且无法修改的情况下,如何判断该服务是否仍有流量访问?一种可行的方法是通过网络抓包来观察请求流量。本文将详细讲解如何在Linux系统上使用抓包工具(如 tcpdump)捕获网络数据包,并结合 Wireshark 分析这些数据包,以确认老旧服务的流量情况。

面试场景:判断老旧服务是否有流量

在一次技术面试中,面试官提出了以下场景题:

目前有一个老旧的服务计划下线,但不清楚是否还有流量访问。这个服务没有日志记录,代码非常老旧,无法安全地添加日志功能,只能通过网络抓包来观察。你会如何操作?

这个问题考察了候选人对Linux系统工具的掌握、网络协议的理解以及分析问题的能力。以下是我的解答思路,涵盖Linux抓包和Wireshark分析的完整流程。

解决思路

由于服务没有日志且无法修改代码,网络抓包是唯一可行的方法。我们需要在Linux服务器上捕获网络流量,然后分析数据包,确认是否有请求到达服务。具体步骤包括:

  1. 使用 tcpdump 在Linux上抓包:捕获服务监听的端口流量,保存为 .pcap 文件。
  2. 使用 Wireshark 分析抓包文件:查看数据包的来源、协议、请求内容等,判断是否有流量。

步骤详解

步骤1:在Linux上使用 tcpdump 抓包

tcpdump 是Linux系统中强大的命令行抓包工具,适合在服务器上捕获网络流量。以下是具体操作流程。

1.1 确认服务信息

假设老旧服务运行在Linux服务器上,监听端口为 8080,使用HTTP协议。我们需要捕获与该端口相关的流量。

首先,确认服务是否正在运行并监听端口:

netstat -tulnp | grep 8080

输出示例:

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      12345/java

确认服务监听在 8080 端口,进程ID为 12345

1.2 安装 tcpdump

如果服务器未安装 tcpdump,需要先安装(需要root权限):

  • 对于Ubuntu/Debian系统:
sudo apt-get update
sudo apt-get install tcpdump
  • 对于CentOS/RHEL系统:
sudo yum install tcpdump
1.3 使用 tcpdump 抓包

假设服务运行在网络接口 eth0 上(可通过 ifconfigip addr 查看网络接口)。我们需要捕获 8080 端口的TCP流量,并将结果保存为 .pcap 文件,供后续分析。

执行以下命令:

sudo tcpdump -i eth0 port 8080 -w traffic_8080.pcap

命令说明:

  • -i eth0:指定监听的网络接口(替换为实际接口名)。
  • port 8080:过滤 8080 端口的流量。
  • -w traffic_8080.pcap:将捕获的数据包保存到 traffic_8080.pcap 文件。
  • sudo:抓包需要root权限。

运行后,tcpdump 会持续捕获流量,直到手动停止(按 Ctrl+C)。为了确保捕获足够的数据,建议在业务高峰期运行一段时间(如1小时)。

1.4 优化抓包(可选)

如果流量较大,可以添加更多过滤条件以减少捕获的数据量。例如,只捕获HTTP协议(端口80或8080)的TCP流量:

sudo tcpdump -i eth0 tcp port 8080 -w traffic_8080.pcap

或者,限制捕获特定主机的流量(假设服务只接收来自 192.168.1.0/24 网段的请求):

sudo tcpdump -i eth0 tcp port 8080 and src net 192.168.1.0/24 -w traffic_8080.pcap
1.5 停止抓包并传输文件

抓包完成后,按 Ctrl+C 停止 tcpdump。生成的 traffic_8080.pcap 文件存储在当前目录下。使用 scpsftp 将文件传输到本地电脑,以便在Wireshark中分析:

scp user@server_ip:/path/to/traffic_8080.pcap .

步骤2:使用 Wireshark 分析抓包文件

Wireshark 是一款功能强大的图形化网络协议分析工具,支持详细解析数据包内容。以下是如何使用 Wireshark 分析 traffic_8080.pcap 的流程。

2.1 安装 Wireshark

在本地电脑上安装 Wireshark

sudo apt-get install wireshark  # Ubuntu/Debian
sudo yum install wireshark      # CentOS/RHEL

安装完成后,启动 Wireshark

2.2 打开抓包文件

Wireshark 中:

  1. 点击 File -> Open
  2. 选择 traffic_8080.pcap 文件并打开。

Wireshark 会显示捕获的所有数据包列表,每个数据包包含时间戳、源IP、目标IP、协议等信息。

2.3 过滤HTTP请求

为了聚焦与服务相关的流量,使用过滤器筛选 8080 端口的HTTP请求:

  1. Wireshark 的过滤栏输入:
http && tcp.port == 8080
  1. 按回车应用过滤器。

过滤器说明:

  • http:只显示HTTP协议的数据包。
  • tcp.port == 8080:限定端口为 8080

过滤后,Wireshark 只显示与 8080 端口相关的HTTP请求和响应。

2.4 分析数据包

在过滤后的数据包列表中,关注以下关键信息:

  • 源IP(Source) :请求的来源IP地址,表明哪些客户端在访问服务。
  • 目标IP(Destination) :服务所在服务器的IP,确认流量是否到达目标。
  • 协议(Protocol) :确认是否为HTTP请求。
  • Info:显示HTTP请求的方法(如GET、POST)和路径。

例如,假设看到以下数据包:

No.     Time           Source         Destination    Protocol  Info
1       2025-04-18     192.168.1.100  192.168.1.10   HTTP      GET /api/status HTTP/1.1
2       2025-04-18     192.168.1.10   192.168.1.100  HTTP      HTTP/1.1 200 OK

分析:

  • 192.168.1.100 向服务(192.168.1.10:8080)发送了GET请求,路径为 /api/status
  • 服务返回了 200 OK,表明请求被处理。
2.5 查看请求详情

选中一个HTTP请求数据包,查看其详细信息:

  1. 在数据包详情面板中,展开 Hypertext Transfer Protocol 部分。

  2. 检查请求的:

    • URL:如 http://192.168.1.10:8080/api/status
    • Headers:如 User-AgentHost 等,可能提供客户端信息。
    • Body:如果请求是POST,可能包含表单数据或JSON。

例如,请求头可能显示:

GET /api/status HTTP/1.1
Host: 192.168.1.10:8080
User-Agent: curl/7.68.0
Accept: */*

这表明请求可能是通过 curl 工具或脚本发起的。

2.6 统计流量模式

为了判断服务是否仍有活跃流量,使用 Wireshark 的统计功能:

  1. 点击 Statistics -> Conversations
  2. 切换到 TCP 标签,查看哪些IP对(源IP和目标IP)有频繁通信。
  3. PacketsBytes 排序,找出流量最多的客户端。

如果发现某些IP频繁发送请求,说明服务仍有活跃用户,可能需要进一步调查这些请求的来源(如内部系统、外部客户)。

2.7 导出分析结果(可选)

如果需要向团队报告分析结果,可以导出特定数据包:

  1. 选中相关数据包。
  2. 点击 File -> Export Selected Packets
  3. 保存为新的 .pcap 文件,或导出为CSV格式供其他工具处理。

分析结果

通过上述步骤,我们可以得出以下结论:

  1. 是否有流量:如果 Wireshark 显示有HTTP请求到达 8080 端口,说明服务仍有流量。
  2. 流量来源:通过源IP和请求头,判断是内部系统、外部用户还是自动化脚本。
  3. 请求频率:通过数据包的时间戳和统计功能,评估流量是否频繁,是否值得保留服务。

例如,如果分析发现只有少量请求,且来源为某个已废弃的测试脚本,可以安全下线服务;如果发现频繁请求来自生产环境,可能需要重新评估下线计划。

注意事项

  1. 权限问题:在Linux上运行 tcpdump 需要root权限,确保有足够权限。
  2. 抓包性能:长时间抓包可能生成大文件,影响服务器性能。建议在非高峰期操作,或限制抓包时间和过滤条件。
  3. 隐私合规:如果抓包涉及用户数据,确保遵守相关隐私法规(如GDPR)。
  4. Wireshark学习曲线:对于复杂流量,建议熟悉Wireshark的过滤语法和分析功能。

总结

通过Linux上的 tcpdump 抓包和 Wireshark 分析,我们可以有效判断老旧服务是否仍有流量访问。这种方法无需修改代码或依赖日志,适用于各种遗留系统。熟练掌握 tcpdumpWireshark 的使用,不仅能应对面试场景,还能在实际工作中快速定位网络问题。

希望这篇博客能为你提供实用的抓包与分析指南!如果有更多关于网络调试的问题,欢迎留言交流。