Sandler73/Socat-Network-Operations-Manager
GitHub: Sandler73/Socat-Network-Operations-Manager
一款基于 Bash 的 socat 网络操作管理器,通过六种操作模式和会话追踪机制,将复杂的 socat 命令封装为可管理、可审计的生产级网络中继工具。
Stars: 1 | Forks: 0
Socat 网络操作管理器
一个综合性的基于 socat 的网络监听器、转发器、隧道器和流量重定向器
具备可靠性和多会话管理功能。
快速开始 · 模式 · 使用指南 · 更新日志 · 安全 · 测试 · 贡献
**[完整文档 Wiki](https://github.com/Sandler73/Socat-Network-Operations-Manager/wiki)** — 详细的指南、架构、场景和开发者参考。 ## 目录 - [概述](#overview) - [核心亮点](#key-highlights) - [功能](#features) - [架构](#architecture) - [前置条件](#prerequisites) - [快速开始](#quick-start) - [模式示例](#mode-examples) - [操作模式](#operational-modes) - [listen](#listen-mode) - [batch](#batch-mode) - [forward](#forward-mode) - [tunnel](#tunnel-mode) - [redirect](#redirect-mode) - [status](#status-mode) - [stop](#stop-mode) - [全局选项](#global-options) - [会话管理](#session-management) - [协议选择](#protocol-selection) - [流量捕获](#traffic-capture) - [Watchdog 自动重启](#watchdog-auto-restart) - [日志记录](#logging) - [目录结构](#directory-structure) - [安全注意事项](#security-considerations) - [故障排除](#troubleshooting) - [测试](#testing) - [贡献](#contributing) - [文档](#documentation) - [版本历史](#version-history) - [致谢](#acknowledgments) - [许可证](#license) - [支持](#support) ## 概述 `socat_manager.sh` 为管理基于 socat 的网络操作提供了统一的命令行接口。它将 socat 强大但复杂的语法封装为六种直观的操作模式,并增加了会话跟踪、进程组隔离、协议感知生命周期管理、流量捕获和自动重启功能。 每个启动的 socat 进程都会接收一个唯一的 8 字符十六进制 **Session ID**,通过 `setsid` 被置于其自己的**进程组**中,并在持久的 `.session` 元数据文件中被跟踪。这实现了跨终端会话和脚本调用的可靠状态查询和干净关闭——您可以在一个终端中启动重定向器,在另一个终端中检查其状态,并在第三个终端中停止它。(返回顶部)
## 核心亮点 | | 功能 | 描述 | |---|---------|-------------| | 🔀 | **六种操作模式** | listen, batch, forward, tunnel, redirect — 以及用于生命周期管理的 status 和 stop | | 🔌 | **协议灵活性** | 单独使用 TCP4, TCP6, UDP4, UDP6 (`--proto`) 或同时使用 TCP+UDP (`--dual-stack`) | | 📡 | **流量捕获** | 在所有模式(listen, batch, forward, tunnel, redirect)下支持详细的十六进制转储日志记录 (`--capture`) | | 🔖 | **会话跟踪** | 具有 8 字符十六进制唯一 Session ID 和持久的 `.session` 元数据文件 | | 🔒 | **进程隔离** | 每个 socat 进程通过 `setsid` 置于自己的进程组中,并进行 PID 文件移交 | | 🛡️ | **协议感知停止** | 停止 TCP 不会影响同一端口上的 UDP,反之亦然 | | 🖥️ | **交互式菜单** | 无参数运行可获得引导式菜单驱动界面,支持验证和取消操作 | | ⚡ | **非阻塞启动** | 脚本立即返回到提示符——无终端阻塞 | | 🔄 | **Watchdog 自动重启** | 指数退避(1s→最高 60s)具有可配置的最大重启次数 | | 📦 | **批处理操作** | 通过单个命令在端口列表、范围或配置文件上启动监听器 | | 📝 | **结构化日志记录** | 符合 OWASP/NIST SP 800-92 标准的格式,具有关联 ID 和每次会话的审计跟踪 |(返回顶部)
## 功能 ### 核心能力 - **六种操作模式**:listen, batch, forward, tunnel, redirect, status, stop - **协议灵活性**:可通过 `--proto` 单独使用 TCP4, TCP6, UDP4, UDP6,或通过 `--dual-stack` 同时使用 TCP 和 UDP - **流量捕获**:所有操作模式(listen, batch, forward, tunnel, redirect)均支持详细的十六进制转储日志记录 (`--capture`) - **会话管理**:具有 8 字符十六进制唯一 Session ID 和 `.session` 元数据文件用于持久跟踪 - **进程组隔离**:每个 socat 进程通过 `setsid` 启动,并带有 PID 文件移交,用于可靠的跨调用跟踪 - **协议感知停止**:停止 TCP 会话不会影响同一端口上的 UDP 会话,反之亦然 - **非阻塞启动**:脚本在启动会话后立即返回到提示符——无终端阻塞 - **Watchdog 自动重启**:指数退避(1s, 2s, 4s...最高 60s)具有可配置的最大重启次数 - **交互式菜单**:无参数启动带有引导输入、验证、依赖检查和取消支持的全功能菜单 - **批处理操作**:通过单个命令在端口列表、范围或配置文件上启动监听器 ### 输入验证与安全 - 基于白名单的端口、主机名、协议、文件路径和 Session ID 验证 - 对所有用户提供的输入(主机名、路径)进行命令注入防范 - 文件路径参数的路径遍历保护 - 会话目录权限限制为 700 - 会话文件权限限制为 600 - 私钥文件权限限制为 600 - 基于端口的回退终止操作仅针对 socat 进程(进程名验证) - 主机名或路径参数中不允许使用 Shell 元字符 有关完整的威胁模型、实施的控制措施和安全部署指南,请参阅 [SECURITY.md](SECURITY.md)。 ### 日志记录与审计 - 带有关联 ID 的结构化主执行日志(符合 OWASP/NIST SP 800-92 标准的格式) - 用于独立审计跟踪的每次会话日志文件 - 用于捕获 stderr 的每次会话错误日志 - 每次会话和协议的流量捕获日志(socat `-v` 十六进制转储) - 具有颜色编码严重级别(DEBUG, INFO, WARNING, ERROR, CRITICAL)的控制台输出(返回顶部)
## 架构 ### 进程启动模型 ``` socat_manager.sh (launcher) │ ├── setsid bash -c 'echo $$ > pidfile; exec socat ...' &>/dev/null & │ │ │ └── socat (PID == PGID, session leader) │ ├── socat fork (child for connection 1) │ ├── socat fork (child for connection 2) │ └── ... │ ├── Reads real socat PID from pidfile ├── Registers session: SID, PID, PGID, protocol, port, command └── Returns to prompt (non-blocking) ``` **关键设计决策:** 1. **`setsid`** 创建一个新的进程组。Socat 成为组长进程(PID == PGID),因此 `kill -TERM -${PGID}` 可以在一个操作中终止 socat 及其所有 `fork` 的子进程。 2. **PID 文件移交**:内部的 `bash -c` 在 `exec socat` 之前将 `$$` 写入临时文件。由于 `exec` 保留了 PID,父进程读取到的是实际的 socat PID(而不是已终止的包装器 PID)。 3. **无 `$()` 子 shell**:Session ID 通过全局变量(`LAUNCH_SID`)返回,而不是通过命令替换返回,从而防止了会阻塞终端的 stdout 文件描述符继承。 4. **通过 `setsid` 完全分离**:进程在一个新的会话和进程组中运行,因此它不在父 shell 的作业表中。结合 `&>/dev/null` 重定向,没有文件描述符或作业引用泄漏回启动终端。 ### 会话文件格式 ``` # socat_manager 会话文件 v2.2 SESSION_ID=a1b2c3d4 SESSION_NAME=redir-tcp4-8443-example.com-443 PID=12345 PGID=12345 MODE=redirect PROTOCOL=tcp4 LOCAL_PORT=8443 REMOTE_HOST=example.com REMOTE_PORT=443 SOCAT_CMD=socat -v TCP4-LISTEN:8443,reuseaddr,fork,backlog=128 TCP4:example.com:443 STARTED=2026-03-20T14:30:00 CORRELATION=a1b2c3d4 LAUNCHER_PID=9999 ``` ### 停止序列 ``` 1. Read session metadata (PID, PGID, PROTOCOL) 2. Signal watchdog via .stop file (if applicable) 3. SIGTERM entire process group: kill -TERM -${PGID} 4. SIGTERM specific PID + children: kill -TERM ${PID}; pkill -TERM -P ${PID} 5. Wait grace period (5 seconds, checking every 0.5s) 6. SIGKILL if still alive: kill -KILL -${PGID} 7. Fallback: protocol-scoped port-based kill via ss/lsof (socat processes only) 8. Verify port freed (protocol-scoped, avoids cross-protocol interference) 9. Remove session file after confirmed dead ```(返回顶部)
## 前置条件 ### 必需项 | 依赖 | 用途 | 安装 | |------------|---------|---------| | **socat** | 核心网络操作 | `sudo apt-get install -y socat` | | **bash** 4.4+ | 脚本执行(关联数组,`setsid`) | 大多数 Linux 上预装 | | **coreutils** | `setsid`, `kill`, `sleep`, `date`, `sha256sum` | 大多数 Linux 上预装 | ### 可选项 | 依赖 | 用途 | 安装 | |------------|---------|---------| | **openssl** | TLS 证书生成(tunnel 模式) | `sudo apt-get install -y openssl` | | **ss** (iproute2) | 端口状态检查,会话验证 | `sudo apt-get install -y iproute2` | | **netstat** (net-tools) | 备用端口状态检查 | `sudo apt-get install -y net-tools` | | **lsof** | 备用按端口发现进程 | `sudo apt-get install -y lsof` | | **pstree** (psmisc) | `status` 详细视图中的进程树显示 | `sudo apt-get install -y psmisc` | ### 系统要求 - 带有 `/proc/sys/kernel/random/uuid` 的 Linux 内核(用于生成 Session ID) - 特权端口(<1024)需要 Root/sudo 权限 - 需要 Bash 4.4+ 以支持关联数组和 `${var,,}` 小写扩展 ### 兼容性 通过 [GitHub Actions CI](.github/workflows/test.yml) 在每次推送时跨 8 个环境进行测试: | 发行版 | 版本 | Bash | CI 状态 | 包管理器 | 备注 | |-------------|---------|------|-----------|-----------------|-------| | **Ubuntu** | 22.04 LTS | 5.1 | ✅ 已验证 | `apt` | CI 运行器(原生) | | **Ubuntu** | 24.04 LTS | 5.2 | ✅ 已验证 | `apt` | CI 运行器(原生) | | **Ubuntu** | 24.04 LTS | 4.4 | ✅ 已验证 | `apt` | 最低 bash 版本(从源码编译) | | **Debian** | 12 (Bookworm) | 5.2 | ✅ 已验证 | `apt` | Docker 容器 | | **Kali Linux** | Rolling | 5.2 | ✅ 已验证 | `apt` | Docker 容器;socat 通常预装 | | **Rocky Linux** | 9 | 5.1 | ✅ 已验证 | `dnf` | Docker 容器;RHEL 二进制兼容 | | **AlmaLinux** | 9 | 5.1 | ✅ 已验证 | `dnf` | Docker 容器;RHEL 二进制兼容 | | **Arch Linux** | Rolling | 5.2 | ✅ 已验证 | `pacman` | Docker 容器 | **也有望在**任何带有 bash 4.4+ 和标准 coreutils 的 Linux 发行版上运行,包括 Fedora、openSUSE、Amazon Linux 2023 和 Raspberry Pi OS。RHEL 8/9 通过二进制兼容的 Rocky Linux 和 AlmaLinux 测试覆盖受到支持。(返回顶部)
## 快速开始 ``` # 1. 安装 socat sudo apt-get update && sudo apt-get install -y socat # 2. 克隆或下载 git clone https://github.com/Sandler73/Socat-Network-Operations-Manager.git cd socat-manager # 3. 全局安装(或跳过此步直接使用 ./socat_manager.sh 运行) sudo make install # 4. 启动交互式菜单(无参数) sudo socat-manager # 或直接使用 CLI 模式: socat-manager listen --port 8080 # Start a TCP listener socat-manager status # Check session status socat-manager stop --all # Stop everything ``` **交互式菜单**:无参数运行可启动带有输入验证和取消支持的引导式菜单驱动界面(在任何提示符下输入 `q` 可返回主菜单)。也可通过 `socat-manager menu` 访问。 **直接 CLI**:所有命令均按原样工作——`socat-manager listen --port 8080`、`socat-manager status` 等。完整的 CLI 参考请见[使用指南](USAGE_GUIDE.md)。 **替代方案**:无需安装直接运行——`chmod +x socat_manager.sh && sudo ./socat_manager.sh` ### 模式示例 每种操作模式的快速复制粘贴示例。有关完整选项、双栈配置和操作场景,请参阅[使用指南](USAGE_GUIDE.md)。 **Listen** — 启动捕获传入数据的 TCP/UDP 听器: ``` socat-manager listen --port 8080 socat-manager listen --port 5353 --proto udp4 socat-manager listen --port 8080 --dual-stack --capture ``` **Batch** — 同时在多个端口上启动监听器: ``` socat-manager batch --ports 8080,8081,8082 socat-manager batch --range 9000-9010 socat-manager batch --file conf/ports.conf --proto udp4 ``` **Forward** — 将本地端口的流量中继到远程主机: ``` socat-manager forward --lport 8080 --rhost 10.0.0.5 --rport 80 socat-manager forward --lport 5353 --rhost 10.0.0.1 --rport 53 --proto udp4 socat-manager forward --lport 443 --rhost backend.local --rport 8443 --capture ``` **Tunnel** — 创建 TLS 加密隧道(自动生成证书): ``` socat-manager tunnel --port 4443 --rhost 10.0.0.5 --rport 22 socat-manager tunnel --port 8443 --rhost db.internal --rport 3306 --capture ``` **Redirect** — 带有可选流量捕获的透明端口重定向: ``` socat-manager redirect --lport 80 --rhost 192.168.1.10 --rport 8080 socat-manager redirect --lport 53 --rhost 10.0.0.1 --rport 5353 --proto udp4 socat-manager redirect --lport 443 --rhost backend --rport 8443 --dual-stack ``` **Status** — 查看活动会话和会话详情: ``` socat-manager status socat-manager status --detail socat-manager status --cleanup ``` **Stop** — 按名称、端口、PID 终止会话或一次性终止所有会话: ``` socat-manager stop --all socat-manager stop --name listen-tcp4-8080 socat-manager stop --port 8080 socat-manager stop --pid 12345 ```(返回顶部)
## 操作模式 ### listen 模式 启动捕获传入数据并将其记录到日志文件中的单个 TCP 或 UDP 监听器。 ``` # 基本 TCP 监听器 ./socat_manager.sh listen --port 8080 # UDP 监听器 ./socat_manager.sh listen --port 5353 --proto udp4 # 同时监听 TCP + UDP ./socat_manager.sh listen --port 8080 --dual-stack # 带流量捕获 ./socat_manager.sh listen --port 8080 --capture # 绑定到特定接口 ./socat_manager.sh listen --port 8080 --bind 192.168.1.100 # 带自动重启 ./socat_manager.sh listen --port 8080 --watchdog ``` **选项:** | 选项 | 描述 | |--------|-------------| | `-p, --port- ` | 逗号分隔的端口列表 |
| `--range
(返回顶部)
## 全局选项 这些选项在所有操作模式下均可用: | 选项 | 描述 | |--------|-------------| | `--proto(返回顶部)
## 会话管理 由 `socat_manager.sh` 启动的每个 socat 进程都会获得: 1. 一个从 `/proc/sys/kernel/random/uuid` 生成并经过冲突检查的**唯一 8 字符十六进制 Session ID**(例如,`a1b2c3d4`)。 2. `sessions/` 目录中(权限为 600)的一个**`.session` 元数据文件**,包含 PID、PGID、模式、协议、端口、时间戳、完整的 socat 命令、关联 ID 和启动器 PID。 3. 通过 `setsid` 创建的一个**隔离的进程组**,使 socat 进程成为其自身的会话首进程和组长进程。这使得 `kill -TERM -${PGID}` 能够终止整个进程树(父进程 + 所有 fork 的子进程)。 会话在跨终端退出和脚本调用时持久存在。`status` 命令读取会话文件以报告所有托管进程。`stop` 命令使用 PID、PGID 和协议范围的端口验证来确保完全关闭。 **向后兼容性**:如果检测到来自 v1.x 的旧版 `.pid` 会话文件,它们会在启动时自动迁移到 v2.x `.session` 格式。(返回顶部)
## 协议选择 ### 单个协议 (`--proto`) 为会话选择特定协议: ``` ./socat_manager.sh listen --port 8080 --proto tcp4 # TCP4 (default) ./socat_manager.sh listen --port 5353 --proto udp4 # UDP4 ./socat_manager.sh listen --port 8080 --proto tcp6 # TCP6 (IPv6) ./socat_manager.sh listen --port 5353 --proto udp6 # UDP6 (IPv6) ``` ### 双栈 (`--dual-stack`) 在同一端口上启动 TCP 和 UDP。每个协议都有自己的 Session ID: ``` ./socat_manager.sh redirect --lport 8443 --rhost example.com --rport 443 --dual-stack # 输出: # [✓] 重定向器已激活:tcp4:8443 → example.com:443 (SID a1b2c3d4) # [✓] 重定向器已激活:udp4:8443 → example.com:443 (SID e5f67890) ``` 停止操作是协议感知的: ``` ./socat_manager.sh stop a1b2c3d4 # Stop only TCP (UDP remains active) ./socat_manager.sh stop e5f67890 # Stop only UDP ./socat_manager.sh stop --port 8443 # Stop both (all protocols on port) ```(返回顶部)
## 流量捕获 `--capture` 标志启用 socat 的 `-v`(详细)模式,该模式会生成 stderr 上所有流量的十六进制转储输出。启动器将此 stderr 重定向到每次会话的捕获日志文件: ``` # 在任何模式下捕获 ./socat_manager.sh listen --port 8080 --capture ./socat_manager.sh forward --lport 8080 --rhost 10.0.0.1 --rport 80 --capture ./socat_manager.sh tunnel --port 4443 --rhost 10.0.0.5 --rport 22 --capture ./socat_manager.sh redirect --lport 8443 --rhost example.com --rport 443 --capture ./socat_manager.sh batch --ports "8080,8443" --capture ``` 捕获日志文件写入至:`logs/capture-(返回顶部)
## Watchdog 自动重启 如果 socat 进程崩溃,`--watchdog` 标志会启用自动重启: ``` ./socat_manager.sh listen --port 8080 --watchdog ``` | 参数 | 值 | |-----------|-------| | 初始重启延迟 | 1 秒 | | 退避模式 | 指数级:1s, 2s, 4s, 8s, 16s, 32s, 60s | | 最大退避时间 | 60 秒(上限) | | 最大重启次数 | 10 次(默认值,可在源码中配置) | | 优雅停止 | 写入 `.stop` 信号文件;watchdog 在重启之间进行检查 |(返回顶部)
## 日志记录 ### 日志类型 | 日志 | 路径 | 描述 | |-----|------|-------------| | 主执行 | `logs/socat_manager-(返回顶部)
## 目录结构 ``` socat-manager/ # Repository root ├── socat_manager.sh # Main script (chmod +x) ├── Makefile # Build, test, install, package ├── .shellcheckrc # ShellCheck configuration ├── .gitignore # Git ignore rules ├── bin/ │ └── socat-manager # System-wide wrapper script ├── templates/ │ └── activate.sh # Virtual environment activation template ├── tests/ # BATS test suite (220 tests) │ ├── helpers/test_helper.bash # Shared setup/teardown │ ├── stubs/ # Mock binaries (socat, ss, openssl) │ ├── fixtures/ # Test data (session files, port configs) │ ├── unit/ # Unit tests (validation, session) │ └── integration/ # Integration tests (lifecycle, dual-stack, capture) ├── .github/ │ ├── workflows/test.yml # CI: lint + BATS on push/PR │ ├── workflows/release.yml # CD: build + publish on tag │ ├── ISSUE_TEMPLATE/ # Bug report, feature request, security │ └── PULL_REQUEST_TEMPLATE.md # PR checklist ├── README.md # This file ├── USAGE_GUIDE.md # Detailed usage and deployment guide ├── CONTRIBUTING.md # Development setup and contribution guide ├── CHANGELOG.md # Version history and change details ├── SECURITY.md # Security policy and threat model ├── CODE_OF_CONDUCT.md # Contributor code of conduct └── LICENSE # MIT License ``` 运行时目录(`sessions/`、`logs/`、`certs/`、`conf/`)在首次运行时自动创建,并通过 `.gitignore` 排除在版本控制之外。(返回顶部)
## 安全注意事项 ### 输入验证 - 所有端口均验证为 1-65535 范围内的整数 - 所有主机名均根据 IPv4、IPv6 和 RFC 1123 模式进行验证 - 主机名中阻止 Shell 元字符(`; | & $ \` ( ) { } [ ] < > ! #`) - 文件路径中阻止路径遍历(`..`)和注入字符 - Session ID 验证为恰好 8 个小写十六进制字符 - 协议字符串根据白名单进行验证(tcp4, tcp6, udp4, udp6) ### 进程隔离 - 每个 socat 进程在其自己的进程组(`setsid`)中运行 - 会话文件具有限制性权限(600) - 会话目录具有限制性权限(700) - 生成的私钥文件权限为 600 - 基于端口的回退终止仅针对 comm 名称为 `socat` 的进程(通过 `ps` 验证) ### 此工具不做的事情 - 不加密流量(tunnel 模式的 TLS 除外) - 不验证到监听器/转发器/重定向器的连接 - 不实施速率限制或连接节流 - 不过滤或检查流量内容(捕获是被动的十六进制转储) - 自签名证书(tunnel 模式默认)不受客户端信任,除非明确配置 有关完整策略、威胁模型、实施的控制、已知限制和安全部署指南,请参阅 [SECURITY.md](SECURITY.md)。(返回顶部)
## 故障排除 ### 会话在 status 中显示为 DEAD,但端口仍被占用 原始进程可能在没有通过 `socat_manager.sh stop` 的情况下被终止。运行: ``` ./socat_manager.sh status --cleanup # Remove stale session files ./socat_manager.sh status --verbose # Show system-level socat listeners via ss ``` 然后手动终止任何孤立的 socat 进程: ``` ss -tlnp | grep :8443 # Find PID kill(返回顶部)
## 测试 该项目包含一个基于 [BATS](https://github.com/bats-core/bats-core)(Bash Automated Testing System)构建的综合测试套件,包含 220 项测试,涵盖验证、会话管理、生命周期操作、协议范围的停止和流量捕获。 ``` # 运行完整测试套件(lint + 所有测试) make test # 仅运行单元测试(快速,约 2 秒) make test-unit # 仅运行集成测试(使用 mock socat/ss stubs) make test-integration # 仅运行 ShellCheck linting make lint # 运行特定测试文件 bats tests/unit/validation.bats # 按名称运行特定测试 bats tests/integration/dual_stack.bats --filter "stopping TCP preserves UDP" ``` | 测试文件 | 测试数 | 覆盖范围 | |-----------|-------|----------| | `tests/unit/validation.bats` | 68 | 所有 `validate_*` 函数、`generate_session_id`、`get_alt_protocol` | | `tests/unit/session.bats` | 30 | `session_register`、`session_read_field`、`session_find_by_*`、`session_cleanup_dead` | | `tests/integration/lifecycle.bats` | 23 | 启动、PID 文件移交、停止、非阻塞、多会话、命令构建器 | | `tests/integration/dual_stack.bats` | 8 | 协议范围的停止、双栈启动、端口隔离 | | `tests/integration/capture.bats` | 14 | 所有构建器中的捕获标志、stderr 重定向、双栈捕获隔离 | 测试使用 socat、ss 和 openssl 的模拟存根,以便在没有实际网络操作或依赖项的情况下运行。有关编写和运行测试的详细信息,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 **CI/CD**:每次推送和 PR 都会通过 [GitHub Actions](.github/workflows/test.yml) 跨 bash 版本(4.4, 5.1, 5.2)和 Ubuntu 版本(22.04, 24.04)矩阵自动运行测试套件。发布通过[标签触发的工作流](.github/workflows/release.yml)自动化。(返回顶部)
## 贡献 我们欢迎并感谢您的贡献。贡献步骤: 1. **Fork** 本代码库 2. **创建**一个功能分支(`git checkout -b feature/your-feature-name`) 3. 使用清晰、描述性的消息**提交**您的更改(`git commit -m 'Add: description of change'`) 4. **推送**到您的分支(`git push origin feature/your-feature-name`) 5. **打开**一个 Pull Request,包含有关更改、动机和所执行测试的详细描述 ### 指南 - 提交前运行 `make test`——所有 220 项测试必须通过 - 运行 `make lint`——ShellCheck 必须报告无警告 - 遵循现有的代码风格:全面的函数文档头(描述、参数、返回)、解释非显而易见逻辑的内联注释以及一致的格式 - 所有用户提供的输入必须通过现有的验证函数 - 新的 CLI 标志必须添加到模式参数解析器、命令构建器、帮助函数和至少一个 BATS 测试中 - 在 `[Unreleased]` 部分下的 `CHANGELOG.md` 中更新您的更改 - 阅读并遵循[行为准则](CODE_OF_CONDUCT.md) - 按照 [SECURITY.md](SECURITY.md) 私下报告安全漏洞——不要为安全错误打开公开 Issue 有关完整的开发指南,包括环境设置、测试架构、编码标准和 PR 流程,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。(返回顶部)
## 文档 | 文档 | 描述 | |----------|-------------| | [README.md](README.md) | 项目概述、功能、架构和快速参考(本文件) | | [USAGE_GUIDE.md](USAGE_GUIDE.md) | 详细使用方法、安装方式(直接安装、make install、venv)、测试指南、操作场景和故障排除 | | [CHANGELOG.md](CHANGELOG.md) | 完整版本历史,包含每个版本的详细更改描述 | | [SECURITY.md](SECURITY.md) | 安全策略、漏洞报告、威胁模型、实施的控制和安全部署指南 | | [CONTRIBUTING.md](CONTRIBUTING.md) | 开发环境设置、测试指南、编码标准和 PR 流程 | | [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) | Contributor Covenant 行为准则及安全工具的负责任使用政策 | | [LICENSE](LICENSE) | MIT 许可证及免责声明和依赖项声明 |(返回顶部)
## 版本历史 | 版本 | 日期 | 更改 | |---------|------|---------| | **2.3.0** | 2026-03-20 | `--capture` 扩展到所有操作模式。`--proto` 添加到 tunnel 模式(TLS 感知验证)。 | | **2.2.0** | 2026-03-20 | 协议感知停止:停止 TCP 不再终止共享端口上的 UDP。`--proto` 添加到 redirect 模式。完整文档恢复。 | | **2.1.0** | 2026-03-20 | 修复了终端阻塞问题(PID 文件移交)。修复了错误的 PID 跟踪。在所有模式中添加了 `--dual-stack`。 | | **2.0.0** | 2026-03-20 | Session ID 系统(8 字符十六进制)。通过 `setsid` 进行 PGID 跟踪。具有端口验证的综合停止序列。 | | **1.0.0** | 2026-03-20 | 初始版本。六种操作模式。PID 文件跟踪。基本停止/状态功能。 | 有关每次更改的完整详细信息,请参阅 [CHANGELOG.md](CHANGELOG.md)。(返回顶部)
## 致谢 - **[socat](http://www.dest-unreach.org/socat/)** 作者 Gerhard Rieger — 本管理器封装的强大中继工具 - **[OpenSSL](https://www.openssl.org/)** — 用于 tunnel 模式证书生成的 TLS/SSL 实现 - **[Contributor Covenant](https://www.contributor-covenant.org/)** — 行为准则框架 - **[Keep a Changelog](https://keepachangelog.com/)** — 更新日志格式标准 - **[Semantic Versioning](https://semver.org/)** — 版本控制方案 - **[Shields.io](https://shields.io/)** — 徽章生成服务 - **OWASP** 和 **NIST** — 全文中引用的安全标准(OWASP Logging Cheat Sheet, NIST SP 800-92, CWE-20, CWE-22, CWE-78)(返回顶部)
## 许可证 在 MIT 许可证下分发。完整条款请见 [LICENSE](LICENSE)。 ``` MIT License · Copyright (c) 2026 Socat Network Operations Manager Contributors ``` 本软件仅用于授权的网络操作、安全测试、研究和教育目的。用户需自行确保其使用符合所有适用的法律法规,并承担全部责任。(返回顶部)
## 支持⭐ 如果这个项目对您的操作有帮助,请考虑给它一颗星! ⭐
(返回顶部)
标签:Bash, C2基础设施, MacOS取证, socat, TCP/IP, TLS隧道, UDP, Watchdog, 会话管理, 协议感知, 反弹Shell管理, 安全测试, 安全测试工具, 应用安全, 攻击性安全, 数据展示, 流量代理, 流量捕获, 流量控制, 流量重定向, 监听器, 端口转发, 红队, 网络安全, 网络拓扑, 网络转发, 自动化运维, 运维工具, 隐私保护, 隧道工具