【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包
【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包引言Azure App Service Linux 环境为开发者提供了灵活的容器化应用托管方案但有时我们需要深入网络层面排查问题比如检查出站流量、分析HTTP请求延迟或验证DNS解析结果。然而默认的容器环境并不包含tcpdump等网络诊断工具。本文将深入剖析在Linux App Service中安装和使用tcpdump的原理并提供完整的可运行代码示例帮助你在生产环境中安全、高效地抓取网络包。## 原理剖析为什么需要手动安装 tcpdump### 1. 容器环境的限制Azure App Service Linux 运行在Docker容器中基础镜像通常为mcr.microsoft.com/appsvc/python:3.9或类似轻量级镜像。这些镜像为了安全和体积默认只包含最小化工具集如curl、ping但不包含tcpdump和libpcap依赖库。### 2. 抓包的核心依赖tcpdump基于libpcap库工作而该库需要- 内核支持AF_PACKET套接字容器默认启用- 用户空间具备NET_RAW和NET_ADMIN能力App Service容器默认已具备- 在容器内安装libpcap-dev和tcpdump二进制文件### 3. 抓包流程1. 容器进程通过socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))创建原始套接字2. 内核将网络接口上的所有数据包复制到该套接字3.tcpdump通过pcap_loop()循环读取并应用过滤规则如BPF表达式## 环境准备在App Service中启用SSH访问在安装工具前确保你的App Service已启用SSH访问通过Azure门户 → 设置 → 开发工具 → SSH。App Service Linux容器默认在/home目录持久化但系统文件如/usr/bin在容器重启后会重置。因此我们需要将工具安装到可持久化的位置。### 检查当前环境通过SSH连接后运行以下命令验证基础环境bash# 检查内核版本uname -a# 检查是否已安装tcpdumpwhich tcpdump# 检查网络接口ip link show## 安装 tcpdump 的两种方法### 方法一使用apt-get在线安装推荐由于App Service容器基于Debian/Ubuntu可以直接使用包管理器安装。bash# 更新包列表可能需要几分钟sudo apt-get update# 安装tcpdump及其依赖sudo apt-get install -y tcpdump# 验证安装tcpdump --version### 方法二手动编译安装离线环境如果容器无法访问外部网络可以从本地编译后上传二进制文件。bash# 在本地编译tcpdumpwget https://www.tcpdump.org/release/tcpdump-4.99.4.tar.gztar xzf tcpdump-4.99.4.tar.gzcd tcpdump-4.99.4./configure --prefix/home/site/tcpdumpmakemake install# 上传到App Service通过SCP或Kudu控制台# 在App Service中设置PATHexport PATH$PATH:/home/site/tcpdump/bin## 可运行代码示例### 示例1Python脚本自动安装并抓取HTTP流量以下Python脚本演示了如何在App Service启动时自动安装tcpdump并抓取80端口的HTTP流量将结果保存到持久化存储中。python#!/usr/bin/env python3自动安装tcpdump并抓取网络包的Python脚本适用于Azure App Service Linux环境import subprocessimport osimport timeimport signalimport sysdef install_tcpdump(): 安装tcpdump如果已安装则跳过 try: # 检查是否已安装 result subprocess.run([which, tcpdump], capture_outputTrue, textTrue) if result.returncode 0: print(ftcpdump已安装于: {result.stdout.strip()}) return True # 更新包列表 print(正在更新包列表...) subprocess.run([sudo, apt-get, update], checkTrue, timeout120) # 安装tcpdump print(正在安装tcpdump...) subprocess.run([sudo, apt-get, install, -y, tcpdump], checkTrue, timeout120) print(tcpdump安装成功) return True except subprocess.CalledProcessError as e: print(f安装失败: {e}) return False except subprocess.TimeoutExpired: print(安装超时请检查网络连接) return Falsedef capture_traffic(output_file, duration30): 抓取网络流量并保存到pcap文件 参数: output_file: 输出文件路径建议放在/home目录下持久化 duration: 抓取持续时间秒 # 构建tcpdump命令抓取所有非SSH流量避免干扰 cmd [ sudo, tcpdump, -i, eth0, # 通常App Service使用eth0接口 -w, output_file, # 输出为pcap格式 -G, str(duration), # 自动停止 -W, 1, # 只保留一个文件 not port 22 # 排除SSH流量避免循环 ] print(f开始抓包持续 {duration} 秒...) print(f输出文件: {output_file}) try: # 启动tcpdump进程 process subprocess.Popen(cmd, stdoutsubprocess.PIPE, stderrsubprocess.PIPE) # 等待指定时间 time.sleep(duration 2) # 额外等待2秒确保文件写入完成 # 终止进程 process.terminate() process.wait() print(抓包完成) # 检查输出文件 if os.path.exists(output_file): file_size os.path.getsize(output_file) print(f文件大小: {file_size} 字节) return True else: print(警告输出文件未生成) return False except Exception as e: print(f抓包过程出错: {e}) return Falseif __name__ __main__: # 安装tcpdump if not install_tcpdump(): sys.exit(1) # 设置输出文件路径/home目录在App Service中持久化 output_path /home/site/wwwroot/captured_traffic.pcap # 抓取30秒流量 capture_traffic(output_path, duration30) # 使用tcpdump读取前10个包作为验证 print(\n验证抓取内容前10个包) subprocess.run([sudo, tcpdump, -r, output_path, -c, 10, -X, --no-stats])### 示例2Shell脚本实现持续监控并自动轮转以下Shell脚本适合作为App Service的启动命令实现长期网络监控。bash#!/bin/bash# 文件名: network_capture.sh# 用途在App Service Linux中持续抓取网络包并自动轮转# 配置参数CAPTURE_INTERFACEeth0 # 网络接口名称CAPTURE_DIR/home/site/logs # 持久化存储目录CAPTURE_DURATION60 # 每个文件抓取时长秒MAX_FILES5 # 最大保留文件数# 创建日志目录mkdir -p $CAPTURE_DIR# 检查tcpdump是否可用if ! command -v tcpdump /dev/null; then echo tcpdump未安装正在安装... sudo apt-get update -qq sudo apt-get install -y -qq tcpdump if [ $? -ne 0 ]; then echo 安装tcpdump失败退出 exit 1 fifi# 清理旧文件保留最近MAX_FILES个cleanup_old_files() { echo 清理旧文件... ls -t $CAPTURE_DIR/capture_*.pcap 2/dev/null | tail -n $((MAX_FILES1)) | xargs -r rm}# 启动抓包使用-G参数实现自动轮转echo 开始网络抓包监控...echo 接口: $CAPTURE_INTERFACEecho 每个文件时长: ${CAPTURE_DURATION}秒echo 最大保留文件数: $MAX_FILESecho 输出目录: $CAPTURE_DIR# 使用tcpdump的-G和-W参数实现自动轮转sudo tcpdump -i $CAPTURE_INTERFACE \ -w $CAPTURE_DIR/capture_%Y%m%d_%H%M%S.pcap \ -G $CAPTURE_DURATION \ -W $MAX_FILES \ -z cleanup_old_files \ -Z root \ not port 22 # 记录进程IDTCPDUMP_PID$!echo tcpdump进程PID: $TCPDUMP_PIDecho 要停止抓包请运行: kill $TCPDUMP_PID# 等待并保持脚本运行wait $TCPDUMP_PID## 高级用法分析抓取的数据包### 1. 使用tcpdump实时过滤bash# 只显示HTTP请求的GET方法sudo tcpdump -i eth0 -A tcp port 80 and (tcp[((tcp[12:1] 0xf0) 2):4] 0x47455420)# 显示DNS查询sudo tcpdump -i eth0 -n udp port 53### 2. 使用tshark进行深度分析如果安装了Wireshark可通过apt-get安装可以使用其命令行工具bash# 安装tsharksudo apt-get install -y tshark# 分析DNS响应时间tshark -r /home/site/captured.pcap -Y dns.flags.response 1 -T fields -e frame.time_relative -e dns.qry.name -e dns.resp.ttl## 注意事项与最佳实践1.存储空间管理App Service的临时存储/tmp有大小限制建议将pcap文件保存到/home目录持久化存储但注意Azure Files的IO性能2.权限控制使用sudo tcpdump确保有足够权限但避免在非SSH会话中运行3.性能影响抓包会消耗CPU和内存建议在低负载时段进行并限制抓包时长4.安全考虑抓取的数据包可能包含敏感信息处理完毕后及时删除或加密存储5.容器重启每次容器重启后安装的工具会丢失需要重新安装。建议将安装逻辑写入启动脚本## 总结本文深入剖析了在Azure App Service Linux环境中安装和使用tcpdump的原理与实现。通过理解容器的网络能力限制和libpcap的工作机制我们掌握了两种安装方法在线安装和离线编译并提供了完整的Python和Shell脚本示例支持自动安装、定时抓包和文件轮转。这些技术不仅适用于网络故障排查还可用于性能监控和安全审计。在实际应用中请务必结合存储管理、性能影响和安全合规要求谨慎使用抓包功能。通过合理利用这些工具你可以将App Service Linux的网络诊断能力提升到新的层次。

相关新闻

顺势多空定位仪副图 同花顺期货通指标

顺势多空定位仪副图 同花顺期货通指标

今天给大家带来是一款同花顺期货通指标,并且已经上架到同花顺期货通的指标广场上了。喜欢的朋友可以去指标广场安装试用!!友情提示:(指标只是辅助,不作建议)拼多多店铺:指标公式编写…

2026/10/14 15:49:25 阅读更多 →
AI-Coding:2026世界杯实时看板, 支持AI聊天/竞猜/预测等

AI-Coding:2026世界杯实时看板, 支持AI聊天/竞猜/预测等

AI-Coding:2026世界杯实时看板,支持AI聊天/竞猜/预测等 引言:当世界杯遇上AI,实时看板如何重塑观赛体验?2026年世界杯即将在北美三国(美国、加拿大、墨西哥)盛大开幕,这将是史上首次…

2026/10/3 2:22:56 阅读更多 →
Adobe-GenP 3.0:智能破解工具全面解锁Adobe全家桶的实用指南

Adobe-GenP 3.0:智能破解工具全面解锁Adobe全家桶的实用指南

Adobe-GenP 3.0:智能破解工具全面解锁Adobe全家桶的实用指南 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 面对Adobe Creative Cloud高昂的订阅费用&a…

2026/10/4 23:31:57 阅读更多 →

最新新闻

pQTLtools 安装全流程:R 版本、Bioconductor 与依赖配置避坑指南

pQTLtools 安装全流程:R 版本、Bioconductor 与依赖配置避坑指南

简介:pQTLtools 是一套面向蛋白质定量性状基因座(pQTL)研究的 R 语言工具包,适合从事遗传学、蛋白质组学与生物信息分析的科研人员及研究生使用,用于整合与处理 Olink、SomaLogic、Caprion 等主流蛋白质检测平台的数据…

2026/10/15 14:32:42 阅读更多 →
中细软GEO优化的优势是什么?

中细软GEO优化的优势是什么?

中细软GEO是港股上市公司中细软集团旗下(01020.HK)的AI获客优化服务,通过系统性优化企业信息资产,让品牌在AI回答中被理解、引用并优先推荐。 当用户在豆包、DeepSeek、腾讯元宝、文心一言、通义千问里问“哪家工厂能做某类产品”…

2026/10/15 14:32:42 阅读更多 →
张雪峰推荐!收藏这份网络安全学习指南,小白也能入门高薪赛道!

张雪峰推荐!收藏这份网络安全学习指南,小白也能入门高薪赛道!

张雪峰推荐!收藏这份网络安全学习指南,小白也能入门高薪赛道! 本文分析了张雪峰推荐网络安全专业的原因,指出行业存在巨大人才缺口和政策支持,薪资水平较高且职业发展路径多样。文章强调实战能力的重要性,…

2026/10/15 14:32:42 阅读更多 →
Android天气App实战:百度地图定位与和风天气API集成及折线图展示

Android天气App实战:百度地图定位与和风天气API集成及折线图展示

1. 这个天气App到底解决了什么问题刚接触Android开发的朋友,十有八九都是从“做一个天气App”开始的。原因很简单:它足够小,小到一个周末就能跑通;又足够全,全到能把网络请求、数据解析、UI渲染、权限管理这些核心环节…

2026/10/15 14:32:42 阅读更多 →
Windows Server 2012 R2 离线安装 IIS 完整指南:DISM 命令与避坑

Windows Server 2012 R2 离线安装 IIS 完整指南:DISM 命令与避坑

简介:这份离线安装包面向需要在无外网环境下为 Windows Server 2012 R2 部署或更新 IIS 的 IT 运维人员与系统管理员,解决内网、隔离网段或严格安全策略下无法在线获取系统组件的问题。压缩包共 1568 个文件,约 99.04MB,以 dll、r…

2026/10/15 14:32:42 阅读更多 →
OpenShell:面向开发者的Windows桌面增强工具

OpenShell:面向开发者的Windows桌面增强工具

1. OpenShell 是什么?它不是 Shell,更不是“开源外壳” OpenShell 这个名字,乍一听容易让人误以为是某种 Linux 或 macOS 的 shell 替代品——比如像 zsh、fish 那样的命令行解释器,或者某个带图形界面的终端模拟器。但事实恰恰相…

2026/10/15 14:31:41 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →