​ 在日常网络管理工作中,我时常需要网络管理协会同学的协助以应对各类问题。然而,出于严格的安全考量和既定的管理规定,我无法向网管会同学开放 AC(无线接入控制器)的管理权限。但为保证网络运维工作的高效推进,及时将 AC 相关数据反馈给他们又显得尤为必要。为此,我展开了一系列深入探索与研究,最终借助飞书自建应用成功找到了一套行之有效的解决方案。接下来,我将详细阐述这一过程。

问题背景

​ 为达成 AC 数据向网管会同学的反馈目标,我起初运用了抓包 AC 管理控制台 登录后生成的 session token 的技术手段,并自主编写 API 接口以实现与飞书机器人的数据交互。然而在实际运行过程中,我很快察觉到该 session token 存在时效性问题,通常在数日后便会过期失效,进而致使数据获取流程中断,影响了信息反馈的持续性和稳定性。

解决方案

​ 面对 token 过期导致数据获取中断这个棘手问题,我试着去分析 AC 通信协议和交互流程,还参考了开源社区里不少相关工具。说实话,因为我水平有限,过程特别难,我遇到了各种各样的难题,很多时候都觉得没啥头绪。可能是运气好,最后还真让我摸到了 token 生成的一点规律。下面我就以 Python 为例,给大家分享一下我是怎么动态生成 token 来保证数据稳定获取的,要是有不足的地方,还希望大家多担待。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def gen_hmac_info(ac_ip,ac_user):
hmac_info_url = f"https://{ac_ip}/hmac_info.do?user={ac_user}"
try:
hmac_info_response = requests.get(hmac_info_url, verify=False)
hmac_info_response.raise_for_status()
except requests.RequestException as e:
print(e)
continue
hmac_info = json.loads(hmac_info_response.text)
return hmac_info
def gen_ruijie_token(password, hmac_info):
salt = hmac_info["salt"].encode()
iter_count = hmac_info["iter"]
key_len = hmac_info["keylen"]
hash = hashlib.pbkdf2_hmac('sha256', password.encode(), salt, iter_count, key_len)
return hash.hex()

最终成果

​ 由于当前代码中包含部分敏感信息,尚未完成脱敏处理,出于数据安全与合规性考量,现阶段实际应用代码暂无法对外公开。后续,我计划在完成脱敏及相关处理后,将其发布至 GitHub 平台开源,以便与广大技术爱好者及同行进行交流与分享。在此,仅为大家展示该方案在实际应用中的运行情况与效果呈现 。

image-20250407115539803

image-20250407115627867

image-20250407115824959

⬆︎TOP