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 的实现。四个八位位组用十进制表示法除以 . (称为 “点十进制表示法”)。 值得注意的是,每个 IETF RFC 6943 不允许使用八进制数 (以 0 开头) 和十六进制数 (以 0x 开头)。

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);
assert!("012.004.002.000".parse::<Ipv4Addr>().is_err()); // 所有八位字节都是八进制的
assert!("0000000.0.0.0".parse::<Ipv4Addr>().is_err()); // 第一个八位字节是八进制中的零
assert!("0xcb.0x0.0x71.0x00".parse::<Ipv4Addr>().is_err()); // 所有八位字节都是十六进制的
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)

如果此地址属于 198.18.0.0/15 范围 (为网络设备基准测试保留),则返回 trueIETF RFC 2544 将该范围定义为 192.18.0.0198.19.255.255,但 勘误表 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 地址

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

请注意,与 IPv4 兼容的地址已被正式弃用。 如果出于遗留原因,您没有明确需要与 IPv4 兼容的地址,请考虑改用 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 地址

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(0x12, 0x34, 0x56, 0x78);
assert_eq!(0x12345678, u32::from(addr));
Run

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

Examples
use std::net::Ipv4Addr;

let addr = Ipv4Addr::from(0x12345678);
assert_eq!(Ipv4Addr::new(0x12, 0x34, 0x56, 0x78), 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)

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

将给定值转换为 StringRead more

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

执行转换。

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

执行转换。