mirror of
https://github.com/tun2proxy/tun2proxy.git
synced 2025-04-23 07:19:08 +00:00
upgrade clap module
This commit is contained in:
parent
25d775af47
commit
973f7225e8
3 changed files with 39 additions and 57 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
|
.*
|
||||||
/target
|
/target
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
|
|
|
@ -5,8 +5,8 @@ name = "tun2proxy"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "3.2"
|
clap = { version = "4.1", features = ["derive"] }
|
||||||
mio = { version = "0.8", features = ["os-poll", "net", "os-ext"] }
|
mio = { version = "0.8", features = ["os-poll", "net", "os-ext"] }
|
||||||
smoltcp = { version = "0.8", features = ["std"] }
|
smoltcp = { version = "0.8", features = ["std"] }
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
env_logger = "0.9"
|
env_logger = "0.10"
|
||||||
|
|
91
src/main.rs
91
src/main.rs
|
@ -5,68 +5,49 @@ mod virtdevice;
|
||||||
|
|
||||||
use crate::http::HttpManager;
|
use crate::http::HttpManager;
|
||||||
use crate::tun2proxy::TunToProxy;
|
use crate::tun2proxy::TunToProxy;
|
||||||
|
use clap::{Parser, ValueEnum};
|
||||||
use env_logger::Env;
|
use env_logger::Env;
|
||||||
use socks5::*;
|
use socks5::*;
|
||||||
use std::net::ToSocketAddrs;
|
use std::net::SocketAddr;
|
||||||
|
|
||||||
|
/// Tunnel interface to proxy
|
||||||
|
#[derive(Parser)]
|
||||||
|
#[command(author, version, about = "Tunnel interface to proxy.", long_about = None)]
|
||||||
|
struct Args {
|
||||||
|
/// Name of the tun interface
|
||||||
|
#[arg(short, long)]
|
||||||
|
tun: String,
|
||||||
|
|
||||||
|
/// What proxy type to run
|
||||||
|
#[arg(short, long = "proxy", value_enum)]
|
||||||
|
proxy_type: ProxyType,
|
||||||
|
|
||||||
|
/// Server address with format IP:PORT
|
||||||
|
#[clap(short, long)]
|
||||||
|
addr: SocketAddr,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
|
||||||
|
enum ProxyType {
|
||||||
|
/// SOCKS5 server to use
|
||||||
|
Socks5,
|
||||||
|
/// HTTP server to use
|
||||||
|
Http,
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
env_logger::Builder::from_env(Env::default().default_filter_or("info")).init();
|
env_logger::Builder::from_env(Env::default().default_filter_or("info")).init();
|
||||||
let matches = clap::App::new(env!("CARGO_PKG_NAME"))
|
let args = Args::parse();
|
||||||
.version(env!("CARGO_PKG_VERSION"))
|
|
||||||
.about("Tunnel interface to proxy.")
|
|
||||||
.arg(
|
|
||||||
clap::Arg::with_name("tun")
|
|
||||||
.short('t')
|
|
||||||
.long("tun")
|
|
||||||
.value_name("TUN")
|
|
||||||
.help("Name of the tun interface")
|
|
||||||
.required(true)
|
|
||||||
.takes_value(true),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
clap::Arg::with_name("socks5_server")
|
|
||||||
.help("SOCKS5 server to use")
|
|
||||||
.short('s')
|
|
||||||
.long("socks5")
|
|
||||||
.value_name("IP:PORT"),
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
clap::Arg::with_name("http_server")
|
|
||||||
.help("HTTP server to use")
|
|
||||||
.short('h')
|
|
||||||
.long("http")
|
|
||||||
.value_name("IP:PORT"),
|
|
||||||
)
|
|
||||||
.get_matches();
|
|
||||||
|
|
||||||
if matches.value_of("socks5_server").is_some() && matches.value_of("http_server").is_some()
|
let mut ttp = TunToProxy::new(&args.tun);
|
||||||
|| matches.value_of("socks5_server").is_none() && matches.value_of("http_server").is_none()
|
match args.proxy_type {
|
||||||
{
|
ProxyType::Socks5 => {
|
||||||
eprintln!("You need to specify exactly one server.");
|
log::info!("SOCKS5 server: {}", args.addr);
|
||||||
return;
|
ttp.add_connection_manager(Box::new(Socks5Manager::new(args.addr)));
|
||||||
}
|
}
|
||||||
|
ProxyType::Http => {
|
||||||
let tun_name = matches.value_of("tun").unwrap();
|
log::info!("HTTP server: {}", args.addr);
|
||||||
let mut ttp = TunToProxy::new(tun_name);
|
ttp.add_connection_manager(Box::new(HttpManager::new(args.addr)));
|
||||||
if let Some(addr) = matches.value_of("socks5_server") {
|
|
||||||
if let Ok(mut servers) = addr.to_socket_addrs() {
|
|
||||||
let server = servers.next().unwrap();
|
|
||||||
println!("SOCKS5 server: {}", server);
|
|
||||||
ttp.add_connection_manager(Box::new(Socks5Manager::new(server)));
|
|
||||||
} else {
|
|
||||||
eprintln!("Invalid server address.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(addr) = matches.value_of("http_server") {
|
|
||||||
if let Ok(mut servers) = addr.to_socket_addrs() {
|
|
||||||
let server = servers.next().unwrap();
|
|
||||||
println!("HTTP server: {}", server);
|
|
||||||
ttp.add_connection_manager(Box::new(HttpManager::new(server)));
|
|
||||||
} else {
|
|
||||||
eprintln!("Invalid server address.");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ttp.run();
|
ttp.run();
|
||||||
|
|
Loading…
Add table
Reference in a new issue