Browse Source

Upgrade dependencies and fix hickory-proto 0.26 API usage

pull/247/head
ssrlive 1 month ago
parent
commit
037b634ada
  1. 62
      Cargo.toml
  2. 21
      src/dns.rs

62
Cargo.toml

@ -27,57 +27,57 @@ default = ["udpgw"]
udpgw = []
[dependencies]
async-trait = "0.1"
base64easy = "0.1"
chrono = "0.4"
clap = { version = "4", features = ["derive", "wrap_help", "color"] }
ctrlc2 = { version = "3.6.5", features = ["async", "termination"] }
digest_auth = "0.3"
dotenvy = "0.15"
env_logger = "0.11"
hashlink = "0.11"
hickory-proto = "0.25"
httparse = "1"
ipstack = { version = "1" }
log = { version = "0.4", features = ["std"] }
mimalloc = { version = "0.1", default-features = false, optional = true }
percent-encoding = "2"
serde = { version = "1", features = ["derive"] }
async-trait = "0.1.89"
base64easy = "0.1.7"
chrono = "0.4.44"
clap = { version = "4.6.1", features = ["derive", "wrap_help", "color"] }
ctrlc2 = { version = "3.7.3", features = ["async", "termination"] }
digest_auth = "0.3.1"
dotenvy = "0.15.7"
env_logger = "0.11.10"
hashlink = "0.11.0"
hickory-proto = "0.26.0"
httparse = "1.10.1"
ipstack = { version = "1.0.0" }
log = { version = "0.4.29", features = ["std"] }
mimalloc = { version = "0.1.50", default-features = false, optional = true }
percent-encoding = "2.3.2"
serde = { version = "1.0.228", features = ["derive"] }
shlex = "1.3.0"
socks5-impl = { version = "0.8", default-features = false, features = [
socks5-impl = { version = "0.8.2", default-features = false, features = [
"tokio",
"serde",
] }
thiserror = "2"
tokio = { version = "1", features = ["full"] }
tokio-util = "0.7"
tproxy-config = { version = "^7.0.2", default-features = false }
tun = { version = "0.8", features = ["async"] }
thiserror = "2.0.18"
tokio = { version = "1.52.1", features = ["full"] }
tokio-util = "0.7.18"
tproxy-config = { version = "^7.0.7", default-features = false }
tun = { version = "0.8.7", features = ["async"] }
udp-stream = { version = "0.0.12", default-features = false }
unicase = "2"
url = "2"
unicase = "2.9.0"
url = "2.5.8"
[target.'cfg(target_os="android")'.dependencies]
android_logger = "0.15"
jni = { version = "0.22.3", default-features = false }
android_logger = "0.15.1"
jni = { version = "0.22.4", default-features = false }
[target.'cfg(target_os="linux")'.dependencies]
bincode = "2"
[target.'cfg(target_os="windows")'.dependencies]
windows-service = "0.8"
windows-service = "0.8.0"
[target.'cfg(unix)'.dependencies]
daemonize = "0.5"
nix = { version = "0.31", default-features = false, features = [
daemonize = "0.5.0"
nix = { version = "0.31.2", default-features = false, features = [
"fs",
"socket",
"uio",
] }
[build-dependencies]
chrono = "0.4"
serde_json = "1"
chrono = "0.4.44"
serde_json = "1.0.149"
# [profile.release]
# strip = "symbols"

21
src/dns.rs

@ -8,30 +8,31 @@ use hickory_proto::{
use std::{net::IpAddr, str::FromStr};
pub fn build_dns_response(mut request: Message, domain: &str, ip: IpAddr, ttl: u32) -> Result<Message, String> {
let name = Name::from_str(domain).map_err(|e| e.to_string())?;
let record = match ip {
IpAddr::V4(ip) => Record::from_rdata(Name::from_str(domain)?, ttl, RData::A(A(ip))),
IpAddr::V6(ip) => Record::from_rdata(Name::from_str(domain)?, ttl, RData::AAAA(AAAA(ip))),
IpAddr::V4(ip) => Record::from_rdata(name.clone(), ttl, RData::A(A(ip))),
IpAddr::V6(ip) => Record::from_rdata(name, ttl, RData::AAAA(AAAA(ip))),
};
// We must indicate that this message is a response. Otherwise, implementations may not
// recognize it.
request.set_message_type(MessageType::Response);
request.metadata.message_type = MessageType::Response;
request.add_answer(record);
Ok(request)
}
pub fn remove_ipv6_entries(message: &mut Message) {
message.answers_mut().retain(|answer| !matches!(answer.data(), RData::AAAA(_)));
message.answers.retain(|answer| !matches!(&answer.data, RData::AAAA(_)));
}
pub fn extract_ipaddr_from_dns_message(message: &Message) -> Result<IpAddr, String> {
if message.response_code() != ResponseCode::NoError {
return Err(format!("{:?}", message.response_code()));
if message.metadata.response_code != ResponseCode::NoError {
return Err(format!("{:?}", message.metadata.response_code));
}
let mut cname = None;
for answer in message.answers() {
match answer.data() {
for answer in &message.answers {
match &answer.data {
RData::A(addr) => {
return Ok(IpAddr::V4((*addr).into()));
}
@ -47,11 +48,11 @@ pub fn extract_ipaddr_from_dns_message(message: &Message) -> Result<IpAddr, Stri
if let Some(cname) = cname {
return Err(cname);
}
Err(format!("{:?}", message.answers()))
Err(format!("{:?}", message.answers))
}
pub fn extract_domain_from_dns_message(message: &Message) -> Result<String, String> {
let query = message.queries().first().ok_or("DnsRequest no query body")?;
let query = message.queries.first().ok_or("DnsRequest no query body")?;
let name = query.name().to_string();
Ok(name)
}

Loading…
Cancel
Save