https://doc.rust-lang.org

IpAddr in std::net - Rust

pub enum IpAddr {
    V4(Ipv4Addr),
    V6(Ipv6Addr),
}

Expand description

An IP address, either IPv4 or IPv6.

This enum can contain either an Ipv4Addr or an Ipv6Addr, see their respective documentation for more details.

§ Examples

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

let localhost_v4 = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
let localhost_v6 = IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));

assert_eq!("127.0.0.1".parse(), Ok(localhost_v4));
assert_eq!("::1".parse(), Ok(localhost_v6));

assert_eq!(localhost_v4.is_ipv6(), false);
assert_eq!(localhost_v4.is_ipv4(), true);

Run

§

An IPv4 address.

§

An IPv6 address.

source §

1.12.0 (const: 1.50.0) · source

Returns true for the special ‘unspecified’ address.

See the documentation for Ipv4Addr::is_unspecified() and Ipv6Addr::is_unspecified() for more details.

§ Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};

assert_eq!(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)).is_unspecified(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0)).is_unspecified(), true);

Run

1.12.0 (const: 1.50.0) · source

Returns true if this is a loopback address.

See the documentation for Ipv4Addr::is_loopback() and Ipv6Addr::is_loopback() for more details.

§ Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};

assert_eq!(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)).is_loopback(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0x1)).is_loopback(), true);

Run

const: unstable · source 🔬This is a nightly-only experimental API. ( ip #27709)

Returns true if the address appears to be globally routable.

See the documentation for Ipv4Addr::is_global() and Ipv6Addr::is_global() for more details.

§ Examples
#![feature(ip)]

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

assert_eq!(IpAddr::V4(Ipv4Addr::new(80, 9, 12, 3)).is_global(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0x1c9, 0, 0, 0xafc8, 0, 0x1)).is_global(), true);

Run

1.12.0 (const: 1.50.0) · source

Returns true if this is a multicast address.

See the documentation for Ipv4Addr::is_multicast() and Ipv6Addr::is_multicast() for more details.

§ Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};

assert_eq!(IpAddr::V4(Ipv4Addr::new(224, 254, 0, 0)).is_multicast(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0)).is_multicast(), true);

Run

const: unstable · source 🔬This is a nightly-only experimental API. ( ip #27709)

Returns true if this address is in a range designated for documentation.

See the documentation for Ipv4Addr::is_documentation() and Ipv6Addr::is_documentation() for more details.

§ Examples
#![feature(ip)]

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

assert_eq!(IpAddr::V4(Ipv4Addr::new(203, 0, 113, 6)).is_documentation(), true);
assert_eq!(
    IpAddr::V6(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0)).is_documentation(),
    true
);

Run

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

Returns true if this address is in a range designated for benchmarking.

See the documentation for Ipv4Addr::is_benchmarking() and Ipv6Addr::is_benchmarking() for more details.

§ Examples
#![feature(ip)]

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

assert_eq!(IpAddr::V4(Ipv4Addr::new(198, 19, 255, 255)).is_benchmarking(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0x2001, 0x2, 0, 0, 0, 0, 0, 0)).is_benchmarking(), true);

Run

1.16.0 (const: 1.50.0) · source

Returns true if this address is an IPv4 address, and false otherwise.

§ Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};

assert_eq!(IpAddr::V4(Ipv4Addr::new(203, 0, 113, 6)).is_ipv4(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0)).is_ipv4(), false);

Run

1.16.0 (const: 1.50.0) · source

Returns true if this address is an IPv6 address, and false otherwise.

§ Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};

assert_eq!(IpAddr::V4(Ipv4Addr::new(203, 0, 113, 6)).is_ipv6(), false);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0)).is_ipv6(), true);

Run

1.75.0 (const: 1.75.0) · source

Converts this address to an IpAddr::V4 if it is an IPv4-mapped IPv6 addresses, otherwise it returns self as-is.

§ Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};

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

assert_eq!(IpAddr::V4(localhost_v4).to_canonical(), localhost_v4);
assert_eq!(IpAddr::V6(localhost_v4.to_ipv6_mapped()).to_canonical(), localhost_v4);
assert_eq!(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)).to_canonical().is_loopback(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1)).is_loopback(), false);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1)).to_canonical().is_loopback(), true);

Run

source §

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

Parse an IP address from a slice of bytes.

#![feature(addr_parse_ascii)]

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

let localhost_v4 = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
let localhost_v6 = IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));

assert_eq!(IpAddr::parse_ascii(b"127.0.0.1"), Ok(localhost_v4));
assert_eq!(IpAddr::parse_ascii(b"::1"), Ok(localhost_v6));

Run

source §source §source §1.17.0 · source §

source §

Creates an IpAddr::V6 from an eight element 16-bit array.

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

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

Run

1.17.0 · source §

source §

Creates an IpAddr::V6 from a sixteen element byte array.

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

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

Run

1.17.0 · source §

source §

Creates an IpAddr::V4 from a four element byte array.

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

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

Run

1.16.0 · source §

source §

Copies this address to a new 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.16.0 · source §

source §

Copies this address to a new 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

source §

§

The associated error which can be returned from parsing.

source §

Parses a string s to return a value of this type. Read more

source §source §1.16.0 · source §

source §

This method tests for self and other values to be equal, and is used by ==.

1.0.0 · source §

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

1.16.0 · source §

source §

This method tests for self and other values to be equal, and is used by ==.

1.0.0 · source §

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

1.16.0 · source §

source §

This method tests for self and other values to be equal, and is used by ==.

1.0.0 · source §

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

1.16.0 · source §

source §

This method tests for self and other values to be equal, and is used by ==.

1.0.0 · source §

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

source §

source §

This method tests for self and other values to be equal, and is used by ==.

1.0.0 · source §

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

1.16.0 · source §

source §

This method returns an ordering between self and other values if one exists. Read more

1.0.0 · source §

This method tests less than (for self and other) and is used by the < operator. Read more

1.0.0 · source §

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

1.0.0 · source §

This method tests greater than (for self and other) and is used by the > operator. Read more

1.0.0 · source §

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

1.16.0 · source §

source §

This method returns an ordering between self and other values if one exists. Read more

1.0.0 · source §

This method tests less than (for self and other) and is used by the < operator. Read more

1.0.0 · source §

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

1.0.0 · source §

This method tests greater than (for self and other) and is used by the > operator. Read more

1.0.0 · source §

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

1.16.0 · source §

source §

This method returns an ordering between self and other values if one exists. Read more

1.0.0 · source §

This method tests less than (for self and other) and is used by the < operator. Read more

1.0.0 · source §

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

1.0.0 · source §

This method tests greater than (for self and other) and is used by the > operator. Read more

1.0.0 · source §

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

1.16.0 · source §

source §

This method returns an ordering between self and other values if one exists. Read more

1.0.0 · source §

This method tests less than (for self and other) and is used by the < operator. Read more

1.0.0 · source §

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

1.0.0 · source §

This method tests greater than (for self and other) and is used by the > operator. Read more

1.0.0 · source §

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

source §

source §

This method returns an ordering between self and other values if one exists. Read more

1.0.0 · source §

This method tests less than (for self and other) and is used by the < operator. Read more

1.0.0 · source §

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

1.0.0 · source §

This method tests greater than (for self and other) and is used by the > operator. Read more

1.0.0 · source §

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

source §source §source §

§§§§§