feat: logging
This commit is contained in:
parent
f10c7a59c9
commit
de05a7f848
13
Cargo.lock
generated
13
Cargo.lock
generated
|
@ -472,6 +472,7 @@ dependencies = [
|
||||||
"serde_regex",
|
"serde_regex",
|
||||||
"simple-dns",
|
"simple-dns",
|
||||||
"socket2",
|
"socket2",
|
||||||
|
"tracing",
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -603,9 +604,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
|
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
|
"tracing-attributes",
|
||||||
"tracing-core",
|
"tracing-core",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing-attributes"
|
||||||
|
version = "0.1.28"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tracing-core"
|
name = "tracing-core"
|
||||||
version = "0.1.33"
|
version = "0.1.33"
|
||||||
|
|
|
@ -13,4 +13,5 @@ serde_json = "1.0.134"
|
||||||
serde_regex = "1.1.0"
|
serde_regex = "1.1.0"
|
||||||
simple-dns = "0.9.1"
|
simple-dns = "0.9.1"
|
||||||
socket2 = { version = "0.5.8", features = ["all"] }
|
socket2 = { version = "0.5.8", features = ["all"] }
|
||||||
|
tracing = "0.1.41"
|
||||||
tracing-subscriber = "0.3.19"
|
tracing-subscriber = "0.3.19"
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"interfaces": "lan*",
|
"interfaces": "lan.*",
|
||||||
"rules": [
|
"rules": [
|
||||||
{
|
{
|
||||||
"from": "wan",
|
"from": "lan",
|
||||||
"to": "lan",
|
"to": "wan",
|
||||||
"allow_questions": "printer",
|
"allow_questions": "printer",
|
||||||
"allow_answers": ".*"
|
"allow_answers": ".*"
|
||||||
}
|
}
|
||||||
|
|
14
src/main.rs
14
src/main.rs
|
@ -15,6 +15,7 @@ use std::{
|
||||||
collections::HashSet,
|
collections::HashSet,
|
||||||
net::{Ipv4Addr, SocketAddr, SocketAddrV4},
|
net::{Ipv4Addr, SocketAddr, SocketAddrV4},
|
||||||
};
|
};
|
||||||
|
use tracing::{debug, error, info};
|
||||||
|
|
||||||
fn get_iface(from: &SocketAddr, ifaces: &Vec<Iface>) -> Result<String> {
|
fn get_iface(from: &SocketAddr, ifaces: &Vec<Iface>) -> Result<String> {
|
||||||
for i in ifaces {
|
for i in ifaces {
|
||||||
|
@ -49,6 +50,7 @@ struct Rule {
|
||||||
allow_answers: Regex,
|
allow_answers: Regex,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
struct Iface {
|
struct Iface {
|
||||||
iface: NetworkInterface,
|
iface: NetworkInterface,
|
||||||
socket: socket2::Socket,
|
socket: socket2::Socket,
|
||||||
|
@ -70,6 +72,7 @@ struct Config {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
|
tracing_subscriber::fmt::init();
|
||||||
let cli = Cli::parse();
|
let cli = Cli::parse();
|
||||||
let file = File::open(cli.config)?;
|
let file = File::open(cli.config)?;
|
||||||
let reader = BufReader::new(file);
|
let reader = BufReader::new(file);
|
||||||
|
@ -81,7 +84,6 @@ fn main() -> Result<()> {
|
||||||
let addr = SocketAddrV4::new(ADDR, 5353).into();
|
let addr = SocketAddrV4::new(ADDR, 5353).into();
|
||||||
socket.bind(&addr)?;
|
socket.bind(&addr)?;
|
||||||
socket.join_multicast_v4(&ADDR, &Ipv4Addr::UNSPECIFIED)?;
|
socket.join_multicast_v4(&ADDR, &Ipv4Addr::UNSPECIFIED)?;
|
||||||
//socket.set_nonblocking(true)?;
|
|
||||||
|
|
||||||
let interfaces = interfaces();
|
let interfaces = interfaces();
|
||||||
let interfaces = interfaces
|
let interfaces = interfaces
|
||||||
|
@ -108,6 +110,7 @@ fn main() -> Result<()> {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.collect::<Result<Vec<_>>>()?;
|
.collect::<Result<Vec<_>>>()?;
|
||||||
|
debug!("{:?}", interfaces);
|
||||||
let mut buf = [0u8; 4096];
|
let mut buf = [0u8; 4096];
|
||||||
let socket: UdpSocket = socket.into();
|
let socket: UdpSocket = socket.into();
|
||||||
loop {
|
loop {
|
||||||
|
@ -123,14 +126,14 @@ fn main() -> Result<()> {
|
||||||
let packet = Packet::parse(buf)?;
|
let packet = Packet::parse(buf)?;
|
||||||
let iface = match get_iface(&from, &interfaces) {
|
let iface = match get_iface(&from, &interfaces) {
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
eprintln!("Invalid packet received from {}", from);
|
error!("Invalid packet received from {}", from);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Ok(name) => name,
|
Ok(name) => name,
|
||||||
};
|
};
|
||||||
let questions = get_questions(&packet);
|
let questions = get_questions(&packet);
|
||||||
let answers = get_answers(&packet);
|
let answers = get_answers(&packet);
|
||||||
println!(
|
debug!(
|
||||||
"received packet on interface {} from {} questioning {:?} and answering {:?}",
|
"received packet on interface {} from {} questioning {:?} and answering {:?}",
|
||||||
iface, from, questions, answers
|
iface, from, questions, answers
|
||||||
);
|
);
|
||||||
|
@ -144,15 +147,14 @@ fn main() -> Result<()> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.remove(&iface);
|
out.remove(&iface);
|
||||||
println!("relaying packet to {:?}", out);
|
debug!("relaying packet to {:?}", out);
|
||||||
for i in &interfaces {
|
for i in &interfaces {
|
||||||
if out.contains(&i.iface.name) {
|
if out.contains(&i.iface.name) {
|
||||||
println!("sending packet on {}", i.iface.name);
|
debug!("sending packet on {}", i.iface.name);
|
||||||
let sock_addr = SocketAddrV4::new(ADDR, 5353).into();
|
let sock_addr = SocketAddrV4::new(ADDR, 5353).into();
|
||||||
i.socket.send_to(buf, &sock_addr)?;
|
i.socket.send_to(buf, &sock_addr)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// socket.send_to(&buf, addr);
|
|
||||||
}
|
}
|
||||||
Err(_) => todo!(),
|
Err(_) => todo!(),
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue