This commit is contained in:
lbl
2025-06-28 17:29:59 +08:00
parent b82276e6fa
commit 39c170892e
3 changed files with 23 additions and 28 deletions
+9 -11
View File
@@ -147,24 +147,22 @@ impl Config {
&LocalInterface::default(),
);
match address_result {
Ok(address) => {
match address_choose(address) {
Ok(resolved_address) => {
server_address = resolved_address;
}
Err(e) => {
log::error!("Failed to choose address: {}", e);
println!("Failed to choose address: {}", e);
}
Ok(address) => match address_choose(address) {
Ok(resolved_address) => {
server_address = resolved_address;
}
}
Err(e) => {
log::error!("Failed to choose address: {}", e);
println!("Failed to choose address: {}", e);
}
},
Err(e) => {
log::error!("DNS query failed: {}", e);
println!("DNS query failed: {}", e);
}
}
}
#[cfg(feature = "port_mapping")]
let port_mapping_list = crate::port_mapping::convert(port_mapping_list)?;
+6 -5
View File
@@ -390,11 +390,12 @@ impl<Call: VntCallback, Device: DeviceWrite> ServerPacketHandler<Call, Device> {
"device_fd == 0".into(),
));
} else {
let device = unsafe { tun_rs::SyncDevice::from_fd(device_fd as _) };
if let Err(e) = self.tun_device_helper.start(
Arc::new(device),
self.config_info.allow_wire_guard,
) {
let device =
unsafe { tun_rs::SyncDevice::from_fd(device_fd as _) };
if let Err(e) = self
.tun_device_helper
.start(Arc::new(device), self.config_info.allow_wire_guard)
{
self.callback.error(ErrorInfo::new_msg(
ErrorType::FailedToCrateDevice,
format!("{:?}", e),
+8 -12
View File
@@ -1,14 +1,14 @@
use crate::channel::socket::LocalInterface;
use anyhow::Context;
use dns_parser::{Builder, Packet, QueryClass, QueryType, RData, ResponseCode};
use http_req::request::{RedirectPolicy, Request};
use http_req::uri::Uri;
use std::cell::RefCell;
use std::collections::HashMap;
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, ToSocketAddrs, UdpSocket};
use std::str::FromStr;
use std::time::Duration;
use std::{io, thread};
use http_req::request::{Request, RedirectPolicy};
use http_req::uri::Uri;
use crate::channel::socket::LocalInterface;
use anyhow::Context;
use dns_parser::{Builder, Packet, QueryClass, QueryType, RData, ResponseCode};
thread_local! {
static HISTORY: RefCell<HashMap<SocketAddr,usize>> = RefCell::new(HashMap::new());
@@ -97,7 +97,6 @@ pub fn dns_query_all(
// 执行重定向检查
if let Some(stripped) = redirect_domain {
if let Some(redirected_url) = check_for_redirect(&stripped)? {
// 去掉 URL 开头的协议部分
let final_domain = remove_http_prefix(&redirected_url);
println!("Server Address: {}", final_domain);
@@ -214,8 +213,8 @@ fn parse_host_port(addr: &str) -> bool {
// 处理 IPv6 地址(格式为 [::1]:8080
if addr.starts_with('[') {
if let Some(idx) = addr.rfind(']') {
if let Some(port_idx) = addr[idx+1..].find(':') {
let port = &addr[idx+1+port_idx+1..]; // 提取端口部分
if let Some(port_idx) = addr[idx + 1..].find(':') {
let port = &addr[idx + 1 + port_idx + 1..]; // 提取端口部分
return !port.is_empty() && port.chars().all(|c| c.is_numeric());
}
}
@@ -248,9 +247,7 @@ fn check_for_redirect(domain: &String) -> anyhow::Result<Option<String>> {
// 解析 URL
let uri = match Uri::try_from(url.as_str()) {
Ok(u) => {
u
}
Ok(u) => u,
Err(e) => {
println!("解析地址失败: {}", e);
return Ok(last_redirect_url);
@@ -288,7 +285,6 @@ fn check_for_redirect(domain: &String) -> anyhow::Result<Option<String>> {
return Ok(last_redirect_url);
}
}
// 处理 200 响应
else if response.status_code().is_success() {
for line in body_str.lines() {