only tcp and udp local servers are unwritted
This commit is contained in:
parent
270ef5cf84
commit
c0658239a7
5 changed files with 98 additions and 7 deletions
50
Cargo.lock
generated
50
Cargo.lock
generated
|
@ -76,6 +76,23 @@ dependencies = [
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anyhow"
|
||||||
|
version = "1.0.98"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "async-trait"
|
||||||
|
version = "0.1.88"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aws-lc-rs"
|
name = "aws-lc-rs"
|
||||||
version = "1.13.1"
|
version = "1.13.1"
|
||||||
|
@ -377,6 +394,21 @@ dependencies = [
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fast-socks5"
|
||||||
|
version = "1.0.0-rc.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7b243b80e73f3596fc64089c4c82ad7196d502c513127c5c8987337d51a5399d"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"async-trait",
|
||||||
|
"log",
|
||||||
|
"socket2 0.5.10",
|
||||||
|
"thiserror 1.0.69",
|
||||||
|
"tokio",
|
||||||
|
"tokio-stream",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fastbloom"
|
name = "fastbloom"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
|
@ -395,6 +427,12 @@ version = "1.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
|
checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-core"
|
||||||
|
version = "0.3.31"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "generic-array"
|
name = "generic-array"
|
||||||
version = "0.14.7"
|
version = "0.14.7"
|
||||||
|
@ -713,6 +751,7 @@ version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bcrypt",
|
"bcrypt",
|
||||||
"clap",
|
"clap",
|
||||||
|
"fast-socks5",
|
||||||
"quinn",
|
"quinn",
|
||||||
"rcgen",
|
"rcgen",
|
||||||
"rustls",
|
"rustls",
|
||||||
|
@ -1218,6 +1257,17 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-stream"
|
||||||
|
version = "0.1.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
|
||||||
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tracing"
|
name = "tracing"
|
||||||
version = "0.1.41"
|
version = "0.1.41"
|
||||||
|
|
|
@ -6,6 +6,7 @@ edition = "2024"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bcrypt = "0.17.0"
|
bcrypt = "0.17.0"
|
||||||
clap = { version = "4.5.41", features = ["derive"] }
|
clap = { version = "4.5.41", features = ["derive"] }
|
||||||
|
fast-socks5 = "1.0.0-rc.0"
|
||||||
quinn = { version = "0.11.8", features = ["rustls"] }
|
quinn = { version = "0.11.8", features = ["rustls"] }
|
||||||
rcgen = "0.14.3"
|
rcgen = "0.14.3"
|
||||||
rustls = { version = "0.23.30", features = ["ring"] }
|
rustls = { version = "0.23.30", features = ["ring"] }
|
||||||
|
|
|
@ -6,6 +6,7 @@ use rustls::{
|
||||||
client::danger::{HandshakeSignatureValid, ServerCertVerified, ServerCertVerifier},
|
client::danger::{HandshakeSignatureValid, ServerCertVerified, ServerCertVerifier},
|
||||||
pki_types::{CertificateDer, ServerName, UnixTime},
|
pki_types::{CertificateDer, ServerName, UnixTime},
|
||||||
};
|
};
|
||||||
|
use tokio::net::UdpSocket;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct NoCertVerify;
|
pub struct NoCertVerify;
|
||||||
|
@ -119,3 +120,19 @@ pub async fn close_request(
|
||||||
recv.stop(0u32.into())?;
|
recv.stop(0u32.into())?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn run_udp_socks_server(
|
||||||
|
local: SocketAddr,
|
||||||
|
proxy: SocketAddr,
|
||||||
|
password: &str,
|
||||||
|
) -> Result<(), Box<dyn Error>> {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn run_tcp_socks_server(
|
||||||
|
local: SocketAddr,
|
||||||
|
proxy: SocketAddr,
|
||||||
|
password: &str,
|
||||||
|
) -> Result<(), Box<dyn Error>> {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
36
src/main.rs
36
src/main.rs
|
@ -1,4 +1,7 @@
|
||||||
|
use std::net::SocketAddr;
|
||||||
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
use client::{run_tcp_socks_server, run_udp_socks_server};
|
||||||
use server::run_server;
|
use server::run_server;
|
||||||
|
|
||||||
mod client;
|
mod client;
|
||||||
|
@ -8,15 +11,15 @@ mod server;
|
||||||
#[derive(Parser, Debug)]
|
#[derive(Parser, Debug)]
|
||||||
#[command(version, about, long_about = None)]
|
#[command(version, about, long_about = None)]
|
||||||
struct Args {
|
struct Args {
|
||||||
/// Connect to proxy
|
/// Connect to quicproxy server ()
|
||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
connect: Option<String>,
|
connect: Option<String>,
|
||||||
|
|
||||||
/// Bind proxy
|
/// Bind proxy (socks if connect arg is here or quicproxy otherwise)
|
||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
bind: Option<String>,
|
bind: Option<String>,
|
||||||
|
|
||||||
/// Password
|
/// Password for connections
|
||||||
#[arg(short, long, default_value = "nope")]
|
#[arg(short, long, default_value = "nope")]
|
||||||
password: String,
|
password: String,
|
||||||
}
|
}
|
||||||
|
@ -25,13 +28,34 @@ struct Args {
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let args = Args::parse();
|
let args = Args::parse();
|
||||||
|
|
||||||
if let Some(host) = args.bind {
|
if let Some(host) = args.connect {
|
||||||
|
let local: SocketAddr = args.bind.unwrap_or("0.0.0.0:1080".to_string())
|
||||||
|
.parse().expect("error parsing local host");
|
||||||
|
|
||||||
|
tokio::spawn({
|
||||||
|
let host = host.clone();
|
||||||
|
let local = local.clone();
|
||||||
|
let password = args.password.clone();
|
||||||
|
|
||||||
|
async move {
|
||||||
|
run_udp_socks_server(
|
||||||
|
local,
|
||||||
|
host.parse().expect("error parsing host"),
|
||||||
|
&password
|
||||||
|
).await.expect("error running local udp server");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
run_tcp_socks_server(
|
||||||
|
local,
|
||||||
|
host.parse().expect("error parsing host"),
|
||||||
|
&args.password
|
||||||
|
).await.expect("error running local tcp server");
|
||||||
|
} else if let Some(host) = args.bind {
|
||||||
run_server(
|
run_server(
|
||||||
host.parse().expect("error parsing host"),
|
host.parse().expect("error parsing host"),
|
||||||
&args.password
|
&args.password
|
||||||
).await.expect("error running server");
|
).await.expect("error running server");
|
||||||
} else if let Some(host) = args.connect {
|
|
||||||
todo!()
|
|
||||||
} else {
|
} else {
|
||||||
println!("choose either --connect or --bind")
|
println!("choose either --connect or --bind")
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,7 +183,6 @@ async fn handle_request(
|
||||||
});
|
});
|
||||||
|
|
||||||
tokio::spawn({
|
tokio::spawn({
|
||||||
let stream = stream.clone();
|
|
||||||
async move {
|
async move {
|
||||||
loop {
|
loop {
|
||||||
let mut buf = [0; 1024];
|
let mut buf = [0; 1024];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue