jdcat


Namejdcat JSON
Version 1.0.20 PyPI version JSON
download
home_pageNone
Summary修复越权测试判断逻辑
upload_time2025-10-24 07:08:29
maintainerNone
docs_urlNone
authorSensitive Check Team
requires_python<3.15,>=3.10
licenseMIT
keywords security proxy sensitive-data testing mitmproxy
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # JDCat

JDCat 是一个 Python 包装工具,提供命令行入口来启动本地安全测试助手服务。该服务是 sensitive-check-local 项目的 FastAPI 服务封装,用于安全测试中的代理和数据捕获。

## 项目说明

- **功能**:包装并启动本地助手 FastAPI 服务,提供安全测试所需的代理功能
- **技术栈**:Python 3.10-3.14, FastAPI, uvicorn, mitmproxy
- **默认端口**:17866
- **业务逻辑**:完全来自 sensitive-check-local 项目,本包仅提供 CLI 入口

## 本地调试

### 开发环境安装
```bash
# 克隆项目并进入 jdcat 目录
cd jdcat

# 安装开发依赖(可编辑模式)
uv pip install -e .
```

### 本地开发调试
```bash
# 使用本地代码运行(推荐开发方式,默认会自动打开浏览器)
uv run python -m jdcat start

# 或者直接运行模块
python -m jdcat start

# 启动但不自动打开浏览器
uv run python -m jdcat start --no-open-browser

# 停止服务
uv run python -m jdcat stop
```

### 构建测试
```bash
# 构建包
uv pip install -U build
python -m build

# 验证构建结果
ls -la dist/
```

## 分发服务

### 一键构建和发布
```bash
# 在 jdcat 目录下执行构建脚本
./build_and_publish.sh
```

该脚本会自动完成:
- 清理之前的构建文件
- 安装构建工具(build、twine)
- 构建分发包(wheel 和 tar.gz)
- 检查包完整性
- 可选择上传到 PyPI 或 Test PyPI

## 分发后使用

### 安装方式

**使用 pip(推荐)**

```bash
# 安装最新版本
pip install jdcat

# 升级到最新版本
pip install --upgrade jdcat

# 安装指定版本
pip install jdcat==1.0.4
```

**使用 pipx(隔离安装)**

```bash
# 安装 pipx
python -m pip install --user pipx
python -m pipx ensurepath

# 安装 jdcat 最新版本
pipx install jdcat

# 升级 jdcat 到最新版本
pipx upgrade jdcat

# 强制重新安装最新版本
pipx uninstall jdcat && pipx install jdcat
```

**使用 uv(快速安装)**

```bash
# 直接运行最新版本(无需安装)
uv run --from jdcat jdcat start

# 安装到全局
uv tool install jdcat

# 升级到最新版本
uv tool upgrade jdcat
```

### 基本使用

```bash
# 启动服务(默认会自动打开浏览器到 http://aq.jdtest.net:8007/)
jdcat start

# 启动服务但不自动打开浏览器
jdcat start --no-open-browser

# 启动服务并指定自定义浏览器URL
jdcat start --browser-url "http://localhost:8007/"

# 指定端口启动服务
jdcat start --port 18000

# 停止服务
jdcat stop

# 查看帮助
jdcat --help

# 检查版本
jdcat --version
```

### 常见问题

**externally-managed-environment 错误**
- 原因:现代 Python 环境管理安全特性(PEP 668)
- 解决:使用 uv 或 pipx 安装,避免直接在系统 Python 中安装
```bash
# 推荐使用 uv
uv run --from jdcat jdcat start --port 17866

# 或使用 pipx
pipx install jdcat
```

**mitmdump 不存在**
- 原因:jdcat 依赖 mitmproxy 提供的 mitmdump 工具
- 解决方案:
  1. **检查版本**:确保使用最新版本的 jdcat
     ```bash
     # 检查当前版本
     jdcat --version
     
     # 升级到最新版本(当前:1.0.3)
     pip install --upgrade jdcat
     
     # 或使用 pipx
     pipx upgrade jdcat
     ```
  2. **重新安装**:完全重新安装 jdcat 和依赖
     ```bash
     # 使用 pip
     pip uninstall jdcat mitmproxy
     pip install jdcat
     
     # 使用 pipx
     pipx uninstall jdcat
     pipx install jdcat
     ```
  3. **手动安装 mitmproxy**:
     ```bash
     # macOS
     brew install mitmproxy
     
     # 使用 pip
     pip install mitmproxy
     
     # 验证安装
     mitmdump --version
     ```
  4. **使用 uv(推荐)**:
     ```bash
     # 直接运行,自动处理依赖
     uv run --from jdcat jdcat start
     ```

**端口占用**
- 解决:指定其他端口
```bash
jdcat start --port 18000
```

## 开源信息

- 作者:Sensitive Check Team
- 许可:详见 LICENSE 文件
- Python 版本:3.10 - 3.14

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "jdcat",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<3.15,>=3.10",
    "maintainer_email": null,
    "keywords": "security, proxy, sensitive-data, testing, mitmproxy",
    "author": "Sensitive Check Team",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/16/ef/05d334286bde04e0b410366968d80033819b3af5ce1753b795032ec88c7b/jdcat-1.0.20.tar.gz",
    "platform": null,
    "description": "# JDCat\n\nJDCat \u662f\u4e00\u4e2a Python \u5305\u88c5\u5de5\u5177\uff0c\u63d0\u4f9b\u547d\u4ee4\u884c\u5165\u53e3\u6765\u542f\u52a8\u672c\u5730\u5b89\u5168\u6d4b\u8bd5\u52a9\u624b\u670d\u52a1\u3002\u8be5\u670d\u52a1\u662f sensitive-check-local \u9879\u76ee\u7684 FastAPI \u670d\u52a1\u5c01\u88c5\uff0c\u7528\u4e8e\u5b89\u5168\u6d4b\u8bd5\u4e2d\u7684\u4ee3\u7406\u548c\u6570\u636e\u6355\u83b7\u3002\n\n## \u9879\u76ee\u8bf4\u660e\n\n- **\u529f\u80fd**\uff1a\u5305\u88c5\u5e76\u542f\u52a8\u672c\u5730\u52a9\u624b FastAPI \u670d\u52a1\uff0c\u63d0\u4f9b\u5b89\u5168\u6d4b\u8bd5\u6240\u9700\u7684\u4ee3\u7406\u529f\u80fd\n- **\u6280\u672f\u6808**\uff1aPython 3.10-3.14, FastAPI, uvicorn, mitmproxy\n- **\u9ed8\u8ba4\u7aef\u53e3**\uff1a17866\n- **\u4e1a\u52a1\u903b\u8f91**\uff1a\u5b8c\u5168\u6765\u81ea sensitive-check-local \u9879\u76ee\uff0c\u672c\u5305\u4ec5\u63d0\u4f9b CLI \u5165\u53e3\n\n## \u672c\u5730\u8c03\u8bd5\n\n### \u5f00\u53d1\u73af\u5883\u5b89\u88c5\n```bash\n# \u514b\u9686\u9879\u76ee\u5e76\u8fdb\u5165 jdcat \u76ee\u5f55\ncd jdcat\n\n# \u5b89\u88c5\u5f00\u53d1\u4f9d\u8d56\uff08\u53ef\u7f16\u8f91\u6a21\u5f0f\uff09\nuv pip install -e .\n```\n\n### \u672c\u5730\u5f00\u53d1\u8c03\u8bd5\n```bash\n# \u4f7f\u7528\u672c\u5730\u4ee3\u7801\u8fd0\u884c\uff08\u63a8\u8350\u5f00\u53d1\u65b9\u5f0f\uff0c\u9ed8\u8ba4\u4f1a\u81ea\u52a8\u6253\u5f00\u6d4f\u89c8\u5668\uff09\nuv run python -m jdcat start\n\n# \u6216\u8005\u76f4\u63a5\u8fd0\u884c\u6a21\u5757\npython -m jdcat start\n\n# \u542f\u52a8\u4f46\u4e0d\u81ea\u52a8\u6253\u5f00\u6d4f\u89c8\u5668\nuv run python -m jdcat start --no-open-browser\n\n# \u505c\u6b62\u670d\u52a1\nuv run python -m jdcat stop\n```\n\n### \u6784\u5efa\u6d4b\u8bd5\n```bash\n# \u6784\u5efa\u5305\nuv pip install -U build\npython -m build\n\n# \u9a8c\u8bc1\u6784\u5efa\u7ed3\u679c\nls -la dist/\n```\n\n## \u5206\u53d1\u670d\u52a1\n\n### \u4e00\u952e\u6784\u5efa\u548c\u53d1\u5e03\n```bash\n# \u5728 jdcat \u76ee\u5f55\u4e0b\u6267\u884c\u6784\u5efa\u811a\u672c\n./build_and_publish.sh\n```\n\n\u8be5\u811a\u672c\u4f1a\u81ea\u52a8\u5b8c\u6210\uff1a\n- \u6e05\u7406\u4e4b\u524d\u7684\u6784\u5efa\u6587\u4ef6\n- \u5b89\u88c5\u6784\u5efa\u5de5\u5177\uff08build\u3001twine\uff09\n- \u6784\u5efa\u5206\u53d1\u5305\uff08wheel \u548c tar.gz\uff09\n- \u68c0\u67e5\u5305\u5b8c\u6574\u6027\n- \u53ef\u9009\u62e9\u4e0a\u4f20\u5230 PyPI \u6216 Test PyPI\n\n## \u5206\u53d1\u540e\u4f7f\u7528\n\n### \u5b89\u88c5\u65b9\u5f0f\n\n**\u4f7f\u7528 pip\uff08\u63a8\u8350\uff09**\n\n```bash\n# \u5b89\u88c5\u6700\u65b0\u7248\u672c\npip install jdcat\n\n# \u5347\u7ea7\u5230\u6700\u65b0\u7248\u672c\npip install --upgrade jdcat\n\n# \u5b89\u88c5\u6307\u5b9a\u7248\u672c\npip install jdcat==1.0.4\n```\n\n**\u4f7f\u7528 pipx\uff08\u9694\u79bb\u5b89\u88c5\uff09**\n\n```bash\n# \u5b89\u88c5 pipx\npython -m pip install --user pipx\npython -m pipx ensurepath\n\n# \u5b89\u88c5 jdcat \u6700\u65b0\u7248\u672c\npipx install jdcat\n\n# \u5347\u7ea7 jdcat \u5230\u6700\u65b0\u7248\u672c\npipx upgrade jdcat\n\n# \u5f3a\u5236\u91cd\u65b0\u5b89\u88c5\u6700\u65b0\u7248\u672c\npipx uninstall jdcat && pipx install jdcat\n```\n\n**\u4f7f\u7528 uv\uff08\u5feb\u901f\u5b89\u88c5\uff09**\n\n```bash\n# \u76f4\u63a5\u8fd0\u884c\u6700\u65b0\u7248\u672c\uff08\u65e0\u9700\u5b89\u88c5\uff09\nuv run --from jdcat jdcat start\n\n# \u5b89\u88c5\u5230\u5168\u5c40\nuv tool install jdcat\n\n# \u5347\u7ea7\u5230\u6700\u65b0\u7248\u672c\nuv tool upgrade jdcat\n```\n\n### \u57fa\u672c\u4f7f\u7528\n\n```bash\n# \u542f\u52a8\u670d\u52a1\uff08\u9ed8\u8ba4\u4f1a\u81ea\u52a8\u6253\u5f00\u6d4f\u89c8\u5668\u5230 http://aq.jdtest.net:8007/\uff09\njdcat start\n\n# \u542f\u52a8\u670d\u52a1\u4f46\u4e0d\u81ea\u52a8\u6253\u5f00\u6d4f\u89c8\u5668\njdcat start --no-open-browser\n\n# \u542f\u52a8\u670d\u52a1\u5e76\u6307\u5b9a\u81ea\u5b9a\u4e49\u6d4f\u89c8\u5668URL\njdcat start --browser-url \"http://localhost:8007/\"\n\n# \u6307\u5b9a\u7aef\u53e3\u542f\u52a8\u670d\u52a1\njdcat start --port 18000\n\n# \u505c\u6b62\u670d\u52a1\njdcat stop\n\n# \u67e5\u770b\u5e2e\u52a9\njdcat --help\n\n# \u68c0\u67e5\u7248\u672c\njdcat --version\n```\n\n### \u5e38\u89c1\u95ee\u9898\n\n**externally-managed-environment \u9519\u8bef**\n- \u539f\u56e0\uff1a\u73b0\u4ee3 Python \u73af\u5883\u7ba1\u7406\u5b89\u5168\u7279\u6027\uff08PEP 668\uff09\n- \u89e3\u51b3\uff1a\u4f7f\u7528 uv \u6216 pipx \u5b89\u88c5\uff0c\u907f\u514d\u76f4\u63a5\u5728\u7cfb\u7edf Python \u4e2d\u5b89\u88c5\n```bash\n# \u63a8\u8350\u4f7f\u7528 uv\nuv run --from jdcat jdcat start --port 17866\n\n# \u6216\u4f7f\u7528 pipx\npipx install jdcat\n```\n\n**mitmdump \u4e0d\u5b58\u5728**\n- \u539f\u56e0\uff1ajdcat \u4f9d\u8d56 mitmproxy \u63d0\u4f9b\u7684 mitmdump \u5de5\u5177\n- \u89e3\u51b3\u65b9\u6848\uff1a\n  1. **\u68c0\u67e5\u7248\u672c**\uff1a\u786e\u4fdd\u4f7f\u7528\u6700\u65b0\u7248\u672c\u7684 jdcat\n     ```bash\n     # \u68c0\u67e5\u5f53\u524d\u7248\u672c\n     jdcat --version\n     \n     # \u5347\u7ea7\u5230\u6700\u65b0\u7248\u672c\uff08\u5f53\u524d\uff1a1.0.3\uff09\n     pip install --upgrade jdcat\n     \n     # \u6216\u4f7f\u7528 pipx\n     pipx upgrade jdcat\n     ```\n  2. **\u91cd\u65b0\u5b89\u88c5**\uff1a\u5b8c\u5168\u91cd\u65b0\u5b89\u88c5 jdcat \u548c\u4f9d\u8d56\n     ```bash\n     # \u4f7f\u7528 pip\n     pip uninstall jdcat mitmproxy\n     pip install jdcat\n     \n     # \u4f7f\u7528 pipx\n     pipx uninstall jdcat\n     pipx install jdcat\n     ```\n  3. **\u624b\u52a8\u5b89\u88c5 mitmproxy**\uff1a\n     ```bash\n     # macOS\n     brew install mitmproxy\n     \n     # \u4f7f\u7528 pip\n     pip install mitmproxy\n     \n     # \u9a8c\u8bc1\u5b89\u88c5\n     mitmdump --version\n     ```\n  4. **\u4f7f\u7528 uv\uff08\u63a8\u8350\uff09**\uff1a\n     ```bash\n     # \u76f4\u63a5\u8fd0\u884c\uff0c\u81ea\u52a8\u5904\u7406\u4f9d\u8d56\n     uv run --from jdcat jdcat start\n     ```\n\n**\u7aef\u53e3\u5360\u7528**\n- \u89e3\u51b3\uff1a\u6307\u5b9a\u5176\u4ed6\u7aef\u53e3\n```bash\njdcat start --port 18000\n```\n\n## \u5f00\u6e90\u4fe1\u606f\n\n- \u4f5c\u8005\uff1aSensitive Check Team\n- \u8bb8\u53ef\uff1a\u8be6\u89c1 LICENSE \u6587\u4ef6\n- Python \u7248\u672c\uff1a3.10 - 3.14\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "\u4fee\u590d\u8d8a\u6743\u6d4b\u8bd5\u5224\u65ad\u903b\u8f91",
    "version": "1.0.20",
    "project_urls": {
        "Homepage": "https://github.com/sensitive-check/jdcat",
        "Issues": "https://github.com/sensitive-check/jdcat/issues",
        "Repository": "https://github.com/sensitive-check/jdcat"
    },
    "split_keywords": [
        "security",
        " proxy",
        " sensitive-data",
        " testing",
        " mitmproxy"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0d83bbeeffb35c103e0ab3ad39ab0399605da23e2292717bf55d38a8b3991866",
                "md5": "66a896c82d9c6891dc047808fe7bc359",
                "sha256": "65e728736ff6642fca14c9ecca1c2303b91a39f578a2a1d0e14960546c018d14"
            },
            "downloads": -1,
            "filename": "jdcat-1.0.20-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "66a896c82d9c6891dc047808fe7bc359",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.15,>=3.10",
            "size": 95566,
            "upload_time": "2025-10-24T07:08:26",
            "upload_time_iso_8601": "2025-10-24T07:08:26.445451Z",
            "url": "https://files.pythonhosted.org/packages/0d/83/bbeeffb35c103e0ab3ad39ab0399605da23e2292717bf55d38a8b3991866/jdcat-1.0.20-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "16ef05d334286bde04e0b410366968d80033819b3af5ce1753b795032ec88c7b",
                "md5": "32a1e5cab2c1be03f7fc70fe0d618006",
                "sha256": "89abbe5a53fa490ae5c785c937f41ad522f0e74c4d95d18c0e6cf7907cff734d"
            },
            "downloads": -1,
            "filename": "jdcat-1.0.20.tar.gz",
            "has_sig": false,
            "md5_digest": "32a1e5cab2c1be03f7fc70fe0d618006",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.15,>=3.10",
            "size": 84158,
            "upload_time": "2025-10-24T07:08:29",
            "upload_time_iso_8601": "2025-10-24T07:08:29.929550Z",
            "url": "https://files.pythonhosted.org/packages/16/ef/05d334286bde04e0b410366968d80033819b3af5ce1753b795032ec88c7b/jdcat-1.0.20.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-24 07:08:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "sensitive-check",
    "github_project": "jdcat",
    "github_not_found": true,
    "lcname": "jdcat"
}
        
Elapsed time: 1.68294s