运维123 - HTTP
type: channel
link: https://www.sddts.cn/index.php/tag/HTTP/
items: printervention：Web 技术让旧打印机复活
items: 通过 curl 直接安装 Linux 系统
items: 修复 mcporter 与 n9e-mcp-server SSE 连接挂起问题
items: 使用 NGINX 作为 AI 代理实现指南
items: HSBC邮件追踪像素事件技术分析
items: 智谱AI HTTP API 调用教程
items: MaR HTTP 数据包智能匹配替换工具技术分析
items: WSIStreamer 云原生 WSI 流媒体服务器技术分析
items: Hetty HTTP 安全研究工具技术分析
items: httpx HTTP 多用途探测工具技术分析

printervention：Web 技术让旧打印机复活
type: item
date: 2026-04-17T03:03:53+00:00
description: printervention：Web 技术让旧打印机复活一、新闻概述1. 标题printervention：Web 技术让旧打印机复活2. 发布时间2026 年 4 月3. 来源printervention.app 官方博客二、核心内容1. 事件摘要A. 主要内容开发者 George MacKerron 发布了一项创新技术项目 printervention，通过 WebUSB 和浏览器虚拟机技术，让已被现代操作系统淘汰的老式照片打印机重新焕发生机。B. 核心亮点无需安装，通过浏览器即可使用旧打印机完整模拟 Linux 打印环境，支持 CUPS 和 Gutenprint 驱动实现双向通信，可获取打印机状态支持 HEIC 格式照片自动转换跨平台兼容，可在任何支持 WebUSB 的浏览器中运行2. 关键信息A. 技术栈v86：x86 CPU 和整机模拟器WebUSB：浏览器 USB 设备访问 APIUSB/IP：Linux USB 设备网络转发协议tcpip.js：JavaScript TCP/IP 协议栈实现CUPS：通用 Unix 打印系统Gutenprint：高质量打印机驱动B. 应用场景Canon SELPHY 等老式照片打印机其他 Gutenprint 支持的打印机型号未来扩展支持扫描仪设备C. 创新价值环保：拯救数百万即将进入垃圾填埋场的旧打印机低成本：无需购买昂贵的替换设备便捷：无需安装驱动或专用软件3. 背景介绍A. 问题起源作者意外获得一台 Canon SELPHY 照片打印机，发现现代 macOS 和 Windows 已不再支持这些老设备。虽然 Linux 系统仍可通过 CUPS 和 Gutenprint 驱动使用，但非技术用户难以部署。B. 最初的解决方案作者使用 Manjaro Linux 机器配合 CUPS 和 Avahi，通过 AirPrint 共享打印机。但这需要额外的硬件和 Linux 技能，不适合普通用户。C. 演进方向探索纯软件解决方案，让任何人都能够通过浏览器使用旧打印机。三、详细报道1. 主要内容A. 技术演进项目经历了三个主要版本的迭代：第一代：自定义 CUPS 后端使用 shell script 接收打印数据通过 v86 TTY 逐字节传输到浏览器浏览器通过 WebUSB transferOut 发送数据问题：TTY 对控制字符的处理导致打印数据损坏第二代：9p 文件系统传输使用 v86 的 9p 文件系统传输大块数据效率更高，但存在同步问题教训：在 JavaScript 读取前必须先 sync 文件第三代：USB/IP 双向桥接Linux 端使用 USB/IP 协议JavaScript 端使用 tcpip.js 实现 TCP/IP 栈实现完整的双向通信B. 技术细节核心架构printervention 的技术架构包含三个核心层次：graph TB subgraph 浏览器层 A[用户界面] B[WebUSB API] C[tcpip.js] D[HEIC 转换] E[PDF 生成] end subgraph 虚拟机层 F[v86 x86 模拟器] G[Alpine Linux] H[CUPS 打印系统] I[Gutenprint 驱动] J[USB/IP 协议] end subgraph 硬件层 K[USB 打印机] end A -->|上传文件| D D --> E E --> F B <-->|USB 数据| C C <-->|以太网帧| F F --> J J <-->|TCP/IP| C J <-->|虚拟 USB| H H --> I H -->|打印命令| J B <-->|USB 连接| K工作流程sequenceDiagram participant U as 用户 participant B as 浏览器 participant V as v86 虚拟机 participant C as CUPS participant P as 打印机 U->>B: 上传照片 B->>B: HEIC 转 JPEG B->>B: 生成匹配尺寸 PDF B->>V: 上传文件到 VM V->>C: lp 打印命令 C->>C: Gutenprint 处理 C->>V: USB/IP 协议封装 V->>B: 以太网帧传输 B->>B: tcpip.js 解析 B->>P: WebUSB transferOut P->>B: 状态响应 B->>V: tcpip.js 封装 V->>C: USB/IP 解包 C->>U: 打印状态更新关键技术点v86 模拟器：在浏览器中完整模拟 x86 计算机，将机器代码编译为 WebAssembly 模块运行WebUSB API：允许网页直接连接 USB 设…

通过 curl 直接安装 Linux 系统
type: item
date: 2026-03-26T15:12:26+00:00
description: 通过 curl 直接安装 Linux 系统一、概述1. 简介A. 是什么一种非传统的 Linux 系统安装方式，通过命令行直接将磁盘镜像从网络下载并写入目标磁盘，无需中间存储步骤。B. 为什么学理解 Unix 系统中「一切皆文件」的设计理念掌握远程服务器快速重装系统的实用技巧了解 Linux 引导过程和磁盘操作原理C. 学完能做什么使用一条命令完成系统安装创建可远程部署的自定义系统镜像在没有额外存储空间的情况下重装系统2. 前置知识A. 必备技能基本 Linux 命令行操作磁盘设备概念（/dev/sda、/dev/nvme0n1）管道和重定向操作B. 推荐知识dd 命令使用EFI 引导原理QEMU 虚拟机基础二、核心原理1. 基本概念Unix 系统的设计哲学是「一切皆文件」，磁盘设备在文件系统中以特殊文件形式存在，可以直接读写。2. 工作原理graph LR A[网络镜像] -->|curl/wget| B[管道传输] B -->|gunzip| C[解压数据] C -->|dd 或 重定向| D[/dev/sdX] D --> E[磁盘写入] E --> F[重启引导]3. 为什么可行设备文件可直接读写，绕过文件系统层EFI 固件能自动发现新的 EFI 系统分区写入完成后重启即可进入新系统三、基本操作1. 最简命令直接下载并写入磁盘：curl https://example.com/disk.img > /dev/sda2. 常用变体A. 使用 wgetwget -O- https://example.com/disk.img > /dev/sdaB. 处理压缩镜像curl https://example.com/disk.img.gz | gunzip | dd bs=1M of=/dev/sda status=progressC. 通过 SSH 远程写入gzip -vc disk.img | ssh root@server -- sh -c 'gunzip -vc | dd bs=1M of=/dev/sda status=progress'四、创建自定义镜像1. 使用 QEMU 创建镜像A. 创建原始磁盘truncate -s 10G disk.imgB. 在虚拟机中安装系统qemu-system-x86_64 \ -hda ./disk.img \ -m 2G \ -enable-kvm \ -nic user \ -serial mon:stdio完成安装后，disk.img 即为可部署的系统镜像。2. 使用 NixOS 自动化构建NixOS 提供了自动构建磁盘镜像的功能：import <nixpkgs/nixos/lib/make-disk-image.nix>这样可以实现完全自动化的镜像构建流程。五、部署实战1. 树莓派刷写传统方法需要下载、解压、使用 dd 写入。简化后的命令：curl https://www.raspberrypi.com/image.img.gz | gunzip | sudo dd bs=1M of=/dev/sdx status=progress2. VPS 远程重装A. 使用救援镜像大多数 VPS 提供商提供救援镜像功能，步骤如下：在控制面板启动进入救援模式救援系统启动后，执行写入命令重启进入新系统示例：# 在救援环境中 wget -O- https://your-server/custom.img.gz | gunzip | dd bs=1M of=/dev/sda status=progress sync rebootB. 直接写入运行中的系统理论上可以直接写入正在使用的系统磁盘：gzip -vc disk.img | ssh root@server -- bash -c 'gunzip -vc > /dev/sda'但这种方法会导致系统崩溃，因为正在运行的系统文件被覆盖。六、技术细节1. 磁盘卸载问题尝试卸载根分区时会遇到错误：root@localhost:~# umount /dev/sda1 umount: /: target is busy.这是因为系统正在运行于该磁盘上。2. 解决方案方案 A：使用救援镜像启动到独立的救援系统原系统磁盘不再被挂载可以安全写入方案 B：内存运行（理论上可行）将必要工具加载到 RAM卸载所有磁盘从 RAM 中执行写入操作graph TD A[当前系统] --> B[加载工具到 RAM] B --> C[卸载磁盘] C --> D[从 RAM 执行写入] D --> E[新系统写入完成] E --> F[重启]七、注意事项1. 安全警告极其危险：错误的磁盘选择会导致数据丢失不可逆操作：写入过程无法撤销确认设备名：仔细检查 /dev/sdX 是…

修复 mcporter 与 n9e-mcp-server SSE 连接挂起问题
type: item
date: 2026-03-02T06:29:19+00:00
description: 修复 mcporter 与 n9e-mcp-server SSE 连接挂起问题一、事件概述1. 事件背景用户在使用 mcporter 调用 Nightingale MCP 工具时，程序出现挂起现象。mcporter list 显示 nightingale 服务为 offline 状态，执行 mcporter call nightingale.list_active_alerts 命令时程序无响应。2. 影响范围A. 影响功能Nightingale MCP 工具调用全部失败无法通过 MCP 协议访问 Nightingale 监控数据影响 list_active_alerts、list_history_alerts 等所有监控工具B. 影响时长调试过程持续约 2 小时，涉及多次代码修改和验证3. 严重程度P2 级问题，影响特定 MCP 服务器的可用性二、事件时间线1. 问题发现（初始阶段）A. 现象描述执行 mcporter list 时，nightingale 显示为 "offline — unable to reach server"B. 初步判断根据计划文件，问题根源是配置不匹配：mcporter 配置使用 stdio 模式，但 n9e-mcp-server 已切换到 HTTP SSE 模式运行。2. 配置调整（第一阶段）A. 处理措施修改 /home/jacky/.claude/config/mcporter.json，将 nightingale 从 stdio 模式改为 HTTP SSE 模式B. 效果评估问题未解决，mcporter list 仍显示 nightingale 为 offline3. 用户关键反馈（第二阶段）A. 发现途径用户注意到服务器日志中 session_id 为空字符串：session_id=""B. 用户提问"from the log i see session_id is null, shall this is the problem?"4. SessionID 调查（第三阶段）A. 调研方法通过 zread 工具检查 go-sdk 源代码 mcp/sse.goB. 关键发现在 sseServerConn 和 sseClientConn 的 SessionID 方法中发现以下注释：// TODO(jba): get the session ID. (Not urgent because SSE transports have been removed from the spec.) func (s *sseServerConn) SessionID() string { return "" }C. 结论空的 session_id 是预期行为，SSE 传输已从 MCP 规范中移除，不是问题根源5. 真实问题定位（第四阶段）A. 处理措施使用 curl 直接测试 SSE 端点，验证服务器是否正常响应B. 关键发现curl 测试成功，SSE 流程正常工作。问题在于 mcporter 的传输模式回退逻辑：尝试 Streamable HTTP 模式：失败，提示 "sessionid must be provided"回退到 SSE 模式：挂起6. 配置文件定位（第五阶段）A. 处理措施搜索并确认 mcporter 的实际配置文件位置B. 关键发现mcporter 使用 /home/jacky/.mcporter/mcporter.json，而非 /home/jacky/.claude/config/mcporter.jsonC. 修复措施更新正确的配置文件，将 URL 从远程地址改为本地地址7. Token 认证逻辑修复（第六阶段）A. 问题分析检查 n9e-mcp-server 的 HTTP 处理代码，发现所有请求（包括 POST 到 session endpoint）都强制要求 token 认证B. 问题根因POST 请求到 /mcp?sessionid=XXX 时，这些请求应仅使用 sessionid 认证，不应再次验证 tokenC. 修复措施修改 /mydata/code/mcp/n9e-mcp-server/internal/http_server.go，添加条件判断：mainHandler.HandleFunc("/mcp", func(w http.ResponseWriter, r *http.Request) { // POST 请求带 sessionid 直接转发到 SSE handler if r.Method == http.MethodPost && r.URL.Query().Get("sessionid") != "" { sseHandler.ServeHTTP(w, …

使用 NGINX 作为 AI 代理实现指南
type: item
date: 2026-02-03T14:16:13+00:00
description: 使用 NGINX 作为 AI 代理实现指南一、概述1. 背景A. AI 时代的新挑战人工智能（AI）技术的快速发展创造了一个复杂的生态环境。组织开始将多个大型语言模型（LLM）提供商结合起来，并管理具有不同 API 规范的多个模型端点，以构建 AI 驱动的应用程序。这种多模型并存的环境催生了 AI Gateway 和 AI Proxy 的兴起。B. AI Proxy 的定义AI Proxy 是 AI Gateway 的简化实现，是位于应用程序与 AI 模型之间的专用基础设施组件，用于编排和保护 AI 请求的流向。2. 核心功能A. 流量控制流量控制是 AI Proxy 的核心功能，它实现了身份验证与授权机制以及速率限制，有助于防止模型滥用，并确保资源的公平分配。B. 模型转换模型转换通过提供对不同 AI 模型的统一 API 入口来实现跨 AI 模型和提供商的无缝集成，从而将复杂性从客户端应用抽象掉。C. 宕机切换宕机切换系统提供高可用性，确保请求的可靠性，能够优雅地处理模型不可用或速率受限的情况。D. 流量可观测性提供全面的监控和日志记录，以维持 AI 流程中的运营可见性。对请求与响应负载进行流量审计，对于合规性验证、故障排查与模型性能分析至关重要。二、技术方案1. 系统架构使用 NGINX 结合 NJS（NGINX JavaScript）脚本实现 AI Proxy，可以提供完整的 AI 流量治理能力。graph TB Client[客户端应用] -->|OpenAI API 格式| NGINX[NGINX AI Proxy] NGINX -->|NJS 转换| Anthropic[Anthropic API] NGINX -->|直接透传| OpenAI[OpenAI API] subgraph NGINX Router[NJS 路由脚本] Transform[模型转换] RBAC[访问控制] Failover[宕机切换] Logger[Token 日志] Router --> Transform Router --> RBAC Router --> Failover Router --> Logger end style NGINX fill:#e1f5fe style Client fill:#f3e5f5 style OpenAI fill:#c8e6c9 style Anthropic fill:#fff9c42. 工作原理A. 请求流程客户端发送统一格式的 API 请求到 NGINXNJS 脚本验证用户身份和访问权限根据请求的模型类型进行路由决策如果目标模型是 Anthropic，将请求转换为 Anthropic 格式如果目标模型是 OpenAI，直接透传请求发起子请求到后端模型提供商接收响应并进行必要格式转换记录 Token 使用情况返回统一格式的响应给客户端sequenceDiagram participant C as 客户端 participant N as NGINX participant JS as NJS 脚本 participant A as Anthropic API participant O as OpenAI API C->>N: POST /v1/chat/completions N->>JS: 路由处理 JS->>JS: 验证用户权限 JS->>JS: 检查模型类型 alt Anthropic 模型 JS->>JS: 转换请求格式 JS->>A: 子请求 A-->>JS: 响应 JS->>JS: 转换响应格式 else OpenAI 模型 JS->>O: 直接透传 O-->>JS: 响应 end JS->>JS: 记录 Token 使用 JS-->>C: 返回响应三、核心实现1. 模型路由与转换A. 请求格式转换OpenAI Chat Completions API 和 Anthropic Messages API 使用不同的请求格式。需要实现转换函数：function transformAnthropicRequest(requestBody) { let maxTokens = requestBody.max_completion_tokens || requestBody.max_tokens || 512; const anthropicRequest = { model: requestBody.model, max_tokens: maxTokens, stream: requestBody.stream || false, temperature: requestBody.temperature || 1.0, top_p: requestBody.top_p }; if…

HSBC邮件追踪像素事件技术分析
type: item
date: 2026-01-29T06:18:19+00:00
description: HSBC 邮件追踪像素事件技术分析一、事件概述1. 事件背景2025 年 9 月，HSBC 银行向一位客户发送实体信函，声称发送给该客户的邮件被「退回且无法送达」，要求客户更新账户中的电子邮件地址。然而，客户实际上一直正常接收银行的所有邮件。2. 核心问题HSBC 使用追踪像素来监控客户是否阅读邮件，但该技术被隐私保护工具拦截，银行错误地将「无法追踪」理解为「邮件未送达」。3. 事件严重程度用户影响：误导性通知导致客户困扰安全风险：使用未加密 HTTP 传输追踪像素隐私问题：未经同意的邮件阅读监控二、事件经过1. 初始阶段：收到误导性信函客户收到 HSBC 实体信函，内容如下：声称发给客户的邮件被「退回且无法送达」要求客户更新在线银行账户中的电子邮件地址标注为「需要采取行动」然而，客户的邮箱中实际上正常存放着来自 HSBC 的最新邮件。2. 在线验证阶段客户按照信函指示登录银行账户，发现：账户中记录的电子邮件地址完全正确无需进行任何更新3. 客服沟通阶段A. 在线客服回应通过银行应用程序与客服代表 Ankitha 进行长达一小时沟通后，对方坚持表示：「如果银行发送了这封信，您就必须更新电子邮件地址」B. 电话客服回应直接致电客户服务部门后获得不同答复：「如果您的电子邮件地址已经正确，则可以忽略我们的来信」三、技术分析1. 追踪像素工作原理HSBC 在其邮件底部嵌入了追踪像素代码： A. 追踪像素是什么追踪像素是 1×1 像素的微小图片，通常为透明或白色，用于秘密追踪邮件阅读行为。B. 工作机制sequenceDiagram participant B as 银行服务器 participant E as 邮件服务器 participant C as 客户端 participant T as 追踪服务器 B->>E: 发送含追踪像素的邮件 E->>C: 投递邮件 C->>C: 用户打开邮件 C->>T: 请求加载追踪图片 T->>B: 记录阅读事件C. 追踪像素与传统回执的区别特性传统邮件回执追踪像素用户知情需要用户同意完全隐藏信息内容已读状态阅读时间、频率、次数可靠性依赖用户选择依赖客户端设置隐私保护有用户控制无用户控制2. 问题根因分析A. 直接原因客户使用隐私保护工具拦截了追踪像素，导致 HSBC 无法收到阅读确认。B. 深层原因（5 Whys 分析）为什么 HSBC 认为邮件未送达？因为追踪像素未被触发为什么追踪像素未被触发？因为客户的隐私保护工具拦截了追踪请求为什么 HSBC 依赖追踪像素确认送达？因为监控资本主义已普遍化，银行假设追踪技术 100% 可靠为什么银行不使用更可靠的验证方式？因为便利性和隐蔽性优先于准确性为什么会产生系统性误判？因为监控资本主义已透明化，银行无法想象用户会拒绝被监控C. 核心矛盾追踪像素的设计初衷是秘密监控，而不是确认送达。两者存在本质区别：确认送达：邮件成功到达收件箱追踪像素：收件人打开了邮件（且未拦截追踪）四、安全问题1. 未加密传输风险HSBC 使用 HTTP 而非 HTTPS 协议传输追踪像素，导致以下风险：A. 网络监听风险当客户在公共 WiFi（如咖啡馆）打开银行邮件时：同一网络的其他人可看到追踪请求攻击者可获知客户使用的银行攻击者可知道客户正在查看银行邮件B. 中间人攻击风险未加密连接允许攻击者：注入恶意内容到邮件底部篡改追踪像素参数执行其他攻击行为2. 隐私侵犯问题A. 超范围数据收集追踪像素可记录：阅读时间戳阅读次数阅读频率可能的 IP 地址和设备信息B. 未经同意的监控未征求用户同意未提供关闭选项违反隐私设计原则五、系统性问题分析1. 监控资本主义普遍化问题的核心在于监控资本主义已变得如此普遍，以至于：银行假设追踪技术 100% 可靠银行无法想象用户会拒绝被监控银行将「无法追踪」等同于「无法送达」2. 邮件系统的设计原则电子邮件最初设计的核心原则：发送方无法知道收件人是否已读邮件收件人完全控制阅读行为隐私保护是内置特性追踪像素破坏了这些原则，引入了:发送方监控能力未经用户同意的数据收集隐私侵犯机制六、改进建议1. 技术层面改进A. 最低要求：使用加密连接将所有追踪像素从 HTTP 改为 HTTPS防止网络监听和数据泄露降低中间人攻击风险B. 停止依赖不可靠的代理认识到追踪像素不等于送达确认建立更可靠的邮件验证机制接受隐私保护是用户的合法选择C. 最佳实践：停止邮件监控尊重用户隐私权遵循「最小必要」数据收集原则实践银行自身发布的数据伦理原则2. 流程层面改进A. 准确的信函模板原模板错误之处：声称邮件「退回且无法送达」标注「需要采取行动」威胁要求更新电子邮件地址改进后的模板应说明：「需要确认您能收到我们的邮件」「请检查您是否收到我们的邮件」「请验证账户中的电子邮件地址是否正…

智谱AI HTTP API 调用教程
type: item
date: 2026-01-20T03:55:04+00:00
description: 智谱AI HTTP API 调用教程一、概述1. 简介A. 是什么智谱AI 提供基于 RESTful 架构的应用程序接口，通过标准的 HTTP 协议与智谱AI 的模型服务进行交互。开发者可以使用任何支持 HTTP 协议的编程语言或开发框架调用智谱AI 的各种 AI 模型。B. 为什么学跨平台兼容：支持所有支持 HTTP 协议的编程语言和平台标准协议：基于 RESTful 设计，遵循 HTTP 标准，易于理解和使用灵活集成：可以集成到任何现有的应用程序和系统中实时调用：支持同步和异步调用，满足不同场景需求C. 学完能做什么使用任何编程语言调用智谱AI 的 GLM 系列模型实现简单对话、流式响应和多轮对话功能正确处理 API 鉴权和错误响应在生产环境中安全、高效地集成智谱AI 服务二、环境准备1. 前置条件有效的智谱AI 账户已获取 API Key基本的 HTTP 请求知识至少熟悉一种编程语言（Python、JavaScript、Java 等）2. 获取 API Key步骤流程访问智谱AI 开放平台：https://bigmodel.cn注册并登录账户进入 API Keys 管理页面创建 API Key复制生成的 API Key 以供使用安全建议建议将 API Key 设置为环境变量，避免硬编码到代码中，以提高安全性。三、API 基础信息1. 请求端点通用 API 端点https://open.bigmodel.cn/api/paas/v4/Coding 专用端点使用 GLM 编码套餐时，需要使用专属端点：https://open.bigmodel.cn/api/coding/paas/v4注意：Coding API 端点仅限 Coding 场景使用，不适用于通用 API 场景。2. 请求头要求所有请求必须包含以下 HTTP 头：请求头值说明Content-Typeapplication/json指定请求体格式为 JSONAuthorizationBearer YOUR_API_KEYAPI 密钥鉴权3. 支持的鉴权方式A. API Key 鉴权最简单的鉴权方式，直接使用 API Key：curl --location 'https://open.bigmodel.cn/api/paas/v4/chat/completions' \ --header 'Authorization: Bearer YOUR_API_KEY' \ --header 'Content-Type: application/json' \ --data '{ "model": "glm-4.7", "messages": [ { "role": "user", "content": "你好" } ] }'B. JWT Token 鉴权适用于需要更复杂权限控制的场景（具体实现请参考官方文档）。四、基础调用示例1. 简单对话请求示例curl --location 'https://open.bigmodel.cn/api/paas/v4/chat/completions' \ --header 'Authorization: Bearer YOUR_API_KEY' \ --header 'Content-Type: application/json' \ --data '{ "model": "glm-4.7", "messages": [ { "role": "user", "content": "请介绍一下人工智能的发展历程" } ], "temperature": 1.0, "max_tokens": 1024 }'参数说明model：使用的模型名称，如 glm-4.7messages：对话消息列表temperature：控制输出随机性，范围 0-2，默认 1.0max_tokens：限制响应最大 token 数2. 流式响应请求示例curl --location 'https://open.bigmodel.cn/api/paas/v4/chat/completions' \ --header 'Authorization: Bearer YOUR_API_KEY' \ --header 'Content-Type: application/json' \ --data '{ "model": "glm-4.7", "messages": [ { "role": "user", "content": "写一首关于春天的诗" } ], "stream": true }'流式响应特点设置 stream 参数为 true 启用流式响应响应以 Server-Sent Events（SSE）格式返回可以实时获取模型生成的内容3. 多轮对话请求示例curl --…

MaR HTTP 数据包智能匹配替换工具技术分析
type: item
date: 2026-01-19T13:42:16+00:00
description: MaR HTTP 数据包智能匹配替换工具技术分析一、概述1. 项目背景A. 项目简介MaR（Matcher and Replacer）是一款网络安全领域的辅助工具，主要用于 HTTP 协议数据包的精确匹配和智能替换。它能够在满足特定条件时，根据用户定义的规则自动修改 HTTP 请求或响应内容，帮助安全研究人员在渗透测试过程中实现数据篡改自动化。B. 设计理念MaR 的设计理念源自 BurpSuite 原生的 Match and Replace 功能，但提供了更灵活强大的规则配置能力，支持条件匹配、正则表达式、多范围等高级特性。C. 技术栈开发语言：Java开发框架：Montoya API依赖平台：BurpSuite >= 2023.12.12. 核心价值A. 自动化程度高通过规则引擎自动处理 HTTP 流量，减少手动操作B. 灵活性强支持多种匹配范围、条件关系和正则表达式C. 易用性好提供右键快速创建规则功能，配置文件结构清晰二、系统架构1. 整体架构graph TB A[HTTP 流量] --> B[BurpSuite 拦截] B --> C[MaR 插件] C --> D{规则匹配引擎} D -->|条件满足| E[执行替换] D -->|条件不满足| F[原样转发] E --> G[修改后数据包] F --> H[原始数据包] G --> I[发送/接收] H --> I J[Config.yml] --> D K[Rules.yml] --> D L[用户界面] --> D2. 核心组件A. 规则引擎负责解析和执行用户定义的匹配替换规则B. 配置管理器管理 Config.yml 和 Rules.yml 配置文件C. UI 交互层提供规则管理和配置界面D. 消息处理器拦截和处理 HTTP 消息3. 工作流程sequenceDiagram participant U as 用户 participant B as BurpSuite participant M as MaR 插件 participant R as 规则引擎 participant C as 配置文件 U->>B: 发起 HTTP 请求 B->>M: 拦截消息 M->>C: 加载规则 C-->>M: 返回规则列表 M->>R: 匹配条件 alt 条件满足 R->>M: 执行替换 M->>B: 修改后消息 else 条件不满足 R->>M: 保持原样 M->>B: 原始消息 end B->>U: 返回响应三、功能详解1. 规则配置项MaR 的规则配置包含以下核心项目：配置项说明Name规则名称，用于标识规则C-Scope条件范围，指定在哪个部分检查条件Relationship匹配关系，支持「匹配」和「不匹配」Condition条件内容，用于判断是否执行替换C-Regex条件是否使用正则表达式M-Scope替换范围，指定在哪个部分执行替换Match匹配内容，需要被替换的内容Replace替换内容，替换后的新内容M-Regex替换是否使用正则表达式2. 支持的作用范围A. 请求相关范围request：完整请求request method：请求方法request uri：请求 URIrequest header：请求头request body：请求体B. 响应相关范围response：完整响应response status：响应状态码response header：响应头response body：响应体3. 高级配置A. 排除后缀排除指定后缀的请求，避免处理静态资源B. 阻止主机排除对指定域名的请求C. 作用域选择 MaR 应用于 BurpSuite 的哪些模块（Proxy、Repeater、Intruder 等）四、配置管理1. 配置文件位置A. Linux/Mac 用户配置文件位于：~/.config/MaR/B. Windows 用户配置文件位于：%USERPROFILE%/.config/MaR/C. 便携模式配置文件可放置在 MaR Jar 包同级目录下的 /.config/MaR/ 目录，方便离线使用2. 配置文件结构A. Config.yml全局配置文件，包含排除规则、作用范围等设置B. Rules.yml规则定义文件，存储所有匹配替换规则五、应用场景1. 参数篡改根据条件自动修改请求参数值示例场景：将普通用户 ID 修改为管理员 ID修改价格参数进行逻辑漏洞测试修改权限标识进行越权测试2. 响应修改修改响应内容绕过前端验证示例场景：修改响应状态码绕过前端限制修改返回数据测试 XSS修改错误信息探测后端逻辑3. 请求注入自动添加或修改请求/响应头示例场景：添加测试头进行鉴权绕过修改 Content-Type 进行注入测试添加自定义头部进行 CRLF 注…

WSIStreamer 云原生 WSI 流媒体服务器技术分析
type: item
date: 2026-01-18T13:20:12+00:00
description: WSIStreamer 云原生 WSI 流媒体服务器技术分析一、项目概述1. 项目背景WSIStreamer 是一个现代化的云原生全切片图像瓦片服务器。全切片图像通常体积巨大（1-3GB+），传统查看器需要下载整个文件才能显示单个瓦片，这在云存储场景下效率极低。2. 核心创新WSIStreamer 采用完全不同的方法：原生理解切片格式，通过 HTTP Range 请求仅获取所需的字节，立即返回 JPEG 瓦片。这实现了真正的按需流式传输，无需本地文件存储。3. 项目亮点一行命令启动服务：无需配置文件、无本地存储、无复杂设置云原生设计：直接从 S3 兼容对象存储服务生产级就绪：支持 HMAC-SHA256 签名 URL 认证多级缓存：切片、块、编码瓦片三级缓存机制二、技术架构1. 系统架构WSIStreamer 采用分层架构设计，核心是理解 WSI 格式并按需提取数据。graph TB Client[客户端浏览器] -->|HTTP 请求| Server[WSIStreamer 服务器] Server -->|Range 请求| S3[S3 兼容存储] Server -->|格式解析| Parser[Rust 解析器] Parser -->|Aperio SVS| SVS[SVS 格式] Parser -->|Pyramidal TIFF| TIFF[TIFF 格式] Server -->|JPEG 瓦片| Client Server -->|多级缓存| Cache[缓存系统] Cache --> L1[切片缓存] Cache --> L2[块缓存] Cache --> L3[瓦片缓存]2. 核心组件A. 格式解析器Aperio SVS 解析器：处理 SVS 格式医学图像Pyramidal TIFF 解析器：支持金字塔 TIFF 格式压缩支持：JPEG、JPEG 2000B. 存储适配器AWS S3 原生支持S3 兼容存储（MinIO、Ceph 等）HTTP Range 请求优化C. 缓存系统切片级缓存：默认最多 100 个切片块级缓存：减少重复的 Range 请求瓦片缓存：编码后的 JPEG 瓦片，默认 100MBD. Web 查看器基于 OpenSeadragon支持平移、缩放深色主题3. 工作流程sequenceDiagram participant U as 用户浏览器 participant W as WSIStreamer participant S as S3 存储 U->>W: 请求瓦片 /tiles/slide.svs/0/0/0.jpg W->>W: 检查缓存 alt 缓存命中 W-->>U: 返回 JPEG 瓦片 else 缓存未命中 W->>W: 解析切片文件结构 W->>S: Range 请求（仅所需字节） S-->>W: 返回图像块数据 W->>W: 解码并裁剪瓦片 W->>W: JPEG 编码 W->>W: 存入缓存 W-->>U: 返回 JPEG 瓦片 end三、技术实现1. 开发语言与框架语言：Rust 97.1%（Shell 2.3%、Dockerfile 0.6%）Web 框架：基于 Rust 异步运行时图像处理：原生 Rust 实现2. 核心功能A. Range 请求优化// 伪代码示例 async fn fetch_tile_range(s3_client: &S3Client, slide_id: &str, offset: u64, length: u64) -> Vec<u8> { s3_client.get_object() .bucket(slide_id) .range(format!("bytes={}-{}", offset, offset + length - 1)) .send() .await .body() .collect() }B. 多级缓存实现L1：切片元数据缓存（避免重复解析文件头）L2：块数据缓存（减少 Range 请求）L3：编码瓦片缓存（直接返回 JPEG）C. 认证机制支持 HMAC-SHA256 签名 URL 认证：graph LR A[客户端] -->|1. 请求签名| B[签名服务] B -->|2. 生成签名URL| A A -->|3. 带签名请求| C[WSIStreamer] C -->|4. 验证签名| C C -->|5. 返回瓦片| A3. API 设计A. RESTful 端点端点方法描述/healthGET健康检查/view/{slide_id}GETWeb 查看器/tiles/{slide_id}/{level}/{x}/{y}.jpgGET获取瓦片/slidesGET列出所有切片/slides/{slide_id}GET…

Hetty HTTP 安全研究工具技术分析
type: item
date: 2026-01-18T01:42:59+00:00
description: Hetty HTTP 安全研究工具技术分析一、概述1. 项目简介Hetty 是一个专为安全研究设计的 HTTP 工具包，旨在成为 Burp Suite Pro 等商业软件的开源替代方案。该项目针对信息安全（infosec）和漏洞赏金（bug bounty）社区的需求，提供强大的 HTTP 流量拦截和分析功能。2. 核心定位A. 开源替代方案Hetty 的核心目标是提供与商业工具 Burp Suite Pro 相当的功能，但以开源 MIT 许可证发布，让所有人都能免费使用。B. 目标用户群体信息安全研究人员漏洞赏金猎人渗透测试工程师Web 应用安全审计人员3. 项目背景Hetty 由 dstotijn 开发，使用 Go 语言编写，目前处于活跃开发状态。项目采用 MIT 许可证，鼓励社区贡献和二次开发。二、核心功能1. MITM HTTP 代理A. 流量拦截中间人攻击（MITM）代理功能完整记录 HTTP/HTTPS 请求和响应支持高级搜索和日志过滤B. 证书管理自动生成根 CA 证书支持自定义证书路径可通过 cert 子命令管理证书2. HTTP 客户端A. 请求编辑手动创建和编辑 HTTP 请求重放代理拦截的请求支持修改请求头、请求体等B. 请求发送直观的请求构建界面支持各种 HTTP 方法实时查看响应结果3. 拦截模式A. 请求拦截拦截发往目标服务器的请求手动审查和修改请求内容支持发送、接收或取消操作B. 响应拦截拦截服务器返回的响应查看和修改响应内容用于测试注入漏洞等场景4. 项目管理A. Scope 功能定义测试范围，保持工作有序基于域名、路径等规则过滤避免测试范围外的请求B. 数据库存储基于 SQLite 的项目数据库每个项目独立存储数据便于管理和切换不同项目5. Web 管理界面A. 用户界面易用的基于 Web 的管理界面实时显示代理日志直观的请求/响应查看器B. 功能布局代理日志视图请求编辑器项目设置面板三、技术架构1. 系统架构graph TB Client[客户端浏览器] -->|HTTP请求| Hetty[Hetty 代理] Hetty -->|转发请求| Target[目标服务器] Target -->|响应| Hetty Hetty -->|返回响应| Client Hetty -->|数据存储| Database[(SQLite 数据库)] Hetty -->|用户交互| WebUI[Web 管理界面] User[安全研究人员] -->|访问| WebUI2. 核心组件A. 代理服务器监听指定端口（默认 8080）处理 HTTP/HTTPS 流量实现 MITM 功能B. GraphQL 服务提供 API 接口支持数据查询和操作与前端界面交互C. 数据库层SQLite 存储项目隔离持久化日志数据D. Web 界面现代化单页应用实时数据更新响应式设计3. 技术栈组件技术选型说明后端语言Go高性能、并发支持好数据库SQLite轻量级、无需额外部署Web 框架内置 HTTP 服务器简化部署前端现代化 JavaScript交互友好代理协议HTTP/HTTPS标准协议支持四、安装部署1. 系统要求A. 操作系统macOS（支持 Homebrew）Linux（各发行版）Windows（支持 Scoop）B. 运行环境端口 8080 可用（可配置）文件系统写入权限（用于证书和数据库）网络连接2. 安装方式A. macOS（推荐）使用 Homebrew 安装：brew install hettysoft/tap/hettyB. Windows使用 Scoop 安装：scoop bucket add hettysoft https://github.com/hettysoft/scoop-bucket.git scoop install hettysoft/hettyC. Linux从 GitHub Releases 下载对应架构的二进制文件，移动到 PATH 目录。D. Docker 部署使用 Docker 运行：docker run -v $HOME/.hetty:/root/.hetty -p 8080:8080 \ ghcr.io/dstotijn/hetty:latest参数说明：-v $HOME/.hetty:/root/.hetty：挂载数据卷，持久化证书和数据库-p 8080:8080：端口映射3. 配置选项A. 命令行参数hetty [flags] [subcommand] [flags]B. 主要选项选项默认值说明--cert~/.hetty/hetty_cert.pem根 CA 证书路径--key~/.hetty/hetty_key.pem根 CA 私钥路径--db~/.hetty/hetty.db数…

httpx HTTP 多用途探测工具技术分析
type: item
date: 2026-01-18T01:18:53+00:00
description: httpx HTTP 多用途探测工具技术分析一、概述1. 简介httpx 是由 ProjectDiscovery 团队开发的一款快速且多用途的 HTTP 工具包，它允许使用 retryablehttp 库运行多种探测。该工具设计用于在增加线程数量的同时保持结果可靠性。2. 核心特点A. 技术优势简单且模块化的代码库，易于贡献快速且完全可配置的标志以探测多个元素支持多种基于 HTTP 的探测智能的 HTTPS 到 HTTP 自动回退机制支持 hosts、URL 和 CIDR 作为输入处理边界情况，包括重试、退避等，以应对 WAF（Web 应用防火墙）B. 应用场景网络资产发现安全测试和渗透测试Bug 赏金狩猎OSINT（开源情报）收集管道化批量处理二、支持的探测类型httpx 提供了丰富的探测选项，默认启用的探测包括：探测类型默认启用描述URL是目标 URLTitle是页面标题Status Code是HTTP 状态码Content Length是响应内容长度TLS Certificate是TLS 证书信息CSP Header是内容安全策略头Line Count是响应行数Word Count是响应词数Location Header是重定向位置Web Server是Web 服务器信息Web Socket是WebSocket 支持Response Time是响应时间Request Method是请求方法Body Hash是响应体哈希Header Hash是响应头哈希URL Scheme是URL 方案（http/https）可选探测类型：IP：主机 IP 地址CNAME：CNAME 记录Raw HTTP：原始 HTTP 响应HTTP2：HTTP/2 支持HTTP Pipeline：HTTP 管道支持Virtual host：虚拟主机探测Paths：路径探测Ports：端口探测Favicon Hash：网站图标哈希Probe Status：探测状态Redirect chain：重定向链JARM Hash：JARM 指纹哈希ASN：自治系统号CDN：CDN/WAF 检测三、安装与配置1. 系统要求httpx 需要 Go >= 1.24.0 版本才能成功安装。2. 安装方法go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest3. Docker 方式docker pull projectdiscovery/httpx4. 配置文件默认配置文件路径：$HOME/.config/httpx/config.yaml四、核心架构1. 工作原理graph TB A[输入源] --> B{输入类型} B -->|hosts| C[DNS解析] B -->|URLs| D[URL标准化] B -->|CIDR| E[IP枚举] C --> F[目标队列] D --> F E --> F F --> G[线程池 默认50线程] G --> H[HTTP探测引擎] H --> I{探测类型} I -->|默认| J[基本探测] I -->|可选| K[高级探测] J --> L[结果收集] K --> L L --> M{输出格式} M -->|JSON| N[JSONL输出] M -->|CSV| O[CSV输出] M -->|标准| P[终端输出] H -->|WAF检测| Q[重试/退避] Q --> H2. 探测流程sequenceDiagram participant C as 客户端 participant H as httpx participant T as 目标服务器 participant WAF as WAF/防火墙 C->>H: 提供目标列表 H->>H: 解析和标准化输入 H->>T: HTTPS 探测 alt HTTPS 成功 T-->>H: HTTPS 响应 H->>H: 执行探测 else HTTPS 失败 H->>T: HTTP 回退探测 alt HTTP 成功 T-->>H: HTTP 响应 H->>H: 执行探测 else HTTP 失败 H->>H: 重试/退避 H->>WAF: WAF 绕过处理 end end H-->>C: 返回探测结果五、使用方法1. 基本用法# 显示帮助 httpx -h # 探测单个目标 httpx -u https://example.com # 探测多个目标 httpx -u https://example.com -u https://example.org # 从文件读取目标 httpx -l targets.txt2. 输出控制# JSON 格式输出 httpx -l targets.txt -json -o …