Skip to content

Commit d9dec00

Browse files
bee-sanbeePsypherPunk
authored
benchmark code for rustscan (#705)
* benchmark * Change duration of each individual port scan to 10ms * test: extend UDP benchmark measurement time * benching helper funcs * Broken benchmarking code * Add complete benchmarking for most functions --------- Co-authored-by: bee <[email protected]> Co-authored-by: PsypherPunk <[email protected]>
1 parent 1634bab commit d9dec00

File tree

1 file changed

+47
-23
lines changed

1 file changed

+47
-23
lines changed

benches/benchmark_portscan.rs

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,79 @@
1+
use async_std::task::block_on;
12
use criterion::{black_box, criterion_group, criterion_main, Criterion};
23
use rustscan::input::{PortRange, ScanOrder};
34
use rustscan::port_strategy::PortStrategy;
45
use rustscan::scanner::Scanner;
56
use std::net::IpAddr;
67
use std::time::Duration;
78

8-
fn portscan_tcp() {
9+
fn portscan_tcp(scanner: &Scanner) {
10+
let _scan_result = block_on(scanner.run());
11+
}
12+
13+
fn portscan_udp(scanner: &Scanner) {
14+
let _scan_result = block_on(scanner.run());
15+
}
16+
17+
fn bench_address() {
18+
let _addrs = vec!["127.0.0.1".parse::<IpAddr>().unwrap()];
19+
}
20+
21+
fn bench_port_strategy() {
22+
let range = PortRange {
23+
start: 1,
24+
end: 1_000,
25+
};
26+
let _strategy = PortStrategy::pick(&Some(range.clone()), None, ScanOrder::Serial);
27+
}
28+
29+
fn criterion_benchmark(c: &mut Criterion) {
930
let addrs = vec!["127.0.0.1".parse::<IpAddr>().unwrap()];
1031
let range = PortRange {
1132
start: 1,
12-
end: 60_000,
33+
end: 1_000,
1334
};
14-
let strategy = PortStrategy::pick(&Some(range), None, ScanOrder::Serial);
15-
let _scanner = Scanner::new(
35+
let strategy_tcp = PortStrategy::pick(&Some(range.clone()), None, ScanOrder::Serial);
36+
let strategy_udp = PortStrategy::pick(&Some(range.clone()), None, ScanOrder::Serial);
37+
38+
let scanner_tcp = Scanner::new(
1639
&addrs,
1740
10,
18-
Duration::from_millis(100),
41+
Duration::from_millis(10),
1942
1,
2043
false,
21-
strategy,
44+
strategy_tcp,
2245
true,
2346
vec![],
2447
false,
2548
);
26-
// Perform the actual scan or logic here if needed
27-
}
2849

29-
fn portscan_udp() {
30-
let addrs = vec!["127.0.0.1".parse::<IpAddr>().unwrap()];
31-
let range = PortRange {
32-
start: 1,
33-
end: 60_000,
34-
};
35-
let strategy = PortStrategy::pick(&Some(range), None, ScanOrder::Serial);
36-
let _scanner = Scanner::new(
50+
c.bench_function("portscan tcp", |b| {
51+
b.iter(|| portscan_tcp(black_box(&scanner_tcp)))
52+
});
53+
54+
let scanner_udp = Scanner::new(
3755
&addrs,
3856
10,
39-
Duration::from_millis(100),
57+
Duration::from_millis(10),
4058
1,
4159
false,
42-
strategy,
60+
strategy_udp,
4361
true,
4462
vec![],
4563
true,
4664
);
47-
// Perform the actual scan or logic here if needed
48-
}
4965

50-
fn criterion_benchmark(c: &mut Criterion) {
51-
c.bench_function("portscan tcp", |b| b.iter(|| portscan_tcp()));
52-
c.bench_function("portscan udp", |b| b.iter(|| portscan_udp()));
66+
let mut udp_group = c.benchmark_group("portscan udp");
67+
udp_group.measurement_time(Duration::from_secs(20));
68+
udp_group.bench_function("portscan udp", |b| {
69+
b.iter(|| portscan_udp(black_box(&scanner_udp)))
70+
});
71+
udp_group.finish();
72+
73+
// Benching helper functions
74+
c.bench_function("parse address", |b| b.iter(|| bench_address()));
75+
76+
c.bench_function("port strategy", |b| b.iter(|| bench_port_strategy()));
5377
}
5478

5579
criterion_group!(benches, criterion_benchmark);

0 commit comments

Comments
 (0)