#访问控制 #唯一标识符 #MAC #网络 #macaddr #mac-48

eui48

一个生成和解析IEEE EUI-48和EUI-64(也称为MAC-48媒体访问控制地址)的库。IEEE对其名称EUI-48和EUI-64拥有商标权,其中EUI是扩展唯一标识符的缩写。

16个版本 (3个稳定版)

1.1.0 2020年8月24日
1.0.1 2020年7月12日
1.0.0 2020年4月25日
0.5.1 2020年7月12日
0.1.0 2016年2月13日

#15 in #mac

Download history 2380/week @ 2024-04-13 3636/week @ 2024-04-20 3215/week @ 2024-04-27 2150/week @ 2024-05-04 3649/week @ 2024-05-11 3170/week @ 2024-05-18 2872/week @ 2024-05-25 3021/week @ 2024-06-01 2701/week @ 2024-06-08 2575/week @ 2024-06-15 2934/week @ 2024-06-22 2508/week @ 2024-06-29 2441/week @ 2024-07-06 3191/week @ 2024-07-13 3347/week @ 2024-07-20 2607/week @ 2024-07-27

11,885 每月下载量
用于 50 个crate (37 直接)

MIT/Apache

36KB
670

Crates.io docs.rs Build Status Build Status Build Status Coverage Status

eui48

A Rust库,用于表示和解析IEEE EUI-48,也称为MAC-48媒体访问控制地址。IEEE对其名称EUI-48和EUI-64拥有商标权,其中EUI是扩展唯一标识符的缩写。

使用方法

将以下内容添加到您的Cargo.toml

[dependencies]

eui48 = "1.0.1"

并将其添加到您的crate根目录

extern crate eui48;

示例

创建一个新的MAC地址并以规范形式打印出来

extern crate eui48;
use eui48::{MacAddress, Eui48};

fn main() {
	let eui: Eui48 = [ 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF ];
	let mac = MacAddress::new( eui );

	println!("{}", mac.to_canonical());
	println!("{}", mac.to_hex_string());
	println!("{}", mac.to_dot_string());
	println!("{}", mac.to_hexadecimal());
	println!("{}", mac.to_interfaceid());
	println!("{}", mac.to_link_local());

	let mac = MacAddress::parse_str( "01-02-03-0A-0b-0f" ).expect("Parse error {}");
	let mac = MacAddress::parse_str( "01:02:03:0A:0b:0f" ).expect("Parse error {}");
	let mac = MacAddress::parse_str( "0102.030A.0b0f" ).expect("Parse error {}");
	let mac = MacAddress::parse_str( "0x1234567890ab" ).expect("Parse error {}");
}

注意

  • 默认显示格式是规范形式 01-02-03-04-05-06,除非启用了编译时功能 disp_hexstring,则默认格式为 01:02:03:04:05:06

版本1.0.0及以上允许更灵活地解析MAC地址字符串,感谢Stan Drozd

  • 允许库的调用者解析不遵循固定长度MAC地址约定的MAC地址(我指的是ebtables!)。一般来说,解析函数会尽力解释给定的字符串。
  • 重写parse_str以使用正则表达式并更加宽容(现在它允许一次性的字符串切割错误,只要我们能够读取6个字节,就可以接受混合分隔符)
  • 将InvalidCharacter错误枚举值更改为InvalidByteCount - InvalidCharacter不再支持。如果需要保留旧行为,请参阅版本 >=0.5.0 和 < 1.0.0。

序列化

当使用 serde 序列化MAC地址时,地址以格式化字符串的形式存储。这对于基于文本的协议(如JSON)来说非常合适,但会在二进制序列化时产生开销。当字符串再次反序列化时,开销会更大,因为需要使用完整的解析器而不是读取原始字节。为了减少这种开销,请在序列化和反序列化MAC地址到二进制协议时使用 serde_bytes 功能。

注意:serde_bytesserde_json 是互斥的!

参考资料

维基百科:MAC地址

作者

  • 0.1 Andrew Baumhauer - 初始设计
  • 0.2 rlcomstock3 - 添加对btree键的支持
  • 0.3 Michal 'vorner' Vaner [email protected] - Serde 1.0支持
  • 0.3.1 Michal 'vorner' Vaner [email protected] - 派生有用的特性
  • 0.4.0 Rainer Stademann - 将ABI定义为repr(C)
  • 0.4.1 Andrew Baumhauer - 添加IPv6接口ID和链路本地转换
  • 0.4.2 Andrew Baumhauer / Eric Clone - 修复is_local()和is_unicast()函数中的错误
  • 0.4.3 Andrew Baumhauer - 更新travis-ci, appveyor, codecov
  • 0.4.4 Andrew Baumhauer - 更新文档
  • 0.4.5 Andrew Baumhauer - 提高代码覆盖率并测试
  • 0.4.6 Jiwoong Lee - 为兼容性添加to_array(),添加feature disp_hexstring
  • 0.4.7 Adam Reichold - WASM更新
  • 0.4.8 @kamek-pf - 尊重disp_hexstring标志
  • 0.4.9 Sebastian Dietze - 添加新const
  • 0.5.0 Andrew Baumhauer - 清理,更新版本,合并PR,更新单元测试
  • 0.5.1 jrb0001 - 修复Link-Scoped Unicast的IPv6到link_local的错误
  • 1.0.0 Stan Drozd, @rlcomstock3, 和 Andrew Baumhauer - 将所有分支和改进合并回此仓库
  • 1.0.1 jrb0001 - 修复Link-Scoped Unicast的IPv6到link_local的错误
  • 1.1.0 Felix Schreiner - 二进制序列化优化

依赖项

~2.3–3.5MB
~64K SLoC