diff options
author | Oleh <45392385+olehs0@users.noreply.github.com> | 2020-04-05 19:22:27 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-05 18:22:27 +0200 |
commit | 11da09934e82f1218fd7c284d823ee68bf4ae58a (patch) | |
tree | fe9a0e690049d77cf723a7e9c3fc8a24bffa518a | |
parent | d4a6b86d4da37264b1936082a1369a7e0f756e2e (diff) |
feat(network): hide dns queries by default (#161)
* add filter by dns queries
* update snapshots with cargo fmt
* add tests with filtering improvement
31 files changed, 162 insertions, 38 deletions
diff --git a/src/display/components/help_text.rs b/src/display/components/help_text.rs index 49de3b8..2b49551 100644 --- a/src/display/components/help_text.rs +++ b/src/display/components/help_text.rs @@ -6,22 +6,31 @@ use ::tui::widgets::{Paragraph, Text, Widget}; pub struct HelpText { pub paused: bool, + pub show_dns: bool, } -const TEXT_WHEN_PAUSED: &str = " Press <SPACE> to resume."; -const TEXT_WHEN_NOT_PAUSED: &str = " Press <SPACE> to pause."; +const TEXT_WHEN_PAUSED: &str = " Press <SPACE> to resume"; +const TEXT_WHEN_NOT_PAUSED: &str = " Press <SPACE> to pause"; +const TEXT_WHEN_DNS_NOT_SHOWN: &str = " (DNS queries hidden)."; +const TEXT_WHEN_DNS_SHOWN: &str = " (DNS queries shown)."; impl HelpText { pub fn render(&self, frame: &mut Frame<impl Backend>, rect: Rect) { let text = { - let content = if self.paused { + let pause_content = if self.paused { TEXT_WHEN_PAUSED } else { TEXT_WHEN_NOT_PAUSED }; + let dns_content = if self.show_dns { + TEXT_WHEN_DNS_SHOWN + } else { + TEXT_WHEN_DNS_NOT_SHOWN + }; + [Text::styled( - content, + format!("{}{}", pause_content, dns_content), Style::default().modifier(Modifier::BOLD), )] }; diff --git a/src/display/ui.rs b/src/display/ui.rs index cb4e7bd..4530664 100644 --- a/src/display/ui.rs +++ b/src/display/ui.rs @@ -77,7 +77,7 @@ where )); } } - pub fn draw(&mut self, paused: bool) { + pub fn draw(&mut self, paused: bool, show_dns: bool) { let state = &self.state; let children = self.get_tables_to_display(); self.terminal @@ -87,7 +87,7 @@ where state: &state, paused, }; - let help_text = HelpText { paused }; + let help_text = HelpText { paused, show_dns }; let layout = Layout { header: total_bandwidth, children, diff --git a/src/main.rs b/src/main.rs index e46054c..77da318 100644 --- a/src/main.rs +++ b/src/main.rs @@ -46,9 +46,12 @@ pub struct Opt { no_resolve: bool, #[structopt(flatten)] render_opts: RenderOpts, + #[structopt(short, long)] + /// Show DNS queries + show_dns: bool, } -#[derive(StructOpt, Debug)] +#[derive(StructOpt, Debug, Copy, Clone)] pub struct RenderOpts { #[structopt(short, long)] /// Show processes table only @@ -115,6 +118,7 @@ where { let running = Arc::new(AtomicBool::new(true)); let paused = Arc::new(AtomicBool::new(false)); + let dns_shown = opts.show_dns; let mut active_threads = vec![]; @@ -141,7 +145,7 @@ where on_winch({ Box::new(move || { let mut ui = ui.lock().unwrap(); - ui.draw(paused.load(Ordering::SeqCst)); + ui.draw(paused.load(Ordering::SeqCst), dns_shown); }) }); } @@ -184,7 +188,7 @@ where if raw_mode { ui.output_text(&mut write_to_stdout); } else { - ui.draw(paused); + ui.draw(paused, dns_shown); } } let render_duration = render_start_time.elapsed(); @@ -235,12 +239,13 @@ where .map(|(iface, frames)| { let name = format!("sniffing_handler_{}", iface.name); let running = running.clone(); + let show_dns = opts.show_dns; let network_utilization = network_utilization.clone(); thread::Builder::new() .name(name) .spawn(move || { - let mut sniffer = Sniffer::new(iface, frames); + let mut sniffer = Sniffer::new(iface, frames, show_dns); while running.load(Ordering::Acquire) { if let Some(segment) = sniffer.next() { diff --git a/src/network/sniffer.rs b/src/network/sniffer.rs index bd16cc4..9d44275 100644 --- a/src/network/sniffer.rs +++ b/src/network/sniffer.rs @@ -80,16 +80,19 @@ macro_rules! extract_transport_protocol { pub struct Sniffer { network_interface: NetworkInterface, network_frames: Box<dyn DataLinkReceiver>, + dns_shown: bool, } impl Sniffer { pub fn new( network_interface: NetworkInterface, network_frames: Box<dyn DataLinkReceiver>, + dns_shown: bool, ) -> Self { Sniffer { network_interface, network_frames, + dns_shown, } } pub fn next(&mut self) -> Option<Segment> { @@ -109,7 +112,7 @@ impl Sniffer { let version = ip_packet.get_version(); match version { - 4 => Self::handle_v4(ip_packet, &self.network_interface), + 4 => Self::handle_v4(ip_packet, &self.network_interface, self.dns_shown), 6 => Self::handle_v6( Ipv6Packet::new(&bytes[payload_offset..])?, &self.network_interface, @@ -117,9 +120,11 @@ impl Sniffer { _ => { let pkg = EthernetPacket::new(bytes)?; match pkg.get_ethertype() { - EtherTypes::Ipv4 => { - Self::handle_v4(Ipv4Packet::new(pkg.payload())?, &self.network_interface) - } + EtherTypes::Ipv4 => Self::handle_v4( + Ipv4Packet::new(pkg.payload())?, + &self.network_interface, + self.dns_shown, + ), EtherTypes::Ipv6 => { Self::handle_v6(Ipv6Packet::new(pkg.payload())?, &self.network_interface) } @@ -148,7 +153,11 @@ impl Sniffer { direction, }) } - fn handle_v4(ip_packet: Ipv4Packet, network_interface: &NetworkInterface) -> Option<Segment> { + fn handle_v4( + ip_packet: Ipv4Packet, + network_interface: &NetworkInterface, + show_dns: bool, + ) -> Option<Segment> { let (protocol, source_port, destination_port, data_length) = extract_transport_protocol!(ip_packet); @@ -161,6 +170,10 @@ impl Sniffer { Direction::Download => Connection::new(from, to.ip(), destination_port, protocol), Direction::Upload => Connection::new(to, from.ip(), source_port, protocol), }; + + if !show_dns && connection.remote_socket.port == 53 { + return None; + } Some(Segment { interface_name, connection, diff --git a/src/tests/cases/raw_mode.rs b/src/tests/cases/raw_mode.rs index 14fae65..8c51dfa 100644 --- a/src/tests/cases/raw_mode.rs +++ b/src/tests/cases/raw_mode.rs @@ -576,6 +576,7 @@ fn no_resolve_mode() { interface: Some(String::from("interface_name")), raw: true, no_resolve: true, + show_dns: false, render_opts: RenderOpts { addresses: false, connections: false, diff --git a/src/tests/cases/snapshots/ui__basic_only_addresses.snap b/src/tests/cases/snapshots/ui__basic_only_addresses.snap index 78465cd..3f875dd 100644 --- a/src/tests/cases/snapshots/ui__basic_only_addresses.snap +++ b/src/tests/cases/snapshots/ui__basic_only_addresses.snap @@ -51,5 +51,5 @@ expression: "&terminal_draw_events_mirror[0]" │ │ │ │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ - Press <SPACE> to pause. + Press <SPACE> to pause (DNS queries hidden). diff --git a/src/tests/cases/snapshots/ui__basic_only_connections.snap b/src/tests/cases/snapshots/ui__basic_only_connections.snap index 8c9ae26..1fa5bb7 100644 --- a/src/tests/cases/snapshots/ui__basic_only_connections.snap +++ b/src/tests/cases/snapshots/ui__basic_only_connections.snap @@ -51,5 +51,5 @@ expression: "&terminal_draw_events_mirror[0]" │ │ │ │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ - Press <SPACE> to pause. + Press <SPACE> to pause (DNS queries hidden). diff --git a/src/tests/cases/snapshots/ui__basic_only_processes.snap b/src/tests/cases/snapshots/ui__basic_only_processes.snap index 4a03f5b..0e1d4c2 100644 --- a/src/tests/cases/snapshots/ui__basic_only_processes.snap +++ b/src/tests/cases/snapshots/ui__basic_only_processes.snap @@ -51,5 +51,5 @@ expression: "&terminal_draw_events_mirror[0]" │ │ │ │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ - Press <SPACE> to pause. + Press <SPACE> to pause (DNS queries hidden). diff --git a/src/tests/cases/snapshots/ui__basic_processes_with_dns_queries.snap b/src/tests/cases/snapshots/ui__basic_processes_with_dns_queries.snap new file mode 100644 index 0000000..9cc3778 --- /dev/null +++ b/src/tests/cases/snapshots/ui__basic_processes_with_dns_queries.snap @@ -0,0 +1,55 @@ +--- +source: src/tests/cases/ui.rs +expression: "&terminal_draw_events_mirror[0]" +--- + Total Rate Up / Down: 0Bps / 0Bps +┌Utilization by process name─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│Process Connections Rate Up / Down │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + Press <SPACE> to pause (DNS queries shown). + diff --git a/src/tests/cases/snapshots/ui__basic_startup.snap b/src/tests/cases/snapshots/ui__basic_startup.snap index 7a32a5b..0609187 100644 --- a/src/tests/cases/snapshots/ui__basic_startup.snap +++ b/src/tests/cases/snapshots/ui__basic_startup.snap @@ -51,5 +51,5 @@ expression: "&terminal_draw_events_mirror[0]" │ │ │ │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ - Press <SPACE> to pause. + Press <SPACE> to pause (DNS queries hidden). diff --git a/src/tests/cases/snapshots/ui__bi_directional_traffic.snap b/src/tests/cases/snapshots/ui__bi_directional_traffic.snap index 7a32a5b..0609187 100644 --- a/src/tests/cases/snapshots/ui__bi_directional_traffic.snap +++ b/src/tests/cases/snapshots/ui__bi_directional_traffic.snap @@ -51,5 +51,5 @@ expression: "&terminal_draw_events_mirror[0]" │ │ │ │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ - Press <SPACE> to pause. + Press <SPACE> to pause (DNS queries hidden). diff --git a/src/tests/cases/snapshots/ui__layout_full_width_under_30_height.snap b/src/tests/cases/snapshots/ui__layout_full_width_under_30_height.snap index 0e395c1..2c43b4a 100644 --- a/src/tests/cases/snapshots/ui__layout_full_width_under_30_height.snap +++ b/src/tests/cases/snapshots/ui__layout_full_width_under_30_height.snap @@ -30,5 +30,5 @@ expression: "&terminal_draw_events_mirror[0]" │ ││ │ │ ││ │ └─────────────────────────────────────────────────────────────────────────────────────────────┘└─────────────────────────────────────────────────────────────────────────────────────────────┘ - Press <SPACE> to pause. + Press <SPACE> to pause (DNS queries hidden). diff --git a/src/tests/cases/snapshots/ui__layout_under_120_width_full_height.snap b/src/tests/cases/snapshots/ui__layout_under_120_width_full_height.snap index 37e3b16..7a26f4a 100644 --- a/src/tests/cases/snapshots/ui__layout_under_120_width_full_height.snap +++ b/src/tests/cases/snapshots/ui__layout_under_120_width_full_height.snap @@ -51,5 +51,5 @@ expression: "&terminal_draw_events_mirror[0]" │ │ │ │ └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ - Press <SPACE> to pause. + Press <SPACE> to pause (DNS queries hidden). diff --git a/src/tests/cases/snapshots/ui__layout_under_120_width_under_30_height.snap b/src/tests/cases/snapshots/ui__layout_under_120_width_under_30_height.snap index b762fbc..d86cf64 100644 --- a/src/tests/cases/snapshots/ui__layout_under_120_width_under_30_height.snap +++ b/src/tests/cases/snapshots/ui__layout_under_120_width_under_30_height.snap @@ -30,5 +30,5 @@ expression: "&terminal_draw_events_mirror[0]" │ │ │ │ └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ - Press <SPACE> to pause. + Press <SPACE> to pause (DNS queries hidden). diff --git a/src/tests/cases/snapshots/ui__multiple_connections_from_remote_address.snap b/src/tests/cases/snapshots/ui__multiple_connections_from_remote_address.snap index 7a32a5b..0609187 100644 --- a/src/tests/cases/snapshots/ui__multiple_connections_from_remote_address.snap +++ b/src/tests/cases/snapshots/ui__multiple_connections_from_remote_address.snap @@ -51,5 +51,5 @@ expression: "&terminal_draw_events_mirror[0]" │ │ │ │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ - Press <SPACE> to pause. + Press <SPACE> to pause (DNS queries hidden). diff --git a/src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_different_connections.snap b/src/tests/cases/snapshots/ |