|
| 1 | +use async_std::task::block_on; |
1 | 2 | use criterion::{black_box, criterion_group, criterion_main, Criterion}; |
2 | 3 | use rustscan::input::{PortRange, ScanOrder}; |
3 | 4 | use rustscan::port_strategy::PortStrategy; |
4 | 5 | use rustscan::scanner::Scanner; |
5 | 6 | use std::net::IpAddr; |
6 | 7 | use std::time::Duration; |
7 | 8 |
|
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) { |
9 | 30 | let addrs = vec!["127.0.0.1".parse::<IpAddr>().unwrap()]; |
10 | 31 | let range = PortRange { |
11 | 32 | start: 1, |
12 | | - end: 60_000, |
| 33 | + end: 1_000, |
13 | 34 | }; |
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( |
16 | 39 | &addrs, |
17 | 40 | 10, |
18 | | - Duration::from_millis(100), |
| 41 | + Duration::from_millis(10), |
19 | 42 | 1, |
20 | 43 | false, |
21 | | - strategy, |
| 44 | + strategy_tcp, |
22 | 45 | true, |
23 | 46 | vec![], |
24 | 47 | false, |
25 | 48 | ); |
26 | | - // Perform the actual scan or logic here if needed |
27 | | -} |
28 | 49 |
|
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( |
37 | 55 | &addrs, |
38 | 56 | 10, |
39 | | - Duration::from_millis(100), |
| 57 | + Duration::from_millis(10), |
40 | 58 | 1, |
41 | 59 | false, |
42 | | - strategy, |
| 60 | + strategy_udp, |
43 | 61 | true, |
44 | 62 | vec![], |
45 | 63 | true, |
46 | 64 | ); |
47 | | - // Perform the actual scan or logic here if needed |
48 | | -} |
49 | 65 |
|
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())); |
53 | 77 | } |
54 | 78 |
|
55 | 79 | criterion_group!(benches, criterion_benchmark); |
|
0 commit comments