Create the internet for malware

This commit is contained in:
Michael Mikovsky
2025-06-11 12:28:55 -06:00
parent c5f6e2920c
commit c88b9623c6
11 changed files with 714 additions and 316 deletions
+55 -56
View File
@@ -1,72 +1,71 @@
use std::{io::Write, net::SocketAddr, thread};
use unshell_rs_lib::{
Error,
connection::{PacketError, Packets},
layers::build_client,
networkers::{ClientTrait, Connection, TCPClient},
connection::{ConnectionConfig, Node},
};
pub struct Cli;
impl Cli {
pub fn connect(addr: SocketAddr) -> Result<(), Error> {
let mut client = build_client(TCPClient::connect(&addr)?, vec![])?;
pub fn connect(
id: String,
clients: Vec<ConnectionConfig>,
listeners: Vec<ConnectionConfig>,
) -> Result<(), Error> {
// let mut client = build_client(TCPClient::connect(&addr)?, vec![])?;
let stdin = std::io::stdin();
let mut stdout = std::io::stdout();
// let stdin = std::io::stdin();
// let mut stdout = std::io::stdout();
let mut client_clone = client.try_clone()?;
thread::spawn(move || {
// let data = client.read()?;
Node::run_node(id, clients, listeners)
let packet = Packets::decode(client_clone.read().unwrap().as_str()).unwrap();
// let mut client_clone = client.try_clone()?;
// thread::spawn(move || {
// // let data = client.read()?;
match packet {
Packets::UpdateConnections(items) => {
for item in items {
println!("{}", item);
}
}
Packets::UpdateRoutes(items) => {
for item in items {
println!("{}", item);
}
}
_ => {
client_clone
.write(
Packets::Error(PacketError::UnsupportedType)
.encode()
.unwrap()
.as_str(),
)
.unwrap();
warn!("Invalid packet: {:?}", packet)
}
}
});
// let packet = Packets::decode(client_clone.read().unwrap().as_str()).unwrap();
loop {
print!("> ");
stdout.flush()?;
// match packet {
// Packets::UpdateConnections(items) => {
// for item in items {
// println!("{}", item);
// }
// }
// Packets::UpdateRoutes(items) => {
// for item in items {
// println!("{}", item);
// }
// }
// _ => {
// client_clone
// .write(
// Packets::Error(PacketError::UnsupportedType)
// .encode()
// .unwrap()
// .as_str(),
// )
// .unwrap();
// warn!("Invalid packet: {:?}", packet)
// }
// }
// });
let mut input = String::new();
stdin.read_line(&mut input)?;
let input = input.trim();
// loop {
// print!("> ");
// stdout.flush()?;
match input.split(" ").nth(0).unwrap() {
"clients" => {
client.write(Packets::GetConnections.encode()?.as_str())?;
}
"routes" => {
client.write(Packets::GetRoutes.encode()?.as_str())?;
}
_ => {
warn!("Invalid command!")
}
}
// let mut input = String::new();
// stdin.read_line(&mut input)?;
// let input = input.trim();
// client.write(input)?;
}
// match input.split(" ").nth(0).unwrap() {
// "ping" => {
// // client.write(Packets::GetConnections.encode()?.as_str())?;
// }
// _ => {
// warn!("Invalid command!")
// }
// }
// // client.write(input)?;
// }
}
}
View File
+2
View File
@@ -1,2 +1,4 @@
mod cli;
mod client_node;
pub use cli::Cli;
+1 -1
View File
@@ -1,4 +1,4 @@
#[macro_use]
// #[macro_use]
extern crate log;
mod client;
+86 -39
View File
@@ -8,10 +8,7 @@ use std::{
use clap::{Parser, Subcommand};
use log::error;
use unshell_rs::Cli;
use unshell_rs_lib::{
connection::{ConnectionConfig, Node},
layers::LayerConfig,
};
use unshell_rs_lib::connection::ConnectionConfig;
pub static DEFAULT_CONFIG_FILEPATH: &'static str = "server_config.json";
@@ -33,10 +30,16 @@ struct Args {
#[derive(Debug, Subcommand)]
enum Commands {
Start,
Middle,
End,
// Start,
// Middle,
// End,
//
Test1,
Test2,
Test3,
Test4,
Test5,
Test6,
// Run as a service, and potentially hosting a website
// #[command(arg_required_else_help = true)]
// Relay {
@@ -54,15 +57,15 @@ enum Commands {
// // #[arg(short, long, default_value_t = DEFAULT_SERVICE_PORT)]
// // web_port: u16,
// },
/// Connect to remote server
Connect {
/// Remote server to connect to
host: String,
// /// Connect to remote server
// Connect {
// /// Remote server to connect to
// host: String,
/// Port listen to for command clients
#[arg(short, long, default_value_t = DEFAULT_SERVICE_PORT)]
port: u16,
},
// /// Port listen to for command clients
// #[arg(short, long, default_value_t = DEFAULT_SERVICE_PORT)]
// port: u16,
// },
}
fn main() -> Result<(), Box<dyn Error>> {
@@ -80,43 +83,87 @@ fn main() -> Result<(), Box<dyn Error>> {
// error!("{}", e);
// }
// }
Commands::Start {} => Node::run_master(
ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13370")?,
layers: vec![],
},
Commands::Test1 {} => Cli::connect(
"Test1".to_string(),
vec![],
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13371")?,
layers: vec![],
}],
),
Commands::Middle {} => Node::run_node(
ConnectionConfig {
Commands::Test2 {} => Cli::connect(
"Test2".to_string(),
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13371")?,
layers: vec![],
},
}],
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13372")?,
layers: vec![LayerConfig::Base64],
layers: vec![],
}],
),
Commands::End {} => Node::run_node(
ConnectionConfig {
Commands::Test3 {} => Cli::connect(
"Test3".to_string(),
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13372")?,
layers: vec![LayerConfig::Base64],
},
layers: vec![],
}],
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13373")?,
layers: vec![],
}],
),
Commands::Test4 {} => Cli::connect(
"Test4".to_string(),
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13371")?,
layers: vec![],
}],
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13374")?,
layers: vec![],
}],
),
Commands::Test5 {} => Cli::connect(
"Test5".to_string(),
vec![
ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13372")?,
layers: vec![],
},
ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13374")?,
layers: vec![],
},
],
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13375")?,
layers: vec![],
}],
),
Commands::Test6 {} => Cli::connect(
"Test6".to_string(),
vec![
ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13373")?,
layers: vec![],
},
ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13375")?,
layers: vec![],
},
],
vec![],
),
Commands::Connect { host, port } => {
let addr = SocketAddr::from_str(format!("{}:{}", host, port).as_str());
Cli::connect(if let Ok(addr) = addr {
addr
} else {
error!("Could not parse address!");
return Ok(());
})
}
// Commands::Connect { host, port } => {
// let addr = SocketAddr::from_str(format!("{}:{}", host, port).as_str());
// Cli::connect(if let Ok(addr) = addr {
// addr
// } else {
// error!("Could not parse address!");
// return Ok(());
// })
// }
} {
error!("{}", e);
};