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

linux https拦截与url解析

uprobe 拦截TLS库用eBPF uprobe拦截 TLS 库OpenSSL/GnuTLS/Go TLS在加密前 / 解密后捕获明文 HTTP 请求即可解析出 HTTPS URL无需 CA 证书、无需修改应用。核心原理HTTPS 明文含 URL在 TLS 库内部处理发送应用 →SSL_write明文→ 加密 → 网络接收网络 → 解密 →SSL_read明文→ 应用Uprobe 挂钩SSL_write/SSL_read在函数入口 / 返回时读取明文缓冲区从中提取完整 HTTP 请求含HostPath拼接为 URL。uprobe 直接抓有个问题SSL_write 传入的 len 不一定是真实发送长度返回值才是。方案uprobe 保存 buf 地址uretprobe 取返回值再读明文这是生产环境最稳的 eBPF 方式。属于 eBPF 范畴但比单纯 uprobe 更强。主流 TLS 库关键钩子点1. OpenSSL最常用入口SSL_write(SSL *ssl, const void *buf, int num)入口SSL_read(SSL *ssl, void *buf, int num)需配合uretprobe获取实际读写长度返回值2. GnuTLS入口gnutls_record_send(gnutls_session_t session, const void *data, size_t size)入口gnutls_record_recv(gnutls_session_t session, void *data, size_t size)3. Go crypto/tls入口crypto/tls.(*Conn).Write(b []byte) (n int, err error)入口crypto/tls.(*Conn).Read(b []byte) (n int, err error)BPFtrace 快速示例捕获 SSL_write 明文#!/usr/bin/env bpftrace uprobe:/lib/x86_64-linux-gnu/libssl.so.1.1:SSL_write { $ssl (struct ssl_st *)arg0; $buf arg1; $num arg2; $pid pid; // 读取前 2048 字节明文HTTP 请求 $data buf($buf, 2048); printf(PID %d SSL_write: %s\n, $pid, $data); }运行sudo bpftrace ssl_write.btBCC 完整方案uprobe uretprobe 配合需两步uprobe入口保存SSL*、buf、num到 BPF Mapuretprobe返回时用实际长度读取完整明文解析 URL核心 eBPF 代码片段C// 入口探针保存上下文 SEC(uprobe/SSL_write) int probe_entry_SSL_write(struct pt_regs *ctx) { u64 pid_tgid bpf_get_current_pid_tgid(); void *ssl (void *)PT_REGS_PARM1(ctx); void *buf (void *)PT_REGS_PARM2(ctx); int num (int)PT_REGS_PARM3(ctx); struct ssl_data_t data { .ssl ssl, .buf buf, .num num, }; bpf_map_update_elem(ssl_ctx_map, pid_tgid, data, BPF_ANY); return 0; } // 返回探针读取明文并解析 SEC(uretprobe/SSL_write) int probe_ret_SSL_write(struct pt_regs *ctx) { u64 pid_tgid bpf_get_current_pid_tgid(); struct ssl_data_t *data bpf_map_lookup_elem(ssl_ctx_map, pid_tgid); if (!data) return 0; int ret PT_REGS_RC(ctx); // 实际写入长度 if (ret 0) { bpf_map_delete_elem(ssl_ctx_map, pid_tgid); return 0; } // 读取明文 HTTP 请求 char http_req[2048] {0}; bpf_probe_read_user(http_req, ret 2048 ? ret : 2048,>工具化方案1. eCapture推荐开箱即用eCapture其实内部整合了uprobeuretprobeCO-REOpenSSL 1.0.2/1.1/3.0 结构体自动适配直接从 SSL 结构体取hostname SNI自动拼接 URLhttps://host/path这是目前最成熟、不用自己写代码的方案。支持 OpenSSL/GnuTLS/Go TLS/BoringSSL/NSS无需写代码直接捕获明文并输出 URL命令sudo ecapture tls -p PID -m text输出示例GET /index.html HTTP/1.1 Host: example.com URL: https://example.com/index.html2. BCC sslsniff.py官方示例捕获 SSL 明文sudo python3 /usr/share/bcc/tools/sslsniff.py -p PID从 SSL 结构体中直接提取 SNI超级高级玩法*根本不用解析 HTTP直接从 SSL取出域名。**OpenSSL 结构体里有SSL::session::hostSSL::s3-hostnameSSL::tlsext_hostname直接用 uprobe/uretprobe 读取结构体偏移直接拿到域名。优点不需要解析 HTTP 包不会被分包影响最稳定、最快这是专业 eBPF 监控产品如 Pixie、Calico、Cilium真正使用的方案。核心原理TLS 握手时客户端会发送SNIServer Name Indication域名OpenSSL 会把它存在SSL结构体的固定字段里// OpenSSL 内部结构体 struct ssl_st { // ... const char *tlsext_hostname; // 这里就是 SNI 域名 };我们用uprobe 挂钩SSL_connect直接读取这个指针秒拿到域名比解析 HTTP 稳定 100 倍。SSL_connect 只能拿到 SNI域名握手阶段还没发送 HTTP 请求拿不到 Path完整 URL SSL_connect (SNI) SSL_write (Path)域名来自SSL-tlsext_hostnameSNI路径来自SSL_write明文 HTTP 请求用 eBPF Map 关联同一个 SSL 连接的 域名 路径这是 Cilium / Pixie /eCapture 底层真正商用方案1. SSL_connectTLS握手 → 读取 SSL 结构体 → 获取 SNI 域名 → 存入 eBPF Map[SSL指针: 域名] 2. SSL_write发送HTTP → 读取明文 → 获取 Path → 从 Map 取出对应域名 → 拼接https://域名路径为什么这个方案最强超级稳定不受 TCP 分包影响不受 HTTP 头格式影响不依赖明文数据性能极高只在 TLS 握手时触发一次不挂钩高频的 SSL_write通用性强所有 HTTPS 流量都带 SNI浏览器、APP、curl 全支持直接拿到域名无需拼接 HostPath直接输出https://$sni关键要点✅uprobe 挂钩 SSL_connect✅直接读取 SSL 结构体偏移 0x180/0x190✅拿到 SNI 域名 直接得到 HTTPS 域名✅不解析 HTTP、不分包、最稳定Kernel TLS (KTLS) 劫持如果开启 KTLS加密解密在内核完成可以用sk_buff直接抓明文极稳定但依赖内核开启 KTLS。MITM中间人代理 TLS 证书伪造HTTPS 是 TLS 加密的 HTTP直接抓包只能看到密文。要解析必须做中间人解密流量劫持将目标 HTTPS443流量重定向到代理端口如 8080。TLS 握手欺骗代理收到客户端 ClientHello伪造目标服务器证书用自签 CA 签发。客户端信任代理 CA 后完成 TLS 握手建立客户端 ↔ 代理的加密通道。双向解密转发代理解密客户端请求 → 处理 / 记录 → 再与真实服务器建立 TLS 连接 → 转发请求。服务器响应 → 代理解密 → 处理 → 加密发回客户端。关键前提客户端必须信任代理的根 CA 证书否则会报证书错误。透明代理无需客户端手动设代理1mitmproxy最常用支持 eBPF 本地拦截优势命令行 Web UI、脚本化、支持 HTTP/2、TLS 1.3、eBPF 内核级劫持。透明拦截Linux# 安装 sudo apt install mitmproxy # 启动透明模式8080 代理 sudo mitmproxy --mode transparent --showhost # 配置 iptables 重定向 80/443 到 8080 sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080 sudo iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-port 8080证书安装浏览器访问mitm.it下载并信任 CA 证书~/.mitmproxy/mitmproxy-ca-cert.pem。脚本示例修改响应# modify.py from mitmproxy import http def response(flow: http.HTTPFlow) - None: if example.com in flow.request.pretty_url: flow.response.text flow.response.text.replace(old, new) # 运行 mitmproxy -s modify.py --mode transparent2bettercap网络层 MITM适合局域网嗅探支持 ARP 欺骗、HTTPS 降级、TLS 拦截。启动 HTTPS 代理sudo bettercap -eval set http.proxy on; set https.proxy on; set https.proxy.sslstrip true; http.proxy.start应用层代理需客户端手动配置CharlesGUI 工具适合调试需手动设代理并安装证书。FiddlerWindows 为主Linux 可通过 Wine 运行。tcpdump Wireshark仅抓密文无法解析除非有服务器私钥仅用于自己的服务。内核级拦截高性能eBPFmitmproxy 新版支持 eBPF 挂钩 socket 创建实现进程级透明拦截比 iptables 更高效。netfilter 模块内核级 TLS 解析如 tls_helper适合网关 / 防火墙场景。iptables 流量劫持本地流量本机应用# 清空规则测试用 sudo iptables -t nat -F # 重定向 80/443 到代理 8080 sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080 sudo iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-port 8080 # 查看规则 sudo iptables -t nat -L -n # 清除规则 sudo iptables -t nat -F网关流量转发其他设备# 开启 IP 转发 echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward # 转发 80/443 到代理 sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080证书管理生成自签 CAmitmproxy 自动生成# 手动生成可选 openssl req -x509 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 365 -nodes客户端信任证书浏览器设置 → 隐私与安全 → 管理证书 → 导入ca.crt。Linux 系统sudo cp ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificatesAndroid设置 → 安全 → 从 SD 卡安装证书。用 mitmproxy 拦截并解析 HTTPS启动透明代理sudo mitmweb --mode transparent --web-host 0.0.0.0配置 iptables 重定向 443 → 8080。浏览器访问http://localhost:8081打开 Web UI。访问任意 HTTPS 网站即可看到明文请求 / 响应。脚本化编写 Python 脚本过滤、修改、记录流量。风险与限制证书信任未信任 CA 会导致 TLS 握手失败浏览器报 “不安全”。证书锁定Certificate PinningAPP 内置服务器公钥MITM 会被拒绝需脱壳 / Frida 绕过。TLS 1.3 0-RTT早期数据可能无法解密。法律合规未经授权拦截他人流量违法仅用于自己的设备 / 授权测试。性能损耗MITM 会增加延迟高并发场景需优化。

相关文章:

linux https拦截与url解析

uprobe 拦截TLS库 用 eBPF uprobe 拦截 TLS 库(OpenSSL/GnuTLS/Go TLS),在加密前 / 解密后捕获明文 HTTP 请求,即可解析出 HTTPS URL,无需 CA 证书、无需修改应用。 核心原理 HTTPS 明文(含 URL&#xf…...

Qwen3-TTS开源模型教程:Gradio接口封装+API服务发布完整指南

Qwen3-TTS开源模型教程:Gradio接口封装API服务发布完整指南 1. 前言:为什么你需要一个专属的语音合成服务? 想象一下,你正在开发一个智能客服应用,需要为不同国家的用户提供多语言的语音回复;或者你是一个…...

RKE2集群里crictl拉镜像总报‘device busy’?别急着重启,先排查这个安全软件

RKE2集群crictl拉镜像报"device busy"的深度排查指南 当你正在RKE2集群中执行关键部署,突然遇到crictl pull命令报出"failed to extract layer"和"device or resource busy"错误时,那种感觉就像在高速公路上突然爆胎。大多…...

ALM代码编辑器实战教程:从HTML到TSX的转换技巧

ALM代码编辑器实战教程:从HTML到TSX的转换技巧 【免费下载链接】alm :rose: A :cloud: ready IDE just for TypeScript :heart: 项目地址: https://gitcode.com/gh_mirrors/al/alm ALM代码编辑器是一款专为TypeScript开发打造的云端IDE,提供了丰富…...

OpenWRT路由器如何用Zerotier实现异地组网?保姆级配置教程(含防火墙规则详解)

OpenWRT路由器通过Zerotier构建安全异地内网的完整实践指南 异地办公已成为现代企业的常态,而如何安全高效地访问公司内网资源则是技术人员面临的现实挑战。传统VPN方案往往配置复杂且性能受限,而基于P2P技术的Zerotier配合OpenWRT路由器,能够…...

cool-admin(midway版)前端路由缓存:include与exclude配置策略

cool-admin(midway版)前端路由缓存:include与exclude配置策略 【免费下载链接】cool-admin-midway 🔥 cool-admin(midway版)一个很酷的后台权限管理框架,模块化、插件化、CRUD极速开发,永久开源免费,基于midway.js 3.x…...

环境管理从未如此简单:Miniconda-Python3.9镜像快速入门指南

环境管理从未如此简单:Miniconda-Python3.9镜像快速入门指南 1. 为什么选择Miniconda-Python3.9镜像 Python作为当今最流行的编程语言之一,在数据科学、机器学习和Web开发等领域有着广泛应用。但Python环境管理一直是开发者面临的痛点之一,…...

【Python内存管理黄金法则】:20年SRE亲授生产环境OOM崩溃前的5个关键干预点

第一章:Python智能体内存管理策略的底层认知与生产意义Python智能体(如基于LLM的Agent系统)在长时间运行、多轮对话与状态缓存场景下,内存行为远超传统脚本应用。其内存压力不仅来自模型权重加载,更源于动态生成的中间…...

StructBERT中文情感识别效果展示:电影评论情感极性与票房相关性验证

StructBERT中文情感识别效果展示:电影评论情感极性与票房相关性验证 1. 项目概述与背景 StructBERT 情感分类 - 中文 - 通用 base 是百度基于 StructBERT 预训练模型微调后的中文通用情感分类模型,专门用于识别中文文本的情感倾向。这个模型在中文 NLP…...

cool-admin(midway版)数据库索引维护:重建索引与碎片整理

cool-admin(midway版)数据库索引维护:重建索引与碎片整理 【免费下载链接】cool-admin-midway 🔥 cool-admin(midway版)一个很酷的后台权限管理框架,模块化、插件化、CRUD极速开发,永久开源免费,基于midway.js 3.x、ty…...

ALM扩展开发教程:如何为TypeScript IDE创建自定义插件

ALM扩展开发教程:如何为TypeScript IDE创建自定义插件 【免费下载链接】alm :rose: A :cloud: ready IDE just for TypeScript :heart: 项目地址: https://gitcode.com/gh_mirrors/al/alm ALM是一款专为TypeScript和JavaScript设计的云端IDE,为开…...

论计算机科学的本质是什么?编程么?

计算机科学的本质不是编程。编程只是实现计算机科学思想的工具和手段,而非其内核。计算机科学的核心是“计算”与“问题求解”计算机科学(Computer Science, CS)本质上是一门研究信息与计算的理论基础,以及如何通过算法高效、可靠…...

终极网络工具集实战:ACL库中DNS解析、Ping检测与邮件发送的完整解决方案

终极网络工具集实战:ACL库中DNS解析、Ping检测与邮件发送的完整解决方案 【免费下载链接】acl A powerful server and network library, including coroutine, redis client, http, websocket, mqtt with C/C for multi-platform including Linux, Android, iOS, Ma…...

PyTorch 2.8镜像部署案例:跨境电商平台商品图→营销短视频自动生成

PyTorch 2.8镜像部署案例:跨境电商平台商品图→营销短视频自动生成 1. 项目背景与价值 跨境电商平台每天需要为成千上万的商品制作营销短视频,传统方式面临三大痛点: 人力成本高:专业视频制作团队单条视频成本约300-500元生产效…...

SolveSpace:参数化 CAD 软件网页版的实验性突破

【导语:SolveSpace 作为一款参数化二维/三维 CAD 软件,推出了实验性网页版。虽存在速度损失和未解决的 bug,但处理小模型时体验不错,为 CAD 软件的使用带来新可能。】小巧 CAD 软件的网页版尝试SolveSpace 主要以普通桌面软件形式…...

3步解锁跨设备游戏自由:Sunshine串流技术重构娱乐体验

3步解锁跨设备游戏自由:Sunshine串流技术重构娱乐体验 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 在这个设备爆炸的时代,我们却被硬件束缚得越来越紧。…...

千问3.5-2B在物流场景:运单图片自动识别+收发件信息结构化

千问3.5-2B在物流场景:运单图片自动识别收发件信息结构化 1. 物流行业的痛点与机遇 每天,物流企业需要处理数以百万计的运单信息录入工作。传统的人工录入方式存在三个明显问题: 效率低下:一个熟练的录入员每小时最多处理50-80…...

Kandinsky-5.0-I2V-Lite-5s后端集成:Node.js环境下的高性能API服务构建

Kandinsky-5.0-I2V-Lite-5s后端集成:Node.js环境下的高性能API服务构建 1. 引言 想象一下,你正在开发一个创意设计平台,用户上传一张图片,几秒钟后就能看到它变成了一段生动的视频。这种从静态图像到动态视频的转换能力&#xf…...

如何从微信聊天记录中提取数据价值:WeChatMsg的完整解决方案

如何从微信聊天记录中提取数据价值:WeChatMsg的完整解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

英雄联盟智能游戏助手:提升游戏效率与自动化操作的全方位解决方案

英雄联盟智能游戏助手:提升游戏效率与自动化操作的全方位解决方案 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的英雄联…...

YOLOv8.yaml文件配置详解:从参数解析到模型结构优化实战

YOLOv8.yaml文件配置详解:从参数解析到模型结构优化实战 在计算机视觉领域,目标检测一直是核心任务之一。YOLO(You Only Look Once)系列算法因其出色的实时性和准确性广受欢迎,而YOLOv8作为该系列的最新版本,在模型结构和参数配置…...

iOS开发效率工具:设备支持文件管理完全指南 - 无需升级Xcode的解决方案

iOS开发效率工具:设备支持文件管理完全指南 - 无需升级Xcode的解决方案 【免费下载链接】iOSDeviceSupport All versions of iOS Device Support 项目地址: https://gitcode.com/gh_mirrors/ios/iOSDeviceSupport 作为iOS开发者,你是否曾遭遇这样…...

百度网盘Mac版下载加速引擎:突破限速的完整优化指南

百度网盘Mac版下载加速引擎:突破限速的完整优化指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 当你面对100KB/s的下载速度&#xff0c…...

Phi-4-mini-reasoning:轻量级推理模型在人工智能浪潮中的定位

Phi-4-mini-reasoning:轻量级推理模型在人工智能浪潮中的定位 1. 轻量级推理模型的时代价值 当ChatGPT等千亿参数大模型占据媒体头条时,一个容易被忽视的趋势正在悄然兴起——轻量级推理模型正在特定领域展现出惊人的实用性。Phi-4-mini-reasoning正是…...

终极指南:Lottie动画版本管理的5个专业技巧

终极指南:Lottie动画版本管理的5个专业技巧 【免费下载链接】lottie Lottie documentation for http://airbnb.io/lottie. 项目地址: https://gitcode.com/gh_mirrors/lo/lottie Lottie是Airbnb开发的开源动画库,它能让开发者轻松地在移动应用和网…...

UE5.0.3打包Linux报错?手把手教你搞定BlueprintJson插件缺失问题

UE5.0.3 Linux打包报错终极指南:BlueprintJson插件问题的深度解析与实战修复 当你满怀期待地在UE5.0.3中点击"打包Linux"按钮,却看到屏幕上弹出关于BlueprintJson插件的红色错误信息时,那种挫败感我深有体会。作为一名经历过无数次…...

快速搭建stm32f103c8t6引脚验证原型:快马平台一键生成初始化代码

最近在做一个基于STM32的小项目时,发现每次新建工程都要重复配置引脚功能,特别浪费时间。后来发现用InsCode(快马)平台可以快速生成初始化代码,简直打开了新世界的大门。今天就来分享下如何用这个平台快速搭建STM32F103C8T6的引脚验证原型。 …...

3步轻松延长Navicat使用周期:Mac用户实用指南

3步轻松延长Navicat使用周期:Mac用户实用指南 【免费下载链接】navicat_reset_mac navicat16 mac版无限重置试用期脚本 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Navicat试用期到期烦恼吗?作为数据库管理的得力工具…...

Qwen-Image-2512-Pixel-Art-LoRA 模型原理浅析:理解LoRA在图像生成中的作用

Qwen-Image-2512-Pixel-Art-LoRA 模型原理浅析:理解LoRA在图像生成中的作用 最近在玩AI画图的朋友,可能都遇到过这样的烦恼:想让一个通用的大模型画出特定风格,比如复古的像素风,结果要么画得不像,要么就得…...

Beyond Compare 5密钥生成终极指南:轻松解决评估模式错误

Beyond Compare 5密钥生成终极指南:轻松解决评估模式错误 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 你是否曾遇到Beyond Compare 5弹出"评估模式错误"的困扰&#xf…...