feat: add domain check
This commit is contained in:
35
src/network.rs
Normal file
35
src/network.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use trust_dns_resolver::Resolver;
|
||||
use trust_dns_resolver::config::{ResolverConfig, ResolverOpts};
|
||||
use rust_util::XResult;
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct PublicIpResponse {
|
||||
pub status: i32,
|
||||
pub message: String,
|
||||
pub ip: String,
|
||||
pub user_agent: Option<String>,
|
||||
}
|
||||
|
||||
pub fn get_local_public_ip() -> XResult<String> {
|
||||
let response = opt_result!(reqwest::blocking::get("https://hatter.ink/ip/ip.jsonp"), "Get local public ip failed: {}");
|
||||
let response_text = opt_result!(response.text(), "Get local public ip failed: {}");
|
||||
let response_json: PublicIpResponse = opt_result!(deser_hjson::from_str(&response_text), "Parse get public ip response failed: {}");
|
||||
Ok(response_json.ip)
|
||||
}
|
||||
|
||||
pub fn get_resolver() -> XResult<Resolver> {
|
||||
Ok(Resolver::new(ResolverConfig::default(), ResolverOpts::default())?)
|
||||
}
|
||||
|
||||
pub fn resolve_first_ipv4(resolver: &Resolver, domain: &str) -> XResult<Option<String>> {
|
||||
let ip = opt_result!(resolver.ipv4_lookup(domain), "Resolve domain: {}, failed: {}", domain);
|
||||
Ok(ip.iter().next().map(|i| i.to_string()))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test() {
|
||||
println!("{:?}", resolve_first_ipv4(&get_resolver().unwrap(),"hatter.ink"));
|
||||
println!("{:?}", get_local_public_ip());
|
||||
}
|
||||
Reference in New Issue
Block a user