Skip to content

Instantly share code, notes, and snippets.

@deg4uss3r
Last active February 4, 2018 16:22
Show Gist options
  • Save deg4uss3r/c8c7c90ba8b62963bb1a3bfd8c1c01c4 to your computer and use it in GitHub Desktop.
Save deg4uss3r/c8c7c90ba8b62963bb1a3bfd8c1c01c4 to your computer and use it in GitHub Desktop.
nc_quicli
[package]
name = "nc_quicli"
version = "0.2.0"
authors = ["deg4uss3r <ricky@hosfelt.io>"]
[dependencies]
quicli = "0.1"
structopt = "0.1"
#[macro_use] extern crate quicli;
use std::io::BufReader;
use std::io::BufRead;
use std::net::{SocketAddrV4, Ipv4Addr, TcpListener};
use quicli::prelude::*;
//creating CLI struct for inputs
#[derive(Debug, StructOpt)]
struct Cli {
//IP address to bind on; default localhost (IPv4)
#[structopt(long = "IP", short = "i", default_value = "127.0.0.1")]
ip_address: Ipv4Addr,
//port number to bind on; default random port call
#[structopt(long = "port", short = "p", default_value = "0")]
port: u16,
/// Pass many times for more log output
#[structopt(long = "verbose", short = "v")] verbosity: u64,
}
main!(|args: Cli, log_level: verbosity| {
let socket = SocketAddrV4::new(args.ip_address, args.port);
let listener = TcpListener::bind(socket)?;
let port = listener.local_addr()?;
println!("Listening on {}, access this port to end the program", port);
let (tcp_stream, addr) = listener.accept()?;
println!("Connection received! {:?} is sending data.", addr);
let tcp_reader = BufReader::new(tcp_stream);
for line in tcp_reader.lines() {
match line {
Ok(x) => {
if x == "\\exit" {
println!("Received disconnect from {}", addr);
std::process::exit(1);
}
else {
println!("{}: {}", addr, x)
}
},
Err(e) => println!("Error reading from socket: {}", e)
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment