Get TCP forwarding working with itself and an external client.
As it happens, this is a pretty major change, because I misunderstood how the protocol actually works. Rather than having a single core command channel and then a series of offshoots, SOCKSv5 does a separate handshake for each individual command, and then uses the command stream as a data stream. So ... whoops. So now the `SOCKSv5Server` sits on a listener, instead, and farms each of the connections out to a task.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use async_socks5::network::Builtin;
|
||||
use async_socks5::server::{SOCKSv5Server, SecurityParameters};
|
||||
use async_std::io;
|
||||
use async_std::net::TcpListener;
|
||||
use futures::stream::StreamExt;
|
||||
use simplelog::{ColorChoice, CombinedLogger, Config, LevelFilter, TermLogger, TerminalMode};
|
||||
|
||||
#[async_std::main]
|
||||
@@ -14,17 +14,23 @@ async fn main() -> Result<(), io::Error> {
|
||||
)])
|
||||
.expect("Couldn't initialize logger");
|
||||
|
||||
let main_listener = TcpListener::bind("127.0.0.1:0").await?;
|
||||
let params = SecurityParameters {
|
||||
allow_unauthenticated: false,
|
||||
allow_unauthenticated: true,
|
||||
allow_connection: None,
|
||||
check_password: None,
|
||||
connect_tls: None,
|
||||
};
|
||||
|
||||
let server = SOCKSv5Server::new(Builtin::new(), params, main_listener);
|
||||
let mut server = SOCKSv5Server::new(Builtin::new(), params);
|
||||
server.start("127.0.0.1", 9999).await?;
|
||||
|
||||
server.run().await?;
|
||||
let mut responses = Box::pin(server.subserver_results());
|
||||
|
||||
while let Some(response) = responses.next().await {
|
||||
if let Err(e) = response {
|
||||
println!("Server failed with: {}", e);
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user