Struct std::net::Ipv4Addr 1.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()); // 所有八位字节都是十六进制的
RunImplementations
为特殊的 ‘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如果该地址似乎是可全局路由的,则返回 true
。
请参见 iana-ipv4-special-registry。
以下返回 false
:
-
专用地址 (请参见
Ipv4Addr::is_private()
) -
回环地址 (请参见
Ipv4Addr::is_loopback()
) -
链接本地地址 (请参见
Ipv4Addr::is_link_local()
) -
广播地址 (请参见
Ipv4Addr::is_broadcast()
) -
用于文档的地址 (请参见
Ipv4Addr::is_documentation()
) -
未指定的地址 (请参见
Ipv4Addr::is_unspecified()
),以及整个0.0.0.0/8
块 -
为 future 协议保留的地址,但全局可路由的
192.0.0.9/32
和192.0.0.10/32
除外 -
保留供 future 使用的地址 (请参见
Ipv4Addr::is_reserved()
-
为网络设备基准测试保留的地址 (请参见
Ipv4Addr::is_benchmarking()
)
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如果此地址是 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如果此地址属于 198.18.0.0/15
范围 (为网络设备基准测试保留),则返回 true
。
IETF RFC 2544 将该范围定义为 192.18.0.0
至 198.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如果此地址由 IANA 保留供 future 使用,则返回 true
。IETF 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
。
多播地址在 224
和 239
之间有一个最重要的八位字节,由 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);
RunTrait Implementations
type Err = AddrParseError
type Err = AddrParseError
可以从解析中返回的相关错误。
如果存在,则此方法返回 self
和 other
值之间的顺序。 Read more
如果存在,则此方法返回 self
和 other
值之间的顺序。 Read more
如果存在,则此方法返回 self
和 other
值之间的顺序。 Read more