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"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"bytes",
|
||||
"io-uring",
|
||||
"libc",
|
||||
"mio",
|
||||
|
|
|
@ -9,4 +9,4 @@ clap = { version = "4.5.41", features = ["derive"] }
|
|||
quinn = { version = "0.11.8", features = ["rustls"] }
|
||||
rcgen = "0.14.3"
|
||||
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 rustls::pki_types::PrivatePkcs8KeyDer;
|
||||
use tokio::{io::{AsyncReadExt, AsyncWriteExt}, net::TcpStream};
|
||||
|
||||
pub async fn run_server(host: SocketAddr, password: &str) -> Result<(), Box<dyn Error>> {
|
||||
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(
|
||||
stable_id: usize,
|
||||
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(())
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue