#ip-address #dns #lookup #resolve #getaddrinfo #getnameinfo

dns-lookup

一个简单的DNS解析API,类似于Rust的不稳定API。还包括libc变体的getaddrinfo和getnameinfo包装器。

29个版本 (14个稳定版)

2.0.4 2023年10月15日
2.0.2 2023年5月13日
1.0.8 2021年7月17日
1.0.6 2021年3月24日
0.2.0 2016年3月26日

#1 in #lookup

Download history 29891/week @ 2024-04-22 32154/week @ 2024-04-29 35790/week @ 2024-05-06 35041/week @ 2024-05-13 38954/week @ 2024-05-20 32226/week @ 2024-05-27 31454/week @ 2024-06-03 32683/week @ 2024-06-10 33424/week @ 2024-06-17 35601/week @ 2024-06-24 32149/week @ 2024-07-01 35740/week @ 2024-07-08 38369/week @ 2024-07-15 40164/week @ 2024-07-22 38990/week @ 2024-07-29 37313/week @ 2024-08-05

每月156,832次下载
用于 138 个crate (76 个直接使用)

MIT/Apache

34KB
627

dns-lookup

Crates.io

libc的一个小包装器,用于执行简单的DNS查找。

您可以使用 lookup_host 函数获取给定主机名的IP地址列表,并使用 lookup_name 函数获取给定IP地址的反向DNS条目。

PS:如果您只需要单个结果,请考虑在libstd中使用ToSocketAddrs

该库还包括对 getaddrinfogetnameinfo 的安全包装。

文档

用法

简单API

use dns_lookup::{lookup_host, lookup_addr};

{
  let hostname = "localhost";
  let ips: Vec<std::net::IpAddr> = lookup_host(hostname).unwrap();
  assert!(ips.contains(&"127.0.0.1".parse().unwrap()));
}

{
  let ip: std::net::IpAddr = "127.0.0.1".parse().unwrap();
  let host = lookup_addr(&ip).unwrap();

  // The string "localhost" on unix, and the hostname on Windows.
}

libc API

{
  extern crate dns_lookup;

  use dns_lookup::{getaddrinfo, AddrInfoHints, SockType};

  fn main() {
    let hostname = "localhost";
    let service = "ssh";
    let hints = AddrInfoHints {
      socktype: SockType::Stream.into(),
      .. AddrInfoHints::default()
    };
    let sockets =
      getaddrinfo(Some(hostname), Some(service), Some(hints))
        .unwrap().collect::<std::io::Result<Vec<_>>>().unwrap();

    for socket in sockets {
      // Try connecting to socket
      println!("{:?}", socket);
    }
  }
}

{
  use dns_lookup::getnameinfo;
  use std::net::{IpAddr, SocketAddr};

  let ip: IpAddr = "127.0.0.1".parse().unwrap();
  let port = 22;
  let socket: SocketAddr = (ip, port).into();

  let (name, service) = match getnameinfo(&socket, 0) {
    Ok((n, s)) => (n, s),
    Err(e) => panic!("Failed to lookup socket {:?}", e),
  };

  println!("{:?} {:?}", name, service);
  let _ = (name, service);
}

{
  use dns_lookup::gethostname;

  let hostname = gethostname().unwrap();
}

依赖

~0.2–12MB
~74K SLoC