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
[](https://pypi.org/project/sangfor-af-api/)
[](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, 逆向工具