9个不稳定版本
0.4.0 | 2024年1月15日 |
---|---|
0.3.1 | 2022年5月18日 |
0.2.1 | 2021年5月31日 |
0.2.0 | 2021年2月3日 |
0.0.3 | 2020年12月12日 |
#1167 在 网络编程 中
每月489次下载
325KB
5.5K SLoC
radius-rs
为Rust实现的异步/await原生的RADIUS服务器和客户端。同时也可以作为RADIUS库用于解析/构造(即解码/编码)目的。
描述
此RADIUS服务器和客户端实现使用tokio来支持原生的异步操作。此实现满足了RFC2865中描述的基本功能。
使用
这里有一些简单的示例实现
这些示例实现了一个非常简单的Access-Request
处理器。您可以使用以下命令尝试这些示例。
$ RUST_LOG=debug cargo run --example server
$ RUST_LOG=debug cargo run --example client # in another shell
支持的字典
目前支持以下RFC字典
- RFC2865
- RFC2866
- RFC2867
- RFC2868
- RFC2869
- RFC3162
- RFC3576
- RFC3580
- RFC4072
- RFC4372
- RFC4603
- RFC4675
- RFC4818
- RFC4849
- RFC5090
- RFC5176
- RFC5607
- RFC5904
- RFC6519
- RFC6572
- RFC6677
- RFC6911
- RFC7055
- RFC7155
为您的RADIUS应用程序提供的实现指南
常用
Packet
结构体表示请求包和响应包。- 该结构体包含一个AVP列表。
- 您可以通过RFC字典模块获取特定的AVP。
- 例如,
rfc2865::lookup_user_name(packet)
- 此方法如果包包含
User-Name
属性,则返回Some(Result<String, AVPError>)
。 - 另一方面,如果包不包含该属性,则返回
None
。
- 此方法如果包包含
- 例如,
- 您可以使用RFC字典模块来构建数据包。
- 例如:
rfc2865::add_user_name(&mut packet, "user")
- 此方法将一个
User-Name
AVP 添加到数据包中。
- 此方法将一个
- 例如:
- 请参阅rustdoc以了解每个RFC字典模块的详细信息。
服务器
- 必须实现
RequestHandler<T, E>
接口。- 此接口方法是您需要的服务器应用程序的核心功能。
- 请参阅示例实现:[服务器](https://github.com/moznion/radius-rs/blob/afd1abf2f48dac83fedc22427f4eeaf0921502a7/radius/examples/server.rs)
客户端
- 请参阅示例实现:[客户端](https://github.com/moznion/radius-rs/blob/afd1abf2f48dac83fedc22427f4eeaf0921502a7/radius/examples/client.rs)
开发路线图
- 支持以下RFC字典:
- rfc4679
- rfc5447
- rfc5580
- rfc6929
- rfc6930
- rfc7268
- rfc7499
- rfc7930
- rfc8045
- rfc8559
此库的开发指南
如何从字典生成代码
$ make gen
code-generator
子项目负责根据给定的RFC字典文件生成Rust代码。字典文件位于 dicts
目录中。
字典文件的格式遵循FreeRADIUS项目的格式。
注意
此项目的原始实现和设计受到了layeh/radius的启发。
作者
moznion ([email protected])
依赖项
~4–11MB
~109K SLoC