Changes to be committed:
modified: src/main.rs modified: src/tcp_client.rs modified: src/tcp_server.rs
This commit is contained in:
parent
fa32e776f2
commit
468701af5a
13
src/main.rs
13
src/main.rs
@ -52,12 +52,23 @@ async fn main() {
|
|||||||
.value_name("IP")
|
.value_name("IP")
|
||||||
.help("The IP address of the VPN server to connect to (client mode only)")
|
.help("The IP address of the VPN server to connect to (client mode only)")
|
||||||
.takes_value(true))
|
.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();
|
.get_matches();
|
||||||
|
|
||||||
let is_server_mode = matches.value_of("mode").unwrap() == "server";
|
let is_server_mode = matches.value_of("mode").unwrap() == "server";
|
||||||
// "192.168.0.4:8879"
|
// "192.168.0.4:8879"
|
||||||
if is_server_mode {
|
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 {
|
} else {
|
||||||
if let Some(vpn_server_ip) = matches.value_of("vpn-server") {
|
if let Some(vpn_server_ip) = matches.value_of("vpn-server") {
|
||||||
let server_address = format!("{}:8879", vpn_server_ip);
|
let server_address = format!("{}:8879", vpn_server_ip);
|
||||||
|
@ -103,9 +103,11 @@ pub async fn client_mode(remote_addr: String) {
|
|||||||
loop {
|
loop {
|
||||||
if let Ok(n) = sock_reader.read(&mut buf).await {
|
if let Ok(n) = sock_reader.read(&mut buf).await {
|
||||||
//info!("Catch from socket: {:?}", &buf[..n]);
|
//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; }
|
//if vpn_packet.start != &HEADER || vpn_packet.end != &TAIL { error!("Bad packet"); continue; }
|
||||||
tx.send(vpn_packet.data).unwrap();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -12,7 +12,7 @@ use tokio::io::AsyncReadExt;
|
|||||||
|
|
||||||
use crate::{VpnPacket, HEADER, TAIL};
|
use crate::{VpnPacket, HEADER, TAIL};
|
||||||
|
|
||||||
pub async fn server_mode() {
|
pub async fn server_mode(bind_addr: String) {
|
||||||
info!("Starting server...");
|
info!("Starting server...");
|
||||||
|
|
||||||
let mut config = tun2::Configuration::default();
|
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 {
|
loop {
|
||||||
let (mut socket, _) = listener.accept().await.unwrap();
|
let (mut socket, _) = listener.accept().await.unwrap();
|
||||||
@ -58,7 +58,7 @@ pub async fn server_mode() {
|
|||||||
let vpn_packet = VpnPacket::init(bytes);
|
let vpn_packet = VpnPacket::init(bytes);
|
||||||
let serialized_data = bincode::serialize(&vpn_packet).unwrap();
|
let serialized_data = bincode::serialize(&vpn_packet).unwrap();
|
||||||
sock_writer.write_all(&serialized_data).await.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];
|
let mut buf = vec![0; 4096];
|
||||||
loop {
|
loop {
|
||||||
if let Ok(n) = sock_reader.read(&mut buf).await {
|
if let Ok(n) = sock_reader.read(&mut buf).await {
|
||||||
info!("Catched from sock: {:?}", &buf[..n]);
|
//info!("Catched from sock: {:?}", &buf[..n]);
|
||||||
let vpn_packet: VpnPacket = bincode::deserialize(&buf[..n]).unwrap();
|
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; }
|
//if vpn_packet.start != &HEADER || vpn_packet.end != &TAIL { error!("Bad packet"); continue; }
|
||||||
thread_tx.send(vpn_packet.data).unwrap();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user