Struct core::net::Ipv4Addr

1.0.0 · source ·
pub struct Ipv4Addr { /* private fields */ }
Expand description

IPv4 地址。

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

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

文字表达

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§

source§

impl Ipv4Addr

const: 1.32.0 · source

pub const fn new(a: u8, b: u8, c: u8, d: u8) -> Ipv4Addr

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

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

Examples
use std::net::Ipv4Addr;

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

pub const LOCALHOST: Self = _

一个 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
1.30.0 · source

pub const UNSPECIFIED: Self = _

代表未指定地址的 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
1.30.0 · source

pub const BROADCAST: Self = _

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

Examples
use std::net::Ipv4Addr;

let addr = Ipv4Addr::BROADCAST;
assert_eq!(addr, Ipv4Addr::new(255, 255, 255, 255));
Run
const: 1.50.0 · source

pub const fn octets(&self) -> [u8; 4]

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

Examples
use std::net::Ipv4Addr;

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

pub const fn is_unspecified(&self) -> bool

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

此属性在 UNIX Network Programming, Second Edition,W 中定义。Richard Stevens, p. 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
1.7.0 (const: 1.50.0) · source

pub const fn is_loopback(&self) -> bool

如果这是回环地址 (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
1.7.0 (const: 1.50.0) · source

pub const fn is_private(&self) -> bool

如果这是一个专用地址,则返回 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
const: unstable · source

pub fn is_global(&self) -> bool

🔬This is a nightly-only experimental API. (ip #27709)

如果地址看起来是由 IANA IPv4 Special-Purpose Address Registry 指定的全局可访问的,则返回 true。 一个地址是否实际可访问将取决于您的网络配置。

大多数 IPv4 地址都是全局可达的; 除非它们被明确定义为 not 全局可达。

全球无法访问的显着地址的非详尽列表:

有关哪些地址可全局访问的完整概览,请参见 IANA IPv4 Special-Purpose Address Registry 中的表格。

Examples
#![feature(ip)]

use std::net::Ipv4Addr;

// 大多数 IPv4 地址都是全局可达的:
assert_eq!(Ipv4Addr::new(80, 9, 12, 3).is_global(), true);

// 但是,某些地址已被赋予特殊含义,使它们无法全局访问。
// 一些例子是:

// 未指定的地址 (`0.0.0.0`)
assert_eq!(Ipv4Addr::UNSPECIFIED.is_global(), false);

// 保留供 private 使用的地址 (`10.0.0.0/8`, `172.16.0.0/12`, 192.168.0.0/16)
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);

// 共享地址空间 (`100.64.0.0/10`) 中的地址
assert_eq!(Ipv4Addr::new(100, 100, 0, 0).is_global(), false);

// 回环地址 (`127.0.0.0/8`)
assert_eq!(Ipv4Addr::LOCALHOST.is_global(), false);

// 链路本地地址 (`169.254.0.0/16`)
assert_eq!(Ipv4Addr::new(169, 254, 45, 1).is_global(), false);

// 为文档保留的地址 (`192.0.2.0/24`、`198.51.100.0/24`、`203.0.113.0/24`)
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);

// 为 (`198.18.0.0/15`) 基准测试保留的地址
assert_eq!(Ipv4Addr::new(198, 18, 0, 0).is_global(), false);

// 保留地址 (`240.0.0.0/4`)
assert_eq!(Ipv4Addr::new(250, 10, 20, 30).is_global(), false);

// 广播地址 (`255.255.255.255`)
assert_eq!(Ipv4Addr::BROADCAST.is_global(), false);

// 有关完整概述,请参见 IANA IPv4 专用地址注册表。
Run
const: unstable · source

pub fn is_shared(&self) -> bool

🔬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
const: unstable · source

pub fn is_benchmarking(&self) -> bool

🔬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
const: unstable · source

pub fn is_reserved(&self) -> bool

🔬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
1.7.0 (const: 1.50.0) · source

pub const fn is_multicast(&self) -> bool

如果这是多播地址 (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
1.7.0 (const: 1.50.0) · source

pub const fn is_broadcast(&self) -> bool

如果这是广播地址 (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
1.7.0 (const: 1.50.0) · source

pub const fn is_documentation(&self) -> bool

如果此地址在文档指定的范围内,则返回 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
const: 1.50.0 · source

pub const fn to_ipv6_compatible(&self) -> Ipv6Addr

将此地址转换为 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
const: 1.50.0 · source

pub const fn to_ipv6_mapped(&self) -> Ipv6Addr

将此地址转换为 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
source§

impl Ipv4Addr

source

pub fn parse_ascii(b: &[u8]) -> Result<Self, AddrParseError>

🔬This is a nightly-only experimental API. (addr_parse_ascii #101035)

从字节片中解析 IPv4 地址。

#![feature(addr_parse_ascii)]

use std::net::Ipv4Addr;

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

assert_eq!(Ipv4Addr::parse_ascii(b"127.0.0.1"), Ok(localhost));
Run

Trait Implementations§

source§

impl Clone for Ipv4Addr

source§

fn clone(&self) -> Ipv4Addr

返回值的副本。 Read more
source§

fn clone_from(&mut self, source: &Self)

source 执行复制分配。 Read more
source§

impl Debug for Ipv4Addr

source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

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

impl Display for Ipv4Addr

source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

使用给定的格式化程序格式化该值。 Read more
1.9.0 · source§

impl From<[u8; 4]> for Ipv4Addr

source§

fn from(octets: [u8; 4]) -> Ipv4Addr

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

Examples
use std::net::Ipv4Addr;

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

impl From<Ipv4Addr> for IpAddr

source§

fn from(ipv4: Ipv4Addr) -> IpAddr

将此地址复制到新的 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
1.1.0 · source§

impl From<Ipv4Addr> for u32

source§

fn from(ip: Ipv4Addr) -> u32

Ipv4Addr 转换为主机字节顺序 u32

Examples
use std::net::Ipv4Addr;

let addr = Ipv4Addr::new(0x12, 0x34, 0x56, 0x78);
assert_eq!(0x12345678, u32::from(addr));
Run
1.1.0 · source§

impl From<u32> for Ipv4Addr

source§

fn from(ip: u32) -> Ipv4Addr

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

Examples
use std::net::Ipv4Addr;

let addr = Ipv4Addr::from(0x12345678);
assert_eq!(Ipv4Addr::new(0x12, 0x34, 0x56, 0x78), addr);
Run
source§

impl FromStr for Ipv4Addr

§

type Err = AddrParseError

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

fn from_str(s: &str) -> Result<Ipv4Addr, AddrParseError>

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

impl Hash for Ipv4Addr

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

将该值输入给定的 HasherRead more
1.3.0 · source§

fn hash_slice<H: Hasher>(data: &[Self], state: &mut H)where Self: Sized,

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

impl Ord for Ipv4Addr

source§

fn cmp(&self, other: &Ipv4Addr) -> Ordering

此方法返回 selfother 之间的 OrderingRead more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere Self: Sized,

比较并返回两个值中的最大值。 Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere Self: Sized,

比较并返回两个值中的最小值。 Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere Self: Sized + PartialOrd,

将值限制在某个时间间隔内。 Read more
1.16.0 · source§

impl PartialEq<IpAddr> for Ipv4Addr

source§

fn eq(&self, other: &IpAddr) -> bool

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

fn ne(&self, other: &Rhs) -> bool

此方法测试 !=。 默认实现几乎总是足够的,并且不应在没有充分理由的情况下被覆盖。
1.16.0 · source§

impl PartialEq<Ipv4Addr> for IpAddr

source§

fn eq(&self, other: &Ipv4Addr) -> bool

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

fn ne(&self, other: &Rhs) -> bool

此方法测试 !=。 默认实现几乎总是足够的,并且不应在没有充分理由的情况下被覆盖。
source§

impl PartialEq<Ipv4Addr> for Ipv4Addr

source§

fn eq(&self, other: &Ipv4Addr) -> bool

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

fn ne(&self, other: &Rhs) -> bool

此方法测试 !=。 默认实现几乎总是足够的,并且不应在没有充分理由的情况下被覆盖。
1.16.0 · source§

impl PartialOrd<IpAddr> for Ipv4Addr

source§

fn partial_cmp(&self, other: &IpAddr) -> Option<Ordering>

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

fn lt(&self, other: &Rhs) -> bool

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

fn le(&self, other: &Rhs) -> bool

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

fn gt(&self, other: &Rhs) -> bool

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

fn ge(&self, other: &Rhs) -> bool

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

impl PartialOrd<Ipv4Addr> for IpAddr

source§

fn partial_cmp(&self, other: &Ipv4Addr) -> Option<Ordering>

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

fn lt(&self, other: &Rhs) -> bool

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

fn le(&self, other: &Rhs) -> bool

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

fn gt(&self, other: &Rhs) -> bool

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

fn ge(&self, other: &Rhs) -> bool

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

impl PartialOrd<Ipv4Addr> for Ipv4Addr

source§

fn partial_cmp(&self, other: &Ipv4Addr) -> Option<Ordering>

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

fn lt(&self, other: &Rhs) -> bool

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

fn le(&self, other: &Rhs) -> bool

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

fn gt(&self, other: &Rhs) -> bool

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

fn ge(&self, other: &Rhs) -> bool

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

impl Copy for Ipv4Addr

source§

impl Eq for Ipv4Addr

source§

impl StructuralEq for Ipv4Addr

source§

impl StructuralPartialEq for Ipv4Addr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

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

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

调用 U::from(self)

也就是说,这种转换是 From<T> for U 实现选择执行的任何操作。

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

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

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。