completed server half
This commit is contained in:
parent
4903ac3ab1
commit
95c1765c43
3 changed files with 43 additions and 3 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1196,6 +1196,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
|
checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"backtrace",
|
"backtrace",
|
||||||
|
"bytes",
|
||||||
"io-uring",
|
"io-uring",
|
||||||
"libc",
|
"libc",
|
||||||
"mio",
|
"mio",
|
||||||
|
|
|
@ -9,4 +9,4 @@ clap = { version = "4.5.41", features = ["derive"] }
|
||||||
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"] }
|
||||||
tokio = { version = "1.47.0", features = ["rt", "macros", "rt-multi-thread"] }
|
tokio = { version = "1.47.0", features = ["rt", "macros", "rt-multi-thread", "net", "io-util"] }
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use std::{error::Error, net::SocketAddr, str, sync::Arc};
|
use std::{error::Error, net::{IpAddr, SocketAddr}, str, sync::Arc};
|
||||||
use quinn::crypto::rustls::QuicServerConfig;
|
use quinn::crypto::rustls::QuicServerConfig;
|
||||||
use rustls::pki_types::PrivatePkcs8KeyDer;
|
use rustls::pki_types::PrivatePkcs8KeyDer;
|
||||||
|
use tokio::{io::{AsyncReadExt, AsyncWriteExt}, net::TcpStream};
|
||||||
|
|
||||||
pub async fn run_server(host: SocketAddr, password: &str) -> Result<(), Box<dyn Error>> {
|
pub async fn run_server(host: SocketAddr, password: &str) -> Result<(), Box<dyn Error>> {
|
||||||
let cert = rcgen::generate_simple_self_signed(vec![
|
let cert = rcgen::generate_simple_self_signed(vec![
|
||||||
|
@ -69,6 +70,13 @@ async fn handle_connection(conn: quinn::Incoming, password: String) -> Result<()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_local_address(socket_addr: &SocketAddr) -> bool {
|
||||||
|
match socket_addr.ip() {
|
||||||
|
IpAddr::V4(ip) => ip.is_loopback() || ip.is_private(),
|
||||||
|
IpAddr::V6(ip) => ip.is_loopback() || ip.is_unique_local(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async fn handle_request(
|
async fn handle_request(
|
||||||
stable_id: usize,
|
stable_id: usize,
|
||||||
mut send: quinn::SendStream,
|
mut send: quinn::SendStream,
|
||||||
|
@ -130,8 +138,39 @@ async fn handle_request(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if stack != 4 {
|
||||||
|
return Err("bad request very bad".into())
|
||||||
|
}
|
||||||
|
|
||||||
todo!();
|
let remote: SocketAddr = remote.parse()?;
|
||||||
|
|
||||||
|
if is_local_address(&remote) {
|
||||||
|
return Err("backdoor attack!!! absolutely not good!!!!!!".into())
|
||||||
|
}
|
||||||
|
|
||||||
|
let stream = TcpStream::connect(remote).await?;
|
||||||
|
let (mut remote_recv, mut remote_send) = stream.into_split();
|
||||||
|
|
||||||
|
remote_send.write_all(&mut body_data).await?;
|
||||||
|
|
||||||
|
tokio::spawn(async move {
|
||||||
|
loop {
|
||||||
|
let mut buf = [0; 1024];
|
||||||
|
let Ok(len) = remote_recv.read(&mut buf).await else { break; };
|
||||||
|
if len == 0 { break; };
|
||||||
|
let Ok(_) = send.write_all(&buf[..len]).await else { break; };
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
tokio::spawn(async move {
|
||||||
|
loop {
|
||||||
|
let mut buf = [0; 1024];
|
||||||
|
let Ok(Some(len)) = recv.read(&mut buf).await else { break; };
|
||||||
|
if len == 0 { break; };
|
||||||
|
let Ok(_) = remote_send.write_all(&buf[..len]).await else { break; };
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue