使用FritzConnection修改FritzBox访客WiFi密码遇参数错误求助
看起来你已经把FritzConnection的基础操作摸得很透了——能读设备信息、开关访客WiFi都没问题,唯独修改密码时卡了壳,这个402 Invalid Args错误确实挺让人头疼的。结合FritzBox的UPnP接口特性和你的代码,我整理了几个可能的原因和解决方案:
1. 别瞎传WEP参数,访客WiFi根本用不上
访客WiFi默认都是用WPA2/WPA3-PSK加密的,而你尝试传递的NewWEPKey0到NewWEPKey3都是给老旧WEP加密用的参数。这些空字符串会触发FritzBox的参数校验,直接返回无效参数错误。
先确认下当前的安全模式验证这个猜想:
info = fc.call_action('WLANConfiguration:3', 'GetInfo') print(f"当前安全模式: {info['NewSecurityMode']}")
如果输出是WPA2PSK或WPA3PSK这类,只传NewKeyPassphrase一个参数就行,别带那些WEP相关的空值。
2. 密码得符合FritzBox的“规矩”
FritzBox对访客WiFi密码有严格限制,踩了这些坑也会报参数错误:
- 长度必须在8-63位之间
- 不能包含空格,部分特殊字符(比如德语变音符号
ß)可能会有编码问题,建议先拿纯ASCII密码测试 - 避免连续重复的字符(比如
aaaaaa123这种可能被拒绝)
先试试最简单的合法密码:
fc.call_action('WLANConfiguration:3', 'SetSecurityKeys', NewKeyPassphrase='TestPass123')
3. 修改密码前先把WiFi关掉!
有些FritzBox型号有个“怪脾气”:修改WiFi配置(包括密码)时,必须先禁用对应的WiFi接口。你之前能开关WiFi,那调整下流程试试:
# 先禁用访客WiFi fc.call_action('WLANConfiguration:3', 'SetEnable', arguments={'NewEnable': 0}) # 改密码 fc.call_action('WLANConfiguration:3', 'SetSecurityKeys', NewKeyPassphrase='YourNewValidPassword') # 重新打开WiFi fc.call_action('WLANConfiguration:3', 'SetEnable', arguments={'NewEnable': 1})
4. 统一服务标识格式,别混用
你代码里一会儿用WLANConfiguration:3,一会儿用WLANConfiguration3,虽然FritzConnection能兼容,但为了避免潜在的解析问题,统一用UPnP标准的带冒号格式WLANConfiguration:3。
5. 升级FritzConnection版本试试
你用的是FritzConnection 1.3.4,而FritzOS是7.20,旧版本的库可能和新系统的UPnP接口有兼容性问题。先升级到最新版:
pip install --upgrade fritzconnection
终极验证法:抄设备当前的参数格式
如果上面的方法都没用,你可以先通过Web界面手动改一次密码,然后用GetSecurityKeys读取设备当前的参数,只修改NewKeyPassphrase字段再传回去——这样能完全匹配设备要求的参数格式:
# 读取当前安全密钥参数 security_keys = fc.call_action('WLANConfiguration:3', 'GetSecurityKeys') # 替换成新密码 security_keys['NewKeyPassphrase'] = 'YourValidNewPassword' # 删掉没用的WEP参数(如果存在) for key in ['NewWEPKey0', 'NewWEPKey1', 'NewWEPKey2', 'NewWEPKey3']: security_keys.pop(key, None) # 调用修改接口 fc.call_action('WLANConfiguration:3', 'SetSecurityKeys', arguments=security_keys)
内容的提问来源于stack exchange,提问作者Solderdot

