#dns #resolve #lookup #getaddrinfo #getnameinfo

dns-lookup

A simple dns resolving api, much like rust’s unstable api. Also includes getaddrinfo and getnameinfo wrappers for libc variants.

24 releases (9 stable)

Uses old Rust 2015

1.0.8 Jul 17, 2021
1.0.6 Mar 24, 2021
1.0.5 Oct 19, 2020
1.0.3 May 27, 2020
0.2.0 Mar 26, 2016

#20 in Network programming

Download history 18451/week @ 2021-09-28 19384/week @ 2021-10-05 19623/week @ 2021-10-12 18173/week @ 2021-10-19 20689/week @ 2021-10-26 16397/week @ 2021-11-02 11831/week @ 2021-11-09 11975/week @ 2021-11-16 10106/week @ 2021-11-23 11675/week @ 2021-11-30 12777/week @ 2021-12-07 13417/week @ 2021-12-14 9457/week @ 2021-12-21 12847/week @ 2021-12-28 12858/week @ 2022-01-04 13596/week @ 2022-01-11

50,886 downloads per month
Used in 62 crates (41 directly)

MIT/Apache

29KB
590 lines

dns-lookup

Crates.io

A small wrapper for libc to perform simple DNS lookups.

You can use the lookup_host function to get a list of IP Addresses for a given hostname, and the lookup_name function to get the reverse dns entry for the given IP Address.

PS: If you only need a single result, consider ToSocketAddrs in libstd.

The library also includes a safe wrapper for getaddrinfo and getnameinfo.

Documentation

Usage

Simple 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();
}

Dependencies

~200KB