Comparer les révisions
2 Révisions
a6efbed3b1
...
4b2e92d041
Auteur | SHA1 | Date |
---|---|---|
lastlink | 4b2e92d041 | |
lastlink | a2b239d3d4 |
|
@ -10,3 +10,4 @@ Cargo.lock
|
|||
# These are backup files generated by rustfmt
|
||||
**/*.rs.bk
|
||||
|
||||
grrs
|
|
@ -4,5 +4,4 @@ version = "0.1.0"
|
|||
authors = ["lastlink <theefunk@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
clap = "*"
|
||||
[dependencies]
|
13
README.md
13
README.md
|
@ -1,3 +1,14 @@
|
|||
# sclient.rust
|
||||
|
||||
compare https://git.rootprojects.org/root/sclient.go/src/branch/master
|
||||
compare https://git.rootprojects.org/root/sclient.go/src/branch/master
|
||||
|
||||
## getting started
|
||||
|
||||
* run directly
|
||||
* `cargo run -- -servername example -k example.com 3000`
|
||||
* `cargo run test`
|
||||
* `cargo run -- --help`
|
||||
* build
|
||||
* `cargo build`
|
||||
* `target/debug/sclient --help` run from build
|
||||
* `.\target\debug\sclient.exe --help` windows cmd
|
102
src/main.rs
102
src/main.rs
|
@ -1,43 +1,69 @@
|
|||
use clap::*;
|
||||
fn main() {
|
||||
let app = App::new("sclient")
|
||||
.arg(
|
||||
Arg::with_name("pattern")
|
||||
.long("pattern")
|
||||
.takes_value(true)
|
||||
.required(true),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("servername")
|
||||
.long("servername")
|
||||
.takes_value(true)
|
||||
.required(true),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("k")
|
||||
.short("k")
|
||||
.takes_value(true) // remove if t/f
|
||||
.required(true),
|
||||
use std::env;
|
||||
|
||||
fn help() {
|
||||
println!(
|
||||
"Usage: sclient [--servername <string>] [-k | --insecure] [ssh|rsync] <remote> <port>
|
||||
ex: sclient whatever.com 3000
|
||||
(whatever.com:443 localhost:3000)
|
||||
ex: sclient whatever.com:4080 0.0.0.0:3000"
|
||||
);
|
||||
// println!("Hello, world!");
|
||||
//
|
||||
let matches = app.get_matches();
|
||||
println!("{}", matches.value_of("pattern").unwrap());
|
||||
}
|
||||
|
||||
// cargo run test
|
||||
// cargo build
|
||||
// cargo run -- --help
|
||||
// target/debug/sclient --help
|
||||
// target/debug/sclient --pattern=kevin
|
||||
fn main() {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
|
||||
struct Cli {
|
||||
pattern: String,
|
||||
path: std::path::PathBuf,
|
||||
if args
|
||||
.iter()
|
||||
.any(|element| element == "-h" || element == "--help")
|
||||
{
|
||||
help();
|
||||
return;
|
||||
}
|
||||
|
||||
let mut flags = Flags::default();
|
||||
|
||||
// try!()
|
||||
if args
|
||||
.iter()
|
||||
.any(|element| element == "-k" || element == "--insecure")
|
||||
{
|
||||
flags.insecure = true;
|
||||
}
|
||||
|
||||
let serverNameArg = args
|
||||
.iter()
|
||||
.enumerate()
|
||||
.find(|(index, element)| *element == "-servername");
|
||||
|
||||
if let Some((index, _)) = serverNameArg {
|
||||
flags.servername = args[index + 1].clone();
|
||||
}
|
||||
|
||||
// get port
|
||||
let maybe_port = args[args.len() - 1].parse::<i32>();
|
||||
if maybe_port.is_ok() {
|
||||
// pull out of maybe option error
|
||||
flags.port = maybe_port.unwrap();
|
||||
} else {
|
||||
help();
|
||||
print!("<port> needs to be an integer");
|
||||
}
|
||||
// get remote
|
||||
flags.remote = args[args.len() - 2].clone();
|
||||
|
||||
if args[args.len() - 3] == "ssh" || args[args.len() - 3] == "rsync" {
|
||||
flags.custom = args[args.len() - 3].clone();
|
||||
}
|
||||
|
||||
dbg!(flags);
|
||||
// tls port forward functionality
|
||||
}
|
||||
|
||||
#[derive(Default, Debug)]
|
||||
struct Flags {
|
||||
insecure: bool,
|
||||
servername: String,
|
||||
remote: String,
|
||||
custom: String,
|
||||
port: i32,
|
||||
}
|
||||
// insecure := flag.Bool("k", false, "ignore bad TLS/SSL/HTTPS certificates")
|
||||
// servername := flag.String("servername", "", "specify a servername different from <remote> (to disable SNI use an IP as <remote> and do use this option)")
|
||||
// flag.BoolVar(insecure, "insecure", false, "ignore bad TLS/SSL/HTTPS certificates")
|
||||
// flag.Parse()
|
||||
// remotestr := flag.Arg(0)
|
||||
// localstr := flag.Arg(1)
|
||||
|
|
Chargement…
Référencer dans un nouveau ticket