Тип IpAddr
Тип IpAddr - это перечисление (enum) из модуля std::net,
которое представляет IP-адрес. Оно имеет два варианта:
V4 для IPv4-адресов и V6 для IPv6-адресов.
Тип позволяет работать с IP-адресами обоих стандартов
через единый интерфейс, не заботясь о конкретной версии протокола.
Перечисление IpAddr реализует методы is_ipv4,
is_ipv6, is_loopback, is_multicast
и многие другие, что делает его удобным для проверки свойств адреса.
Также тип реализует трейты Display, FromStr
и Debug, что позволяет легко создавать и выводить адреса.
Синтаксис
enum IpAddr
{
V4(Ipv4Addr),
V6(Ipv6Addr),
}
Создать значение можно через варианты IpAddr::V4
или IpAddr::V6, либо распарсив строку
с помощью метода parse.
Пример
Давайте создадим IPv4-адрес и выведем его на экран:
use std::net::{IpAddr, Ipv4Addr};
fn main()
{
let addr = IpAddr::V4(Ipv4Addr::new(192, 168, 1, 1));
println!("{}", addr);
println!("{}", addr.is_ipv4());
println!("{}", addr.is_ipv6());
}
Результат выполнения кода:
192.168.1.1
true
false
Пример
Давайте создадим IPv6-адрес и проверим его свойства:
use std::net::{IpAddr, Ipv6Addr};
fn main()
{
let addr = IpAddr::V6(Ipv6Addr::LOCALHOST);
println!("{}", addr);
println!("{}", addr.is_loopback());
println!("{}", addr.is_ipv4());
println!("{}", addr.is_ipv6());
}
Результат выполнения кода:
::1
true
false
true
Пример
Давайте распарсим IP-адрес из строки с помощью метода parse:
use std::net::IpAddr;
fn main()
{
let addr: IpAddr = "127.0.0.1".parse().unwrap();
println!("{}", addr);
println!("{}", addr.is_loopback());
}
Результат выполнения кода:
127.0.0.1
true
Пример
Давайте распарсим IPv6-адрес из строки:
use std::net::IpAddr;
fn main()
{
let addr: IpAddr = "::1".parse().unwrap();
println!("{}", addr);
println!("{}", addr.is_ipv6());
}
Результат выполнения кода:
::1
true
Смотрите также
-
тип
Ipv4Addr,
который представляет IPv4-адрес -
тип
Ipv6Addr,
который представляет IPv6-адрес -
тип
SocketAddr,
который объединяет IP-адрес и номер порта -
трейт
ToSocketAddrs,
который преобразует значения в список сокет-адресов