it works
This commit is contained in:
parent
05b51d1c85
commit
f55484be15
7
Cargo.lock
generated
7
Cargo.lock
generated
|
|
@ -29,6 +29,7 @@ dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_yaml_ng",
|
"serde_yaml_ng",
|
||||||
|
"xdg",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -413,3 +414,9 @@ dependencies = [
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "xdg"
|
||||||
|
version = "2.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ anyhow = "1.0.95"
|
||||||
femme = "2.2.1"
|
femme = "2.2.1"
|
||||||
serde = { version = "1.0.217", features = ["derive"] }
|
serde = { version = "1.0.217", features = ["derive"] }
|
||||||
serde_yaml_ng = "0.10.0"
|
serde_yaml_ng = "0.10.0"
|
||||||
|
xdg = "2.5.2"
|
||||||
[dependencies.log]
|
[dependencies.log]
|
||||||
version = "0.4.25"
|
version = "0.4.25"
|
||||||
features = ["kv", "serde"]
|
features = ["kv", "serde"]
|
||||||
|
|
|
||||||
24
src/config.rs
Normal file
24
src/config.rs
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
use std::{collections::BTreeMap, env, fs::File, net::IpAddr, path::PathBuf, str::FromStr};
|
||||||
|
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
pub struct Config {
|
||||||
|
pub domains: BTreeMap<IpAddr, Vec<String>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Config {
|
||||||
|
pub fn load() -> anyhow::Result<Self> {
|
||||||
|
let config_loc = env::var("DNS_CHECK_CONFIG")
|
||||||
|
.map_err(anyhow::Error::new)
|
||||||
|
.and_then(|path| PathBuf::from_str(path.as_str()).map_err(anyhow::Error::new))
|
||||||
|
.or_else(|_| -> anyhow::Result<_> {
|
||||||
|
// .or_else::<_, impl FnOnce(_) -> anyhow::Result<_>>(|_| {
|
||||||
|
let cfg_loc = xdg::BaseDirectories::with_prefix("dns-check")?
|
||||||
|
.place_config_file("config.yml")?;
|
||||||
|
Ok(cfg_loc)
|
||||||
|
})?;
|
||||||
|
let file = File::open(config_loc)?;
|
||||||
|
Ok(serde_yaml_ng::from_reader(file)?)
|
||||||
|
}
|
||||||
|
}
|
||||||
19
src/main.rs
19
src/main.rs
|
|
@ -1,18 +1,23 @@
|
||||||
|
mod config;
|
||||||
pub mod dig_response;
|
pub mod dig_response;
|
||||||
|
|
||||||
use std::net::IpAddr;
|
use std::{net::IpAddr, thread::sleep, time::Duration};
|
||||||
|
|
||||||
|
use config::Config;
|
||||||
use dig_response::DigResponse;
|
use dig_response::DigResponse;
|
||||||
|
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
|
|
||||||
fn main() -> anyhow::Result<()> {
|
fn main() -> anyhow::Result<()> {
|
||||||
run_dns_check("techwork.zone", "67.240.19.249".parse()?)
|
let config = Config::load()?;
|
||||||
// let txt = File::open("example.txt")?;
|
println!("starting DNS check for {} domains", config.domains.len());
|
||||||
// let data: DigResponse = serde_yaml_ng::from_reader(txt)?;
|
for (expected_ip, domains) in config.domains.into_iter() {
|
||||||
// println!("{data:?}");
|
for domain in &domains {
|
||||||
// println!("{:?}", data.answers()?);
|
sleep(Duration::from_millis(250));
|
||||||
// Ok(())
|
run_dns_check(domain, expected_ip)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run_dns_check(domain: impl AsRef<str>, expected_ip: IpAddr) -> anyhow::Result<()> {
|
fn run_dns_check(domain: impl AsRef<str>, expected_ip: IpAddr) -> anyhow::Result<()> {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue