Struct std::net::Ipv6Addr1.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

从八个 16 位段创建一个新的 IPv6 地址。

结果将代表 IP 地址 a:b:c:d:e:f:g:h

Examples

use std::net::Ipv6Addr;

let addr = Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff);
Run

表示本地主机的 IPv6 地址: ::1.

Examples

use std::net::Ipv6Addr;

let addr = Ipv6Addr::LOCALHOST;
assert_eq!(addr, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
Run

表示未指定地址的 IPv6 地址: ::

Examples

use std::net::Ipv6Addr;

let addr = Ipv6Addr::UNSPECIFIED;
assert_eq!(addr, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0));
Run

返回组成该地址的八个 16 位段。

Examples

use std::net::Ipv6Addr;

assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).segments(),
           [0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff]);
Run

为特殊的 ‘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
🔬 This is a nightly-only experimental API. (ip #27709)

如果该地址似乎是可全局路由的,则返回 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
🔬 This is a nightly-only experimental API. (ip #27709)

如果这是唯一的本地地址 (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
🔬 This is a nightly-only experimental API. (ip #27709)

如果这是 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
🔬 This is a nightly-only experimental API. (ip #27709)

如果地址是具有链接本地作用域的单播地址,则返回 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
🔬 This is a nightly-only experimental API. (ip #27709)

如果这是为文档 (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
🔬 This is a nightly-only experimental API. (ip #27709)

如果该地址是全局可路由的单播地址,则返回 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
🔬 This is a nightly-only experimental API. (ip #27709)

如果该地址是多播的,则返回该地址的多播作用域。

Examples

#![feature(ip)]

use std::net::{Ipv6Addr, Ipv6MulticastScope};

assert_eq!(
    Ipv6Addr::new(0xff0e, 0, 0, 0, 0, 0, 0, 0).multicast_scope(),
    Some(Ipv6MulticastScope::Global)
);
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).multicast_scope(), None);
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
🔬 This is a nightly-only experimental API. (ip #27709)

如果它是 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

返回 IPv6 地址组成的 16 个八位整数。

use std::net::Ipv6Addr;

assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).octets(),
           [255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
Run

Trait Implementations

返回值的副本。 Read more

source 执行复制分配。 Read more

使用给定的格式化程序格式化该值。 Read more

编写一个符合 RFC 5952 描述的规范样式的 Ivv6Addr。

使用给定的格式化程序格式化该值。 Read more

从 8 个元素的 16 位数组创建 Ipv6Addr

Examples

use std::net::Ipv6Addr;

let addr = Ipv6Addr::from([
    525u16, 524u16, 523u16, 522u16,
    521u16, 520u16, 519u16, 518u16,
]);
assert_eq!(
    Ipv6Addr::new(
        0x20d, 0x20c,
        0x20b, 0x20a,
        0x209, 0x208,
        0x207, 0x206
    ),
    addr
);
Run

从 16 个元素的字节数组创建 Ipv6Addr

Examples

use std::net::Ipv6Addr;

let addr = Ipv6Addr::from([
    25u8, 24u8, 23u8, 22u8, 21u8, 20u8, 19u8, 18u8,
    17u8, 16u8, 15u8, 14u8, 13u8, 12u8, 11u8, 10u8,
]);
assert_eq!(
    Ipv6Addr::new(
        0x1918, 0x1716,
        0x1514, 0x1312,
        0x1110, 0x0f0e,
        0x0d0c, 0x0b0a
    ),
    addr
);
Run

将此地址复制到新的 IpAddr::V6

Examples

use std::net::{IpAddr, Ipv6Addr};

let addr = Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff);

assert_eq!(
    IpAddr::V6(addr),
    IpAddr::from(addr)
);
Run

Ipv6Addr 转换为主机字节顺序 u128

Examples

use std::net::Ipv6Addr;

let addr = Ipv6Addr::new(
    0x1020, 0x3040, 0x5060, 0x7080,
    0x90A0, 0xB0C0, 0xD0E0, 0xF00D,
);
assert_eq!(0x102030405060708090A0B0C0D0E0F00D_u128, u128::from(addr));
Run

将主机字节顺序 u128 转换为 Ipv6Addr

Examples

use std::net::Ipv6Addr;

let addr = Ipv6Addr::from(0x102030405060708090A0B0C0D0E0F00D_u128);
assert_eq!(
    Ipv6Addr::new(
        0x1020, 0x3040, 0x5060, 0x7080,
        0x90A0, 0xB0C0, 0xD0E0, 0xF00D,
    ),
    addr);
Run

可以从解析中返回的相关错误。

解析字符串 s 以返回此类型的值。 Read more

将该值输入给定的 HasherRead more

将这种类型的切片送入给定的 Hasher 中。 Read more

此方法返回 selfother 之间的 OrderingRead more

比较并返回两个值中的最大值。 Read more

比较并返回两个值中的最小值。 Read more

将值限制为一定的时间间隔。 Read more

此方法测试 selfother 值是否相等,并由 == 使用。 Read more

此方法测试 !=

此方法测试 selfother 值是否相等,并由 == 使用。 Read more

此方法测试 !=

此方法测试 selfother 值是否相等,并由 == 使用。 Read more

此方法测试 !=

如果存在,则此方法返回 selfother 值之间的顺序。 Read more

此方法测试的内容少于 (对于 selfother),并且由 < 操作员使用。 Read more

此方法测试小于或等于 (对于 selfother),并且由 <= 运算符使用。 Read more

此方法测试大于 (对于 selfother),并且由 > 操作员使用。 Read more

此方法测试是否大于或等于 (对于 selfother),并且由 >= 运算符使用。 Read more

如果存在,则此方法返回 selfother 值之间的顺序。 Read more

此方法测试的内容少于 (对于 selfother),并且由 < 操作员使用。 Read more

此方法测试小于或等于 (对于 selfother),并且由 <= 运算符使用。 Read more

此方法测试大于 (对于 selfother),并且由 > 操作员使用。 Read more

此方法测试是否大于或等于 (对于 selfother),并且由 >= 运算符使用。 Read more

如果存在,则此方法返回 selfother 值之间的顺序。 Read more

此方法测试的内容少于 (对于 selfother),并且由 < 操作员使用。 Read more

此方法测试小于或等于 (对于 selfother),并且由 <= 运算符使用。 Read more

此方法测试大于 (对于 selfother),并且由 > 操作员使用。 Read more

此方法测试是否大于或等于 (对于 selfother),并且由 >= 运算符使用。 Read more

Auto Trait Implementations

Blanket Implementations

获取 selfTypeIdRead more

从拥有的值中一成不变地借用。 Read more

从拥有的值中借用。 Read more

执行转换。

执行转换。

获得所有权后的结果类型。

通常通过克隆从借用数据中创建拥有的数据。 Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into #41263)

recently added

使用借来的数据来替换拥有的数据,通常是通过克隆。 Read more

将给定值转换为 StringRead more

发生转换错误时返回的类型。

执行转换。

发生转换错误时返回的类型。

执行转换。