NAXG/sangfor-af-api

GitHub: NAXG/sangfor-af-api

面向深信服 AF 8.0.107 防火墙的非官方 Python SDK,基于官方 API 文档自动生成,覆盖 1,235 个接口,方便开发者通过编程方式管理防火墙配置。

Stars: 0 | Forks: 0

# sangfor-af-api [![PyPI](https://img.shields.io/pypi/v/sangfor-af-api.svg)](https://pypi.org/project/sangfor-af-api/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) 面向深信服 AF 8.0.107 REST API 的**非官方** Python SDK,由官方 API 文档自动抽取并生成, 覆盖 1,235 个 operation,导入名 `sangfor_sdk`。 ## 免责声明 - 本项目为社区驱动的非官方 SDK,**与深信服科技有限公司及其关联公司不存在任何隶属、赞助、支持或背书关系**。 - 接口目录(`api_catalog.json`)及生成代码中的接口路径、参数说明均从深信服官方文档提取,仅用于实现互操作性。原始文档、API Schema、产品名称的著作权与商标权归相关权利人所有。 - "Sangfor"、"深信服" 为深信服科技有限公司的注册商标,本项目中的使用仅为描述与识别产品。 - 本项目按 MIT 许可证分发,使用风险由使用者自行承担。 ## 安装 python3 -m pip install sangfor-af-api ## 快速开始 from sangfor_sdk import AFAPI, SangforClient client = SangforClient( "https://192.168.1.1", namespace="public", username="admin", password="your-password", token_cache=True, verify="/path/to/internal-ca.pem", ) api = AFAPI(client) # 6.2.1.2 获取安全防护策略 security_policies = api.policies.get_6_2_1_2( query={"_start": 0, "_length": 200} ) # 8.2.1 获取黑名单 blacklist = api.operations_center.get_8_2_1( query={"type": "BLACK", "_start": 0, "_length": 200} ) SDK 默认拒绝明文 HTTP。设备使用自签名证书时,优先传入内部 CA 文件;只有在隔离测试环境中才使用 `verify=False`。 ## 特性 - **文档驱动生成**:每个 `API请求数据` 主定义对应一个显式 Python 方法 - **完整 Catalog**:内置 `api_catalog.json`,可按章节/标题搜索接口 - **自动认证**:支持 Cookie/Header 双模式 Token、自动重新登录、Token 本地缓存 - **分页支持**:`client.paginate()` / `client.iter_pages()` 自动翻页 - **安全默认**:拒绝 HTTP 重定向、认证请求不脱靶、异常信息自动脱敏 ## 方法命名 方法名由 HTTP 方法和 PDF 章节号组成,与官方文档一一对应: get_6_2_1_2 -> 6.2.1.2 获取安全防护策略 get_6_3_1_1_1 -> 6.3.1.1.1 获取应用控制策略列表 get_8_2_1 -> 8.2.1 全量获取符合过滤条件的黑白 IP post_8_2_4 -> 8.2.4 批量添加黑白名单 ## 参数传递 所有生成方法统一接收: - `path_params`:替换路径变量,如 `{"name": "策略名"}` - `query`:URL 查询参数 - `body`:JSON 请求体 - `headers`:额外请求头 - 其余关键字参数透传给 `requests` # 6.1.1.4 获取单条 NAT 策略 nat = api.policies.get_6_1_1_4(path_params={"name": "NAT策略名称"}) # 8.2.3 添加黑名单 created = api.operations_center.post_8_2_3(body={ "type": "BLACK", "url": "203.0.113.10", "enable": True, "description": "SDK example", }) 也可以直接通过 operation ID 调用: result = api.call("get_8_2_2", path_params={"url": "example.com"}) ## Catalog 搜索 from sangfor_sdk import OperationCatalog catalog = OperationCatalog.load_default() for op in catalog.find("黑白名单", section_prefix="8.2"): print(op.operation_id, op.method, op.path) ## 分页 operation = api.operation("get_8_2_1") for item in client.paginate(operation, query={"type": "BLACK"}, page_size=200): print(item) ## 示例 搜索内置 Catalog(不连接设备): python3 examples/search_catalog.py 只读盘点(登录设备并查询策略统计,不会修改配置): export SANGFOR_AF_HOST='https://192.168.1.1' export SANGFOR_AF_USERNAME='admin' export SANGFOR_AF_PASSWORD='password' export SANGFOR_AF_CA_BUNDLE='/path/to/internal-ca.pem' python3 examples/read_only_inventory.py ## 从 PDF 重新生成 python3 tools/generate_api_catalog.py --pdf '/path/to/AF8.0.107-API中文文档.pdf' 详见 [`tools/README.md`](tools/README.md)。 ## 测试 PYTHONPATH=src python3 -m unittest discover -s tests -v 测试只验证 Catalog 与生成方法的一致性,不会连接真实防火墙。 ## 版本说明 SDK 以 AF 8.0.107 文档为源。较旧设备可能不具备新增接口或字段,应依据实际设备版本、许可证和管理员权限处理返回码。
标签:Docker 部署, Python, 无后门, 深信服AF, 网络安全设备, 网络运维, 自动化API, 逆向工具