use std::path::PathBuf;
use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(
name = "pktscope",
version,
about = "A Wireshark-style terminal packet analyzer"
)]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
}
#[derive(Subcommand, Debug)]
pub enum Command {
ListInterfaces,
Capture {
#[arg(short, long)]
interface: Option<String>,
#[arg(short, long)]
filter: Option<String>,
#[arg(short, long)]
write: Option<PathBuf>,
#[arg(long)]
pcapng: bool,
#[arg(long)]
json: bool,
#[arg(short, long, default_value_t = 65535)]
snaplen: i32,
#[arg(long, default_value_t = 100_000)]
buffer_size: usize,
#[arg(short = 'c', long)]
count: Option<u64>,
#[arg(short = 'G', long)]
duration: Option<u64>,
},
Read {
file: PathBuf,
#[arg(short, long)]
filter: Option<String>,
#[arg(long)]
json: bool,
#[arg(long, default_value_t = 100_000)]
buffer_size: usize,
},
Monitor {
#[command(subcommand)]
action: MonitorAction,
},
Inspect {
#[arg(long)]
state_dir: Option<PathBuf>,
#[arg(long)]
socket: Option<PathBuf>,
#[arg(long)]
json: bool,
},
Diff {
file_a: PathBuf,
file_b: PathBuf,
},
}
#[derive(Subcommand, Debug)]
pub enum MonitorAction {
Run {
#[arg(short, long)]
interface: String,
#[arg(short, long)]
filter: Option<String>,
#[arg(long, default_value_t = 65535)]
snaplen: i32,
#[arg(long)]
state_dir: Option<PathBuf>,
#[arg(long)]
geoip_country_db: Option<PathBuf>,
#[arg(long)]
geoip_asn_db: Option<PathBuf>,
#[arg(long)]
demo: bool,
#[arg(long)]
daemonize: bool,
#[arg(long)]
no_notify: bool,
},
Status {
#[arg(long)]
state_dir: Option<PathBuf>,
#[arg(long)]
json: bool,
},
Stop {
#[arg(long)]
state_dir: Option<PathBuf>,
},
}