#modem #password-generator #arris #potd #commscope #docsis

rspotd

为调制解调器生成ARRIS/CommScope每日密码

2个不稳定版本

0.5.0 2024年5月5日
0.4.0 2024年4月24日
0.3.0 2024年4月24日
0.2.3 2024年4月22日
0.1.7 2021年12月31日

#239 in 认证

Download history 47/week @ 2024-04-27 121/week @ 2024-05-04 3/week @ 2024-05-11 5/week @ 2024-05-18 12/week @ 2024-05-25 5/week @ 2024-06-01 2/week @ 2024-06-29 38/week @ 2024-07-06 87/week @ 2024-07-27

87 每月下载次数
用于 rspotd-cli

MIT/Apache

19KB
308

RsPOTD

Rust库,用于生成与ARRIS兼容的每日密码。灵感来自 arrispwgen

原始作者在分析调制解调器后基本上逆向工程了算法。非常感谢 @borfast 做的这项了不起的工作。基于我的需求和特定的种子,我遇到了一些特定的问题,希望这个项目可以纠正这些问题。

首先,上游项目似乎将您锁定在8-10个字符的种子之间。实际上,生成这些密码的原始ARRIS工具仅允许4-8个字符的种子。 (考虑到默认的ARRIS种子长度为10个字符,我觉得这很奇怪)

其次,如果您提供一个少于10个字符的种子,上游项目将显示相同数量的字符的密码。所以一个8个字符的种子将产生密码的 正确 的前8个字符,但不会提供 完整的 密码。

第三,如果您提供一个少于8个字符的种子,上游项目似乎不会输出任何内容。ARRIS处理种子的方式是迭代种子,将每个字符追加到提供的种子末尾。例如,“ABCD”是一个 有效种子,但实际上它将变成“ABCDABCDAB”。

第四,尽管我非常愿意向上游项目贡献修复而不是创建分支/端口,但上游项目是用TypeScript编写的,并通过NPM打包。我没有这两种技术的经验,因此端口变得更有可行性。

用法

单个日期

generate() 函数接受两个关键字参数。

  • date: 接受ISO格式的单个日期(例如,2021-07-23)
  • seed: 接受4到8个字符的种子

使用ARRIS默认种子

use rspotd::{generate, vals::DEFAULT_SEED};

generate("2021-07-23", DEFAULT_SEED).unwrap();

输出:O9W2Q1O16V

使用自定义种子

use rspotd::generate;

generate("2021-07-23", "ABCDABCD").unwrap();

输出:F32CAZCJLU

日期范围

generate_multiple() 函数接受开始和结束日期,以及可选的种子。

使用默认种子

use rspotd::{generate_multiple, vals::DEFAULT_SEED};

generate_multiple("2021-07-23", "2022-07-28", DEFAULT_SEED).unwrap();

输出(截断)

{
    '07/23/21': 'O9W2Q1O16V',
    '07/24/21': '2SEIWWLZL1',
    '07/25/21': 'ZOU3MWRZN0',
    ...
}

使用自定义种子

use rspotd::generate_multiple;

generate_multiple("2021-07-23", "2022-07-28", "ABCDABCD").unwrap();

输出(截断)

{
    '07/23/21': 'F32CAZCJLU',
    '07/24/21': '95L0GFUNCC',
    '07/25/21': 'CSBLM119CH',
    ...
}

创建种子的DES表示

创建与提供的种子对应的DES加密值的所需点分隔的十六进制字符串。

该函数提供的值可以添加到调制解调器配置文件中,具有此配置的调制解调器将随后对由创建DES加密值相同种子生成的“每日密码”做出响应。

注意:您无法从用户端配置调制解调器。您的调制解调器通常通过TFTP从您ISP基础设施内的服务器下载其配置。

如果使用默认种子,将提供默认的ARRIS/CommScope值。我还没有弄清楚他们如何使用超过8个字节的块大小生成种子DES加密值,所以我必须硬编码该值。

在官方工具中,如果您选择“使用默认种子”复选框,则不提供DES值,据我所知,该软件始终明确了解您的种子在4到8个字符之间。

对于任何给定种子的密码数量,将只存在这样一个值;调制解调器从该值推断种子。

use rspotd::seed_to_des;

seed_to_des("ASDF").unwrap();

输出

"3F.94.E2.AA.46.63.AA.78"

依赖关系

~4–5.5MB
~94K SLoC