dns_lookup/lib.rs
1//! # `dns_lookup`
2//! A small wrapper for libc to perform simple DNS lookups.
3//!
4//! Two main functions are provided.
5//!
6//! PS: If you only need a single result, consider [ToSocketAddrs](https://doc.rust-lang.org/std/net/trait.ToSocketAddrs.html) in libstd.
7//!
8//!
9//! # `lookup_host`
10//! Given a hostname, return an Iterator the IP Addresses associated with
11//! it.
12//!
13//! ```rust
14//! use dns_lookup::lookup_host;
15//!
16//! let hostname = "localhost";
17//! let ips: Vec<std::net::IpAddr> = lookup_host(hostname).unwrap();
18//! assert!(ips.contains(&"127.0.0.1".parse().unwrap()));
19//! ```
20//!
21//! # `lookup_addr`
22//! Given an IP Address, return the reverse DNS entry (hostname) for the
23//! given IP Address.
24//!
25//!
26//! ```rust
27//! use dns_lookup::lookup_addr;
28//!
29//! let ip: std::net::IpAddr = "127.0.0.1".parse().unwrap();
30//! let host = lookup_addr(&ip).unwrap();
31//!
32//! // The string "localhost" on unix, and the hostname on Windows.
33//! ```
34//!
35//! # `getaddrinfo`
36//! ```rust
37//! extern crate dns_lookup;
38//!
39//! use dns_lookup::{getaddrinfo, AddrInfoHints, SockType};
40//!
41//! fn main() {
42//! let hostname = "localhost";
43//! let service = "ssh";
44//! let hints = AddrInfoHints {
45//! socktype: SockType::Stream.into(),
46//! .. AddrInfoHints::default()
47//! };
48//! let sockets =
49//! getaddrinfo(Some(hostname), Some(service), Some(hints))
50//! .unwrap().collect::<std::io::Result<Vec<_>>>().unwrap();
51//!
52//! for socket in sockets {
53//! // Try connecting to socket
54//! let _ = socket;
55//! }
56//! }
57//! ```
58//!
59//! # `getnameinfo`
60//! ```rust
61//! use dns_lookup::getnameinfo;
62//! use std::net::{IpAddr, SocketAddr};
63//!
64//! let ip: IpAddr = "127.0.0.1".parse().unwrap();
65//! let port = 22;
66//! let socket: SocketAddr = (ip, port).into();
67//!
68//! let (name, service) = match getnameinfo(&socket, 0) {
69//! Ok((n, s)) => (n, s),
70//! Err(e) => panic!("Failed to lookup socket {:?}", e),
71//! };
72//!
73//! println!("{:?} {:?}", name, service);
74//! let _ = (name, service);
75//! ```
76
77#![cfg_attr(feature = "clippy", feature(plugin))]
78#![cfg_attr(feature = "clippy", plugin(clippy))]
79
80mod addrinfo;
81mod err;
82mod hostname;
83mod lookup;
84mod nameinfo;
85mod types;
86
87#[cfg(unix)]
88extern crate libc;
89
90#[cfg(windows)]
91mod win;
92
93pub use addrinfo::{getaddrinfo, AddrInfo, AddrInfoHints, AddrInfoIter};
94pub use err::{LookupError, LookupErrorKind};
95pub use hostname::get_hostname;
96pub use lookup::{lookup_addr, lookup_host};
97pub use nameinfo::getnameinfo;
98pub use types::{AddrFamily, Protocol, SockType};