Your Name
11d830b496
fix(snmp): 修复 SNMP 采集 ARP 表时只补 MAC 不补厂商的问题
...
问题原因:
- snmp_service.py get_arp_table 第267行条件为
if ip_addr and not ip_addr.mac_address:
- 只给原本没有 MAC 的 IP 设置 MAC + 厂商
- 如果 IP 已有 MAC(来自 Ping/ARP 扫描)但没有 vendor,
则永远不会补全厂商
解决方案:
- 拆分为两个 if:
1. if not ip_addr.mac_address: 写入 MAC
2. if not ip_addr.vendor and ip_addr.mac_address: 补全厂商
- 确保已有 MAC 但无厂商的 IP 也能被补全
- 已有 backfill_vendor.py 脚本可批量回填历史数据
2026-07-23 15:39:59 +08:00
Your Name
094d2cc112
fix(snmp): 修复异步函数同步调用导致'coroutine object is not an iterator'错误
...
问题原因:
- pysnmp.hlapi.asyncio 的 getCmd/bulkCmd/nextCmd 都是 async def 协程函数
- 返回的是 coroutine 对象,需要用 await 获取结果
- 原代码用 next() 或 for...in 同步迭代协程对象,报错:
'coroutine' object is not an iterator
解决方案:
1. snmp_service.py: 所有 SNMP 操作改为 async def
- test_connection(): getCmd 改为 await getCmd()
- get_arp_table(): bulkCmd 改为 await bulkCmd()
- get_mac_address_table(): bulkCmd 改为 await bulkCmd()
- get_interfaces(): bulkCmd 改为 await bulkCmd()
- poll_device(): 所有子调用加 await
2. api/v1/snmp.py: API 路由改为 async def + await
bulkCmd await 后返回 (errorIndication, errorStatus, errorIndex, varBindTable)
其中 varBindTable 是列表的列表(table 形式),需双层循环解析
2026-07-23 15:01:18 +08:00
Your Name
a8e764b102
feat(python3.10): 适配 Python 3.10 并修复 SNMP 问题
...
修改内容:
1. 修复 SNMP 凭据显示问题:确保设备列表返回 snmp_credential_id
2. 修复清除 SNMP 凭据功能:新增 clear_snmp_credential 参数
3. 前端适配:处理清除凭据时的参数转换
4. 更新 requirements.txt:添加 Python 3.10 兼容说明和 typing-extensions
5. 添加 PYTHON_3_10_COMPATIBILITY.md 兼容性说明文档
验证:
- 所有代码无 Python 3.11 特有语法
- 依赖包版本均支持 Python 3.10
- typing-extensions 提供向后兼容支持
2026-07-23 13:58:52 +08:00
Your Name
bd68abee93
fix(snmp): ARP表缺少发现时间字段,在get_arp_table返回值中添加last_seen和discovered_at
2026-07-18 09:50:20 +08:00
Your Name
1e1e5957e8
fix(ipam): 修复IP管理页面网段筛选不生效及下拉框过窄
...
- Ips.vue: el-select 添加 width: 280px,修复网段下拉框过窄
- Ips.vue: query 参数 networkId → network_id(与 FastAPI snake_case 一致)
- Scan.vue: el-select 用 network.id 代替整个 network 对象作为 value,修复切换网段不生效
- enhanced_scan_service.py: 替换失效的 scapy ARP 扫描为 arp-scan 命令;扫描结果自动创建缺失 IP 记录
2026-07-18 09:45:30 +08:00