summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleh <45392385+olehs0@users.noreply.github.com>2020-04-05 19:22:27 +0300
committerGitHub <noreply@github.com>2020-04-05 18:22:27 +0200
commit11da09934e82f1218fd7c284d823ee68bf4ae58a (patch)
treefe9a0e690049d77cf723a7e9c3fc8a24bffa518a
parentd4a6b86d4da37264b1936082a1369a7e0f756e2e (diff)
feat(network): hide dns queries by default (#161)
* add filter by dns queries * update snapshots with cargo fmt * add tests with filtering improvement
-rw-r--r--src/display/components/help_text.rs17
-rw-r--r--src/display/ui.rs4
-rw-r--r--src/main.rs13
-rw-r--r--src/network/sniffer.rs23
-rw-r--r--src/tests/cases/raw_mode.rs1
-rw-r--r--src/tests/cases/snapshots/ui__basic_only_addresses.snap2
-rw-r--r--src/tests/cases/snapshots/ui__basic_only_connections.snap2
-rw-r--r--src/tests/cases/snapshots/ui__basic_only_processes.snap2
-rw-r--r--src/tests/cases/snapshots/ui__basic_processes_with_dns_queries.snap55
-rw-r--r--src/tests/cases/snapshots/ui__basic_startup.snap2
-rw-r--r--src/tests/cases/snapshots/ui__bi_directional_traffic.snap2
-rw-r--r--src/tests/cases/snapshots/ui__layout_full_width_under_30_height.snap2
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_120_width_full_height.snap2
-rw-r--r--src/tests/cases/snapshots/ui__layout_under_120_width_under_30_height.snap2
-rw-r--r--src/tests/cases/snapshots/ui__multiple_connections_from_remote_address.snap2
-rw-r--r--src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_different_connections.snap2
-rw-r--r--src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_single_connection.snap2
-rw-r--r--src/tests/cases/snapshots/ui__multiple_processes_with_multiple_connections.snap2
-rw-r--r--src/tests/cases/snapshots/ui__one_packet_of_traffic.snap2
-rw-r--r--src/tests/cases/snapshots/ui__one_process_with_multiple_connections.snap2
-rw-r--r--src/tests/cases/snapshots/ui__pause_by_space-2.snap2
-rw-r--r--src/tests/cases/snapshots/ui__pause_by_space.snap2
-rw-r--r--src/tests/cases/snapshots/ui__traffic_with_winch_event-2.snap2
-rw-r--r--src/tests/cases/snapshots/ui__traffic_with_winch_event.snap2
-rw-r--r--src/tests/cases/snapshots/ui__two_packets_only_addresses.snap2
-rw-r--r--src/tests/cases/snapshots/ui__two_packets_only_connections.snap2
-rw-r--r--src/tests/cases/snapshots/ui__two_packets_only_processes.snap2
-rw-r--r--src/tests/cases/snapshots/ui__two_windows_split_horizontally.snap2
-rw-r--r--src/tests/cases/snapshots/ui__two_windows_split_vertically.snap2
-rw-r--r--src/tests/cases/test_utils.rs8
-rw-r--r--src/tests/cases/ui.rs33
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/