diff --git a/phantun/src/bin/client.rs b/phantun/src/bin/client.rs index 6bb1f14..360101e 100644 --- a/phantun/src/bin/client.rs +++ b/phantun/src/bin/client.rs @@ -1,4 +1,4 @@ -use clap::{crate_version, Arg, Command}; +use clap::{crate_version, Arg, ArgAction, Command}; use fake_tcp::packet::MAX_PACKET_LEN; use fake_tcp::{Socket, Stack}; use log::{debug, error, info}; @@ -29,7 +29,6 @@ async fn main() -> io::Result<()> { .required(true) .value_name("IP:PORT") .help("Sets the IP and port where Phantun Client listens for incoming UDP datagrams, IPv6 address need to be specified as: \"[IPv6]:PORT\"") - .takes_value(true), ) .arg( Arg::new("remote") @@ -38,7 +37,6 @@ async fn main() -> io::Result<()> { .required(true) .value_name("IP or HOST NAME:PORT") .help("Sets the address or host name and port where Phantun Client connects to Phantun Server, IPv6 address need to be specified as: \"[IPv6]:PORT\"") - .takes_value(true), ) .arg( Arg::new("tun") @@ -47,7 +45,6 @@ async fn main() -> io::Result<()> { .value_name("tunX") .help("Sets the Tun interface name, if absent, pick the next available name") .default_value("") - .takes_value(true), ) .arg( Arg::new("tun_local") @@ -56,7 +53,6 @@ async fn main() -> io::Result<()> { .value_name("IP") .help("Sets the Tun interface IPv4 local address (O/S's end)") .default_value("192.168.200.1") - .takes_value(true), ) .arg( Arg::new("tun_peer") @@ -67,7 +63,6 @@ async fn main() -> io::Result<()> { You will need to setup SNAT/MASQUERADE rules on your Internet facing interface \ in order for Phantun Client to connect to Phantun Server") .default_value("192.168.200.2") - .takes_value(true), ) .arg( Arg::new("ipv4_only") @@ -75,7 +70,7 @@ async fn main() -> io::Result<()> { .short('4') .required(false) .help("Only use IPv4 address when connecting to remote") - .takes_value(false) + .action(ArgAction::SetTrue) .conflicts_with_all(&["tun_local6", "tun_peer6"]), ) .arg( @@ -85,7 +80,6 @@ async fn main() -> io::Result<()> { .value_name("IP") .help("Sets the Tun interface IPv6 local address (O/S's end)") .default_value("fcc8::1") - .takes_value(true), ) .arg( Arg::new("tun_peer6") @@ -96,7 +90,6 @@ async fn main() -> io::Result<()> { You will need to setup SNAT/MASQUERADE rules on your Internet facing interface \ in order for Phantun Client to connect to Phantun Server") .default_value("fcc8::2") - .takes_value(true), ) .arg( Arg::new("handshake_packet") @@ -107,19 +100,18 @@ async fn main() -> io::Result<()> { first data packet to the server.\n\ Note: ensure this file's size does not exceed the MTU of the outgoing interface. \ The content is always sent out in a single packet and will not be further segmented") - .takes_value(true), ) .get_matches(); let local_addr: SocketAddr = matches - .value_of("local") + .get_one::("local") .unwrap() .parse() .expect("bad local address"); - let ipv4_only = matches.is_present("ipv4_only"); + let ipv4_only = matches.get_flag("ipv4_only"); - let remote_addr = tokio::net::lookup_host(matches.value_of("remote").unwrap()) + let remote_addr = tokio::net::lookup_host(matches.get_one::("remote").unwrap()) .await .expect("bad remote address or host") .find(|addr| !ipv4_only || addr.is_ipv4()) @@ -127,32 +119,32 @@ async fn main() -> io::Result<()> { info!("Remote address is: {}", remote_addr); let tun_local: Ipv4Addr = matches - .value_of("tun_local") + .get_one::("tun_local") .unwrap() .parse() .expect("bad local address for Tun interface"); let tun_peer: Ipv4Addr = matches - .value_of("tun_peer") + .get_one::("tun_peer") .unwrap() .parse() .expect("bad peer address for Tun interface"); - let (tun_local6, tun_peer6) = if ipv4_only { + let (tun_local6, tun_peer6) = if matches.get_flag("ipv4_only") { (None, None) } else { ( matches - .value_of("tun_local6") + .get_one::("tun_local6") .map(|v| v.parse().expect("bad local address for Tun interface")), matches - .value_of("tun_peer6") + .get_one::("tun_peer6") .map(|v| v.parse().expect("bad peer address for Tun interface")), ) }; - let tun_name = matches.value_of("tun").unwrap(); + let tun_name = matches.get_one::("tun").unwrap(); let handshake_packet: Option> = matches - .value_of("handshake_packet") + .get_one::("handshake_packet") .map(fs::read) .transpose()?; diff --git a/phantun/src/bin/server.rs b/phantun/src/bin/server.rs index 38c96ae..c5dfeea 100644 --- a/phantun/src/bin/server.rs +++ b/phantun/src/bin/server.rs @@ -1,4 +1,4 @@ -use clap::{crate_version, Arg, Command}; +use clap::{crate_version, Arg, ArgAction, Command}; use fake_tcp::packet::MAX_PACKET_LEN; use fake_tcp::Stack; use log::{debug, error, info}; @@ -29,7 +29,6 @@ async fn main() -> io::Result<()> { .required(true) .value_name("PORT") .help("Sets the port where Phantun Server listens for incoming Phantun Client TCP connections") - .takes_value(true), ) .arg( Arg::new("remote") @@ -38,7 +37,6 @@ async fn main() -> io::Result<()> { .required(true) .value_name("IP or HOST NAME:PORT") .help("Sets the address or host name and port where Phantun Server forwards UDP packets to, IPv6 address need to be specified as: \"[IPv6]:PORT\"") - .takes_value(true), ) .arg( Arg::new("tun") @@ -47,7 +45,6 @@ async fn main() -> io::Result<()> { .value_name("tunX") .help("Sets the Tun interface name, if absent, pick the next available name") .default_value("") - .takes_value(true), ) .arg( Arg::new("tun_local") @@ -56,7 +53,6 @@ async fn main() -> io::Result<()> { .value_name("IP") .help("Sets the Tun interface local address (O/S's end)") .default_value("192.168.201.1") - .takes_value(true), ) .arg( Arg::new("tun_peer") @@ -67,7 +63,6 @@ async fn main() -> io::Result<()> { You will need to setup DNAT rules to this address in order for Phantun Server \ to accept TCP traffic from Phantun Client") .default_value("192.168.201.2") - .takes_value(true), ) .arg( Arg::new("ipv4_only") @@ -75,7 +70,7 @@ async fn main() -> io::Result<()> { .short('4') .required(false) .help("Do not assign IPv6 addresses to Tun interface") - .takes_value(false) + .action(ArgAction::SetTrue) .conflicts_with_all(&["tun_local6", "tun_peer6"]), ) .arg( @@ -85,7 +80,6 @@ async fn main() -> io::Result<()> { .value_name("IP") .help("Sets the Tun interface IPv6 local address (O/S's end)") .default_value("fcc9::1") - .takes_value(true), ) .arg( Arg::new("tun_peer6") @@ -96,7 +90,6 @@ async fn main() -> io::Result<()> { You will need to setup SNAT/MASQUERADE rules on your Internet facing interface \ in order for Phantun Client to connect to Phantun Server") .default_value("fcc9::2") - .takes_value(true), ) .arg( Arg::new("handshake_packet") @@ -107,50 +100,50 @@ async fn main() -> io::Result<()> { first data packet to the client.\n\ Note: ensure this file's size does not exceed the MTU of the outgoing interface. \ The content is always sent out in a single packet and will not be further segmented") - .takes_value(true), ) .get_matches(); let local_port: u16 = matches - .value_of("local") + .get_one::("local") .unwrap() .parse() .expect("bad local port"); - let remote_addr = tokio::net::lookup_host(matches.value_of("remote").unwrap()) + let remote_addr = tokio::net::lookup_host(matches.get_one::("remote").unwrap()) .await .expect("bad remote address or host") .next() .expect("unable to resolve remote host name"); + info!("Remote address is: {}", remote_addr); let tun_local: Ipv4Addr = matches - .value_of("tun_local") + .get_one::("tun_local") .unwrap() .parse() .expect("bad local address for Tun interface"); let tun_peer: Ipv4Addr = matches - .value_of("tun_peer") + .get_one::("tun_peer") .unwrap() .parse() .expect("bad peer address for Tun interface"); - let (tun_local6, tun_peer6) = if matches.is_present("ipv4_only") { + let (tun_local6, tun_peer6) = if matches.get_flag("ipv4_only") { (None, None) } else { ( matches - .value_of("tun_local6") + .get_one::("tun_local6") .map(|v| v.parse().expect("bad local address for Tun interface")), matches - .value_of("tun_peer6") + .get_one::("tun_peer6") .map(|v| v.parse().expect("bad peer address for Tun interface")), ) }; - let tun_name = matches.value_of("tun").unwrap(); + let tun_name = matches.get_one::("tun").unwrap(); let handshake_packet: Option> = matches - .value_of("handshake_packet") + .get_one::("handshake_packet") .map(fs::read) .transpose()?;