Crate dns_lookup

source ·
Expand description

dns_lookup

A small wrapper for libc to perform simple DNS lookups.

Two main functions are provided.

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

lookup_host

Given a hostname, return an Iterator the IP Addresses associated with it.

  use dns_lookup::lookup_host;

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

lookup_addr

Given an IP Address, return the reverse DNS entry (hostname) for the given IP Address.

  use dns_lookup::lookup_addr;

  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.

getaddrinfo

  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
      let _ = socket;
    }
  }

getnameinfo

  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);

Structs

  • Struct that stores socket information, as returned by getaddrinfo.
  • A struct used as the hints argument to getaddrinfo.
  • An iterator of AddrInfo structs, wrapping a linked-list returned by getaddrinfo.
  • Struct that stores a lookup error from getaddrinfo or getnameinfo. Can automatically be coerced to an io::Error using ?.

Enums

  • Address Family
  • Different kinds of lookup errors that getaddrinfo and getnameinfo can return. These can be a little inconsitant between platforms, so it’s recommended not to rely on them.
  • Socket Protocol
  • Socket Type

Functions

  • Fetch the local hostname.
  • Retrieve socket information for a host, service, or both. Acts as a thin wrapper around the libc getaddrinfo.
  • Retrieve the name for a given IP and Service. Acts as a thin wrapper around the libc getnameinfo.
  • Lookup the hostname of a given IP Address via DNS.
  • Lookup the address for a given hostname via DNS.