Changes to be committed:

modified:   src/main.rs
	modified:   src/tcp_client.rs
	modified:   src/tcp_server.rs
This commit is contained in:
Michael Wain 2024-08-12 19:09:50 +03:00
parent fa32e776f2
commit 468701af5a
3 changed files with 24 additions and 9 deletions

View File

@ -52,12 +52,23 @@ async fn main() {
.value_name("IP")
.help("The IP address of the VPN server to connect to (client mode only)")
.takes_value(true))
.arg(Arg::with_name("bind-to")
.long("bind-to")
.value_name("IP")
.help("The IP address of the VPN server to bind to (server mode only)")
.takes_value(true))
.get_matches();
let is_server_mode = matches.value_of("mode").unwrap() == "server";
// "192.168.0.4:8879"
if is_server_mode {
tcp_server::server_mode().await;
if let Some(vpn_server_ip) = matches.value_of("bind-to") {
let server_address = format!("{}:8879", vpn_server_ip);
tcp_server::server_mode(server_address).await;
} else {
eprintln!("Error: For server mode, you shall provide the '--bind-to' argument.");
}
} else {
if let Some(vpn_server_ip) = matches.value_of("vpn-server") {
let server_address = format!("{}:8879", vpn_server_ip);

View File

@ -103,9 +103,11 @@ pub async fn client_mode(remote_addr: String) {
loop {
if let Ok(n) = sock_reader.read(&mut buf).await {
//info!("Catch from socket: {:?}", &buf[..n]);
let vpn_packet: VpnPacket = bincode::deserialize(&buf[..n]).unwrap();
match bincode::deserialize::<VpnPacket>(&buf[..n]) {
Ok(vpn_packet) => tx.send(vpn_packet.data).unwrap(),
Err(error) => error!("Deserialization error {:?}", error),
};
//if vpn_packet.start != &HEADER || vpn_packet.end != &TAIL { error!("Bad packet"); continue; }
tx.send(vpn_packet.data).unwrap();
}
}
});

View File

@ -12,7 +12,7 @@ use tokio::io::AsyncReadExt;
use crate::{VpnPacket, HEADER, TAIL};
pub async fn server_mode() {
pub async fn server_mode(bind_addr: String) {
info!("Starting server...");
let mut config = tun2::Configuration::default();
@ -44,7 +44,7 @@ pub async fn server_mode() {
}
});
let listener = TcpListener::bind("192.168.0.5:8879".parse::<SocketAddr>().unwrap()).await.unwrap();
let listener = TcpListener::bind(&bind_addr).await.unwrap();
loop {
let (mut socket, _) = listener.accept().await.unwrap();
@ -58,7 +58,7 @@ pub async fn server_mode() {
let vpn_packet = VpnPacket::init(bytes);
let serialized_data = bincode::serialize(&vpn_packet).unwrap();
sock_writer.write_all(&serialized_data).await.unwrap();
info!("Wrote to sock: {:?}", serialized_data);
//info!("Wrote to sock: {:?}", serialized_data);
}
}
});
@ -67,10 +67,12 @@ pub async fn server_mode() {
let mut buf = vec![0; 4096];
loop {
if let Ok(n) = sock_reader.read(&mut buf).await {
info!("Catched from sock: {:?}", &buf[..n]);
let vpn_packet: VpnPacket = bincode::deserialize(&buf[..n]).unwrap();
//info!("Catched from sock: {:?}", &buf[..n]);
match bincode::deserialize::<VpnPacket>(&buf[..n]) {
Ok(vpn_packet) => thread_tx.send(vpn_packet.data).unwrap(),
Err(error) => error!("Deserializing error {:?}", error),
};
//if vpn_packet.start != &HEADER || vpn_packet.end != &TAIL { error!("Bad packet"); continue; }
thread_tx.send(vpn_packet.data).unwrap();
}
}
});