Struct std::net::Ipv6Addr 1.0.0[−][src]
pub struct Ipv6Addr { /* fields omitted */ }
Expand description
IPv6 地址。
IPv6 IETF RFC 4291 中将地址定义为 128 位整数。 它们通常表示为八个 16 位段。
有关同时包含 IPv4 和 IPv6 地址的类型,请参见 IpAddr
。
Ipv6Addr
结构体的大小可能会因目标操作系统而异。
文字表达
Ipv6Addr
提供了 FromStr
的实现。
有多种方法可以用文本表示 IPv6 地址,但通常,每个段都以十六进制表示法,并且段之间用 :
分隔。
有关更多信息,请参见 IETF RFC 5952。
Examples
use std::net::Ipv6Addr; let localhost = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1); assert_eq!("::1".parse(), Ok(localhost)); assert_eq!(localhost.is_loopback(), true);Run
Implementations
为特殊的 ‘unspecified’ 地址 (::
) 返回 true
。
此属性在 IETF RFC 4291 中定义。
Examples
use std::net::Ipv6Addr; assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_unspecified(), false); assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0).is_unspecified(), true);Run
如果这是一个回环地址 (::1),则返回 true
。
此属性在 IETF RFC 4291 中定义。
Examples
use std::net::Ipv6Addr; assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_loopback(), false); assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0x1).is_loopback(), true);Run
如果该地址似乎是可全局路由的,则返回 true
。
以下返回 false
:
- 回环地址
- 本地链接和唯一本地单播地址
- 接口,链接,领域,管理和站点本地多播地址
Examples
#![feature(ip)] use std::net::Ipv6Addr; assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_global(), true); assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0x1).is_global(), false); assert_eq!(Ipv6Addr::new(0, 0, 0x1c9, 0, 0, 0xafc8, 0, 0x1).is_global(), true);Run
如果这是唯一的本地地址 (fc00::/7
),则返回 true
。
此属性在 IETF RFC 4193 中定义。
Examples
#![feature(ip)] use std::net::Ipv6Addr; assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_unique_local(), false); assert_eq!(Ipv6Addr::new(0xfc02, 0, 0, 0, 0, 0, 0, 0).is_unique_local(), true);Run
如果这是 IETF RFC 4291 定义的单播地址,则返回 true
。
任何不是 multicast address (ff00::/8
) 的地址都是单播的。
Examples
#![feature(ip)] use std::net::Ipv6Addr; // 未指定地址和回环地址是单播的。 assert_eq!(Ipv6Addr::UNSPECIFIED.is_unicast(), true); assert_eq!(Ipv6Addr::LOCALHOST.is_unicast(), true); // 任何不是多播地址 (`ff00::/8`) 的地址都是单播的。 assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_unicast(), true); assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).is_unicast(), false);Run
如果地址是具有链接本地作用域的单播地址,则返回 true
,如 RFC 4291 中所定义。
如果单播地址具有前缀 fe80::/10
,则它具有链路本地作用域,如 RFC 4291 section 2.4。
请注意,这包含比 RFC 4291 section 2.5.6 中定义的地址更多的地址,RFC 4291 section 2.5.6 将 “Link-Local IPv6 Unicast Addresses” 描述为具有以下更严格的格式:
| 10 bits | 54 bits | 64 bits |
+----------+-------------------------+----------------------------+
|1111111010| 0 | interface ID |
+----------+-------------------------+----------------------------+
因此,虽然目前应用程序将遇到的唯一具有本地链接作用域的地址都在 fe80::/64
中,但随着新标准的发布,这可能会在 future 中发生变化。
fe80::/10
中可以分配更多的地址,这些地址将具有本地链接作用域。
另请注意,虽然 RFC 4291 section 2.5.3 提到 “它被视为具有 Link-Local 作用域” 的 loopback address (::1
),但这并不意味着回环地址实际上具有链接本地作用域,并且此方法将在其上返回 false
。
Examples
#![feature(ip)] use std::net::Ipv6Addr; // 回环地址 (`::1`) 实际上并没有链接本地作用域。 assert_eq!(Ipv6Addr::LOCALHOST.is_unicast_link_local(), false); // 只有 `fe80::/10` 中的地址具有本地链接作用域。 assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_unicast_link_local(), false); assert_eq!(Ipv6Addr::new(0xfe80, 0, 0, 0, 0, 0, 0, 0).is_unicast_link_local(), true); // 更严格的 `fe80::/64` 之外的地址也具有链接本地作用域。 assert_eq!(Ipv6Addr::new(0xfe80, 0, 0, 1, 0, 0, 0, 0).is_unicast_link_local(), true); assert_eq!(Ipv6Addr::new(0xfe81, 0, 0, 0, 0, 0, 0, 0).is_unicast_link_local(), true);Run
如果这是为文档 (2001:db8::/32
) 保留的地址,则返回 true
。
此属性在 IETF RFC 3849 中定义。
Examples
#![feature(ip)] use std::net::Ipv6Addr; assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_documentation(), false); assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_documentation(), true);Run
如果该地址是全局可路由的单播地址,则返回 true
。
以下返回 false:
- 回环地址
- 链接本地地址
- 唯一的本地地址
- 未指定地址
- 保留用于文档的地址范围
此方法根据 RFC 4291 section 2.5.7 返回 true
作为站点本地地址
The special behavior of [the site-local unicast] prefix defined in [RFC3513] must no longer
be supported in new implementations (i.e., new implementations must treat this prefix as
Global Unicast).
Examples
#![feature(ip)] use std::net::Ipv6Addr; assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_unicast_global(), false); assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_unicast_global(), true);Run
如果这是多播地址 (ff00::/8
),则返回 true
。
此属性由 IETF RFC 4291 定义。
Examples
use std::net::Ipv6Addr; assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).is_multicast(), true); assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_multicast(), false);Run
如果它是 IETF RFC 4291 section 2.5.5.2 中定义的 “IPv4-mapped IPv6 address”,则将该地址转换为 IPv4
address,否则返回 None
。
::ffff:a.b.c.d
变为 a.b.c.d
。
所有非以 ::ffff
开头的地址都将返回 None
。
Examples
#![feature(ip)] use std::net::{Ipv4Addr, Ipv6Addr}; assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).to_ipv4_mapped(), None); assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).to_ipv4_mapped(), Some(Ipv4Addr::new(192, 10, 2, 255))); assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1).to_ipv4_mapped(), None);Run
将此地址转换为 IPv4
address。
如果此地址既不是 IPv4 兼容的也不是 IPv4 映射的,则返回 None
。
::a.b.c.d
::ffff:a.b.c.d
变成 a.b.c.d
Examples
use std::net::{Ipv4Addr, Ipv6Addr}; assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).to_ipv4(), None); assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).to_ipv4(), Some(Ipv4Addr::new(192, 10, 2, 255))); assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1).to_ipv4(), Some(Ipv4Addr::new(0, 0, 0, 1)));Run
Trait Implementations
编写一个符合 RFC 5952 描述的规范样式的 Ivv6Addr。
type Err = AddrParseError
type Err = AddrParseError
可以从解析中返回的相关错误。