#radius #radius-client #radius-server

radius-rust

纯Rust实现的RADIUS服务器/客户端

6个版本

0.4.3 2024年3月24日
0.4.2 2023年8月5日
0.4.1 2022年8月9日
0.4.0 2021年5月16日
0.2.1 2021年2月17日

#74 in 身份验证

每月29次下载

MIT许可

140KB
2K SLoC

MIT licensed Actions Status Crates.io Docs.rs

Rust RADIUS

纯Rust实现的RADIUS

此项目的理由

  1. 我越来越喜欢Rust,并希望将其用于日常工作中。
  2. 有一些涉及RADIUS的小项目,我可以开始使用Rust
  3. 然而,Rust中没有好的RADIUS实现
  4. ????
  5. 好处 - 现在有一个了,所以我可以在团队内部尝试推动Rust ^_^

安装

[dependencies]
radius-rust = "0.4.3"

OR if you are planning to build Async RADIUS Client/Server

[dependencies]
radius-rust = { version = "0.4.3", features = ["async-radius"] }

测试

  1. 项目有一些测试,需要运行RADIUS服务器,所以
    1. cargo run --example sync_radius_server & OR
    2. cargo run --example async_radius_server --all-features & OR
    3. 您可以启动您选择的任何其他RADIUS服务器
  2. cargo test --verbosecargo test --all-features --verbose

贡献

您想为此项目做出贡献吗?我非常欢迎您的意见!

  1. 如果您认为缺少某些功能,或者某些功能出了问题等,请提出问题
  2. 如果您自己解决了某些问题,请创建PR。请确保将PR提交到开发分支

Rust支持的最小版本(MSVR)

根据Github Action,我了解到

  1. 1.43.0 当您使用 default 功能(同步)时
  2. 1.46.0 当您使用 async-radius 功能(异步和同步)时

2021年9月18日之前,MSVR是

  1. 1.42.0 当使用 default 功能(仅同步)时
  2. 1.43.0 当使用 async-radius 功能(异步 & 同步)时,因此有可能一切都会为你正常工作,只是 GitHub Action 出了一些问题

基准测试

  1. 要运行基准测试,您需要有一个正在运行的 RADIUS 服务器,所以
    1. cargo run --example sync_radius_server & OR
    2. cargo运行 --示例async_radius_server --所有功能 &
  2. 然后运行 cargo +nightly benchcargo +nightly bench --all-features
  3. Mac Mini (2018, RAM: 32 GB 2667 MHz DDR4, CPU: 3.2 GHz Intel Core i7) 上本地运行
  4. 仅作为比较不同 RADIUS 客户端/服务器实现之间的基准,该项目提供(基本上只是为了我自己看看是否值得添加异步等功能)
  5. 结果
1. RADIUS Client       against RADIUS Server
test test_acct_client_w_response_against_server        ... bench:     106,383 ns/iter (+/- 4,014)
test test_acct_client_wo_response_against_server       ... bench:     106,075 ns/iter (+/- 10,151)
test test_auth_client_w_response_against_server        ... bench:     100,156 ns/iter (+/- 5,719)
test test_auth_client_wo_response_against_server       ... bench:     100,470 ns/iter (+/- 4,690)
test test_coa_client_w_response_against_server         ... bench:      79,086 ns/iter (+/- 37,158)
test test_coa_client_wo_response_against_server        ... bench:      78,813 ns/iter (+/- 6,330)
2. Async RADIUS Client against RADIUS Server
test test_async_acct_client_w_response_against_server  ... bench:     120,529 ns/iter (+/- 6,305)
test test_async_acct_client_wo_response_against_server ... bench:     120,881 ns/iter (+/- 5,505)
test test_async_auth_client_w_response_against_server  ... bench:     113,678 ns/iter (+/- 6,219)
test test_async_auth_client_wo_response_against_server ... bench:     113,324 ns/iter (+/- 8,135)
test test_async_coa_client_w_response_against_server   ... bench:      93,113 ns/iter (+/- 12,394)
test test_async_coa_client_wo_response_against_server  ... bench:      92,298 ns/iter (+/- 10,021)
3. RADIUS Client       against Async RADIUS Server
test test_acct_client_w_response_against_server        ... bench:     116,303 ns/iter (+/- 22,485)
test test_acct_client_wo_response_against_server       ... bench:     115,774 ns/iter (+/- 5,040)
test test_auth_client_w_response_against_server        ... bench:     110,263 ns/iter (+/- 4,067)
test test_auth_client_wo_response_against_server       ... bench:     109,771 ns/iter (+/- 3,831)
test test_coa_client_w_response_against_server         ... bench:      87,650 ns/iter (+/- 25,813)
test test_coa_client_wo_response_against_server        ... bench:      84,563 ns/iter (+/- 2,856)
4. Async RADIUS Client against Async RADIUS Server
test test_async_acct_client_w_response_against_server  ... bench:     129,056 ns/iter (+/- 6,221)
test test_async_acct_client_wo_response_against_server ... bench:     127,969 ns/iter (+/- 7,174)
test test_async_auth_client_w_response_against_server  ... bench:     127,812 ns/iter (+/- 37,821)
test test_async_auth_client_wo_response_against_server ... bench:     124,807 ns/iter (+/- 12,565)
test test_async_coa_client_w_response_against_server   ... bench:      96,329 ns/iter (+/- 6,898)
test test_async_coa_client_wo_response_against_server  ... bench:      97,011 ns/iter (+/- 10,322)

注释

  1. 所有工作都在 开发 分支上进行,所以如果您觉得项目已放弃,请检查 开发 分支或提出问题
  2. 主要核心功能已完成,但有可能我遗漏了一些地方,因为它们对我的项目来说还不需要。 如果这是情况,请提出问题或 PR,我将看看如何解决这个问题
  3. 非常感谢 pyradradius-rust-client 项目,它们帮助我开始了这个项目
  4. RadiusAttribute 的 Message-Authenticator 值将不会进行验证,因为在其 RADIUS 字典中它有 字符串 类型,然而它不是一个有效的 ASCII 字符串(Message-Authenticator 是一个 HMAC-MD5 哈希)

依赖项

~0.9–10MB
~113K SLoC