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
每月156,832次下载
用于 138 个crate (76 个直接使用)
34KB
627 行
dns-lookup
libc的一个小包装器,用于执行简单的DNS查找。
您可以使用 lookup_host
函数获取给定主机名的IP地址列表,并使用 lookup_name
函数获取给定IP地址的反向DNS条目。
PS:如果您只需要单个结果,请考虑在libstd中使用ToSocketAddrs。
该库还包括对 getaddrinfo
和 getnameinfo
的安全包装。
用法
简单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