Struct std::net::Ipv4Addr1.0.0[][src]

pub struct Ipv4Addr { /* fields omitted */ }
Expand description

IPv4 地址。

IPv4 地址在 IETF RFC 791 中定义为 32 位整数。 它们通常表示为四个八位位组。

有关同时包含 IPv4 和 IPv6 地址的类型,请参见 IpAddr

Ipv4Addr 结构体的大小可能会因目标操作系统而异。

文字表达

Ipv4Addr 提供了 FromStr 的实现。 四个八位位组用十进制表示法除以 . (称为 “dot-decimal notation”)。

值得注意的是,每个 IETF RFC 6943 不允许使用八进制数和十六进制数。

Examples

use std::net::Ipv4Addr;

let localhost = Ipv4Addr::new(127, 0, 0, 1);
assert_eq!("127.0.0.1".parse(), Ok(localhost));
assert_eq!(localhost.is_loopback(), true);
Run

Implementations

从四个八位八位字节创建一个新的 IPv4 地址。

结果将代表 IP 地址 a.b.c.d

Examples

use std::net::Ipv4Addr;

let addr = Ipv4Addr::new(127, 0, 0, 1);
Run

一个 IPv4 地址,该地址指向 localhost: 127.0.0.1

Examples

use std::net::Ipv4Addr;

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

代表未指定地址的 IPv4 地址: 0.0.0.0

这对应于其他语言中的常量 INADDR_ANY

Examples

use std::net::Ipv4Addr;

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

表示广播地址的 IPv4 地址: 255.255.255.255

Examples

use std::net::Ipv4Addr;

let addr = Ipv4Addr::BROADCAST;
assert_eq!(addr, Ipv4Addr::new(255, 255, 255, 255));
Run

返回组成该地址的四个八位整数。

Examples

use std::net::Ipv4Addr;

let addr = Ipv4Addr::new(127, 0, 0, 1);
assert_eq!(addr.octets(), [127, 0, 0, 1]);
Run

为特殊的 ‘unspecified’ 地址 (0.0.0.0) 返回 true

此属性在 UNIX Network Programming, Second Edition,W 中定义。理查德・史蒂文斯 (Richard Stevens),第 891; 另请参见 ip7

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(0, 0, 0, 0).is_unspecified(), true);
assert_eq!(Ipv4Addr::new(45, 22, 13, 197).is_unspecified(), false);
Run

如果这是回环地址 (127.0.0.0/8),则返回 true

此属性由 IETF RFC 1122 定义。

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(127, 0, 0, 1).is_loopback(), true);
assert_eq!(Ipv4Addr::new(45, 22, 13, 197).is_loopback(), false);
Run

如果这是一个专用地址,则返回 true

专用地址范围在 IETF RFC 1918 中定义,包括:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(10, 0, 0, 1).is_private(), true);
assert_eq!(Ipv4Addr::new(10, 10, 10, 10).is_private(), true);
assert_eq!(Ipv4Addr::new(172, 16, 10, 10).is_private(), true);
assert_eq!(Ipv4Addr::new(172, 29, 45, 14).is_private(), true);
assert_eq!(Ipv4Addr::new(172, 32, 0, 2).is_private(), false);
assert_eq!(Ipv4Addr::new(192, 168, 0, 2).is_private(), true);
assert_eq!(Ipv4Addr::new(192, 169, 0, 2).is_private(), false);
Run

如果地址是本地链接 (169.254.0.0/16),则返回 true

此属性由 IETF RFC 3927 定义。

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(169, 254, 0, 0).is_link_local(), true);
assert_eq!(Ipv4Addr::new(169, 254, 10, 65).is_link_local(), true);
assert_eq!(Ipv4Addr::new(16, 89, 10, 65).is_link_local(), false);
Run
🔬 This is a nightly-only experimental API. (ip #27709)

如果该地址似乎是可全局路由的,则返回 true。 请参见 iana-ipv4-special-registry

以下返回 false:

Examples

#![feature(ip)]

use std::net::Ipv4Addr;

// private 地址不是
assert_eq!(Ipv4Addr::new(10, 254, 0, 0).is_global(), false);
assert_eq!(Ipv4Addr::new(192, 168, 10, 65).is_global(), false);
assert_eq!(Ipv4Addr::new(172, 16, 10, 65).is_global(), false);

// 0.0.0.0/8 块不是
assert_eq!(Ipv4Addr::new(0, 1, 2, 3).is_global(), false);
// 特别是,未指定的地址不是
assert_eq!(Ipv4Addr::new(0, 0, 0, 0).is_global(), false);

// 回环地址不是整体
assert_eq!(Ipv4Addr::new(127, 0, 0, 1).is_global(), false);

// 链接本地地址不是
assert_eq!(Ipv4Addr::new(169, 254, 45, 1).is_global(), false);

// 广播地址不是
assert_eq!(Ipv4Addr::new(255, 255, 255, 255).is_global(), false);

// 指定用于文档的地址空间不是
assert_eq!(Ipv4Addr::new(192, 0, 2, 255).is_global(), false);
assert_eq!(Ipv4Addr::new(198, 51, 100, 65).is_global(), false);
assert_eq!(Ipv4Addr::new(203, 0, 113, 6).is_global(), false);

// 共享地址不是
assert_eq!(Ipv4Addr::new(100, 100, 0, 0).is_global(), false);

// 保留用于协议分配的地址不是
assert_eq!(Ipv4Addr::new(192, 0, 0, 0).is_global(), false);
assert_eq!(Ipv4Addr::new(192, 0, 0, 255).is_global(), false);

// 保留供 future 使用的地址不是整数
assert_eq!(Ipv4Addr::new(250, 10, 20, 30).is_global(), false);

// 为网络设备基准测试保留的地址不是
assert_eq!(Ipv4Addr::new(198, 18, 0, 0).is_global(), false);

// 所有其他地址均为
assert_eq!(Ipv4Addr::new(1, 1, 1, 1).is_global(), true);
assert_eq!(Ipv4Addr::new(80, 9, 12, 3).is_global(), true);
Run
🔬 This is a nightly-only experimental API. (ip #27709)

如果此地址是 IETF RFC 6598 (100.64.0.0/10) 中定义的共享地址空间的一部分,则返回 true

Examples

#![feature(ip)]
use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(100, 64, 0, 0).is_shared(), true);
assert_eq!(Ipv4Addr::new(100, 127, 255, 255).is_shared(), true);
assert_eq!(Ipv4Addr::new(100, 128, 0, 0).is_shared(), false);
Run
🔬 This is a nightly-only experimental API. (ip #27709)

如果此地址是 192.0.0.0/24 的一部分,则返回 true,如 IETF RFC 6890 中所述,该地址保留给 IANA 用于 IETF 协议分配。

请注意,此块的某些部分正在使用中:

  • 192.0.0.8/32 是 “IPv4 dummy address” (请参见 IETF RFC 7600)
  • 192.0.0.9/32 是 “Port Control Protocol Anycast” (请参见 IETF RFC 7723)
  • 192.0.0.10/32 用于 NAT 遍历 (请参见 IETF RFC 8155)

Examples

#![feature(ip)]
use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(192, 0, 0, 0).is_ietf_protocol_assignment(), true);
assert_eq!(Ipv4Addr::new(192, 0, 0, 8).is_ietf_protocol_assignment(), true);
assert_eq!(Ipv4Addr::new(192, 0, 0, 9).is_ietf_protocol_assignment(), true);
assert_eq!(Ipv4Addr::new(192, 0, 0, 255).is_ietf_protocol_assignment(), true);
assert_eq!(Ipv4Addr::new(192, 0, 1, 0).is_ietf_protocol_assignment(), false);
assert_eq!(Ipv4Addr::new(191, 255, 255, 255).is_ietf_protocol_assignment(), false);
Run
🔬 This is a nightly-only experimental API. (ip #27709)

如果此地址属于 198.18.0.0/15 范围 (为网络设备基准测试保留),则返回 trueIETF RFC 2544 将该范围定义为 192.18.0.0198.19.255.255,但 errata 423 将其更正为 198.18.0.0/15

Examples

#![feature(ip)]
use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(198, 17, 255, 255).is_benchmarking(), false);
assert_eq!(Ipv4Addr::new(198, 18, 0, 0).is_benchmarking(), true);
assert_eq!(Ipv4Addr::new(198, 19, 255, 255).is_benchmarking(), true);
assert_eq!(Ipv4Addr::new(198, 20, 0, 0).is_benchmarking(), false);
Run
🔬 This is a nightly-only experimental API. (ip #27709)

如果此地址由 IANA 保留供 future 使用,则返回 trueIETF RFC 1112 将保留地址块定义为 240.0.0.0/4。 此范围通常包括广播地址 255.255.255.255,但是此实现方案明确将其排除在外,因为它显然不保留供 future 使用。

Warning

随着 IANA 分配新地址,此方法将被更新。 这可能会导致未保留的地址被视为依赖于此方法的过时版本的代码中的保留地址。

Examples

#![feature(ip)]
use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(240, 0, 0, 0).is_reserved(), true);
assert_eq!(Ipv4Addr::new(255, 255, 255, 254).is_reserved(), true);

assert_eq!(Ipv4Addr::new(239, 255, 255, 255).is_reserved(), false);
// 此实现不将广播地址视为保留给 future 使用
assert_eq!(Ipv4Addr::new(255, 255, 255, 255).is_reserved(), false);
Run

如果这是多播地址 (224.0.0.0/4),则返回 true

多播地址在 224239 之间有一个最重要的八位字节,由 IETF RFC 5771 定义。

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(224, 254, 0, 0).is_multicast(), true);
assert_eq!(Ipv4Addr::new(236, 168, 10, 65).is_multicast(), true);
assert_eq!(Ipv4Addr::new(172, 16, 10, 65).is_multicast(), false);
Run

如果这是广播地址 (255.255.255.255),则返回 true

广播地址的所有八位字节都设置为 255,如 IETF RFC 919 中所定义。

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(255, 255, 255, 255).is_broadcast(), true);
assert_eq!(Ipv4Addr::new(236, 168, 10, 65).is_broadcast(), false);
Run

如果此地址在文档指定的范围内,则返回 true

这在 IETF RFC 5737 中定义:

  • 192.0.2.0/24 (TEST-NET-1)
  • 198.51.100.0/24 (TEST-NET-2)
  • 203.0.113.0/24 (TEST-NET-3)

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(192, 0, 2, 255).is_documentation(), true);
assert_eq!(Ipv4Addr::new(198, 51, 100, 65).is_documentation(), true);
assert_eq!(Ipv4Addr::new(203, 0, 113, 6).is_documentation(), true);
assert_eq!(Ipv4Addr::new(193, 34, 17, 19).is_documentation(), false);
Run

将该地址转换为兼容 IPv4 的 IPv6 address

a.b.c.d 变成 ::a.b.c.d

这通常不是您想要的方法。这些地址通常在现代系统上不起作用。 请改用 to_ipv6_mapped

Examples

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

assert_eq!(
    Ipv4Addr::new(192, 0, 2, 255).to_ipv6_compatible(),
    Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0xc000, 0x2ff)
);
Run

将此地址转换为 IPv4 映射的 IPv6 address

a.b.c.d 变成 ::ffff:a.b.c.d

Examples

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

assert_eq!(Ipv4Addr::new(192, 0, 2, 255).to_ipv6_mapped(),
           Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc000, 0x2ff));
Run

Trait Implementations

返回值的副本。 Read more

source 执行复制分配。 Read more

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

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

从一个四元素字节数组创建一个 Ipv4Addr

Examples

use std::net::Ipv4Addr;

let addr = Ipv4Addr::from([13u8, 12u8, 11u8, 10u8]);
assert_eq!(Ipv4Addr::new(13, 12, 11, 10), addr);
Run

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

Examples

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

let addr = Ipv4Addr::new(127, 0, 0, 1);

assert_eq!(
    IpAddr::V4(addr),
    IpAddr::from(addr)
)
Run

Ipv4Addr 转换为主机字节顺序 u32

Examples

use std::net::Ipv4Addr;

let addr = Ipv4Addr::new(0xca, 0xfe, 0xba, 0xbe);
assert_eq!(0xcafebabe, u32::from(addr));
Run

将主机字节顺序 u32 转换为 Ipv4Addr

Examples

use std::net::Ipv4Addr;

let addr = Ipv4Addr::from(0xcafebabe);
assert_eq!(Ipv4Addr::new(0xca, 0xfe, 0xba, 0xbe), 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

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

执行转换。

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

执行转换。