[crates-badge]: https://img.shields.io/crates/v/nerve.svg [crates-url]: https://crates.io/crates/nerve [license-badge]: https://img.shields.io/crates/l/nerve.svg [examples-url]: https://github.com/toref-sh/nerve/tree/main/examples # nerve [![Crates.io][crates-badge]][crates-url] ![License][license-badge] Security scan library with the aim of being lightweight and fast. `nerve` provides a cross-platform API for network / security scan (for security testing, network management, evaluation) using Rust. It is currently in alpha stage. ## Features - [x] PORT SCAN - [x] HOST SCAN - [x] URI SCAN - [x] DOMAIN SCAN ## Usage Add `nerve` to your dependencies ```toml:Cargo.toml [dependencies] nerve = "0.2.1" ``` - Structs that provide each function - `PortScanner` - `HostScanner` - `UriScanner` - `DomainScanner` - Basic usage of each struct - `::new()` returns a Scanner. - Set up the scanner (see [Examples][examples-url]) - `::run_scan()` Run scan with current settings. - Results are stored in `::scan_result` - `::get_result()` returns a scan resut. ## Example Port Scan Example ```Rust extern crate nerve_port; use nerve_port::PortScanner; use nerve_port::PortScanType; use nerve_port::ScanStatus; use std::time::Duration; fn main() { let mut port_scanner = match PortScanner::new(None, None) { Ok(scanner) => (scanner), Err(e) => panic!("Error creating scanner: {}", e), }; port_scanner.set_target_ipaddr("192.168.1.92"); port_scanner.set_range(1, 1000); port_scanner.set_scan_type(PortScanType::SynScan); port_scanner.set_timeout(Duration::from_millis(10000)); port_scanner.run_scan(); let result = port_scanner.get_result(); print!("Status: "); match result.scan_status { ScanStatus::Done => {println!("Normal end")}, ScanStatus::Timeout => {println!("Timed out")}, _ => {println!("Error")}, } println!("Open Ports:"); for port in result.open_ports { println!("{}", port); } println!("Scan Time: {:?}", result.scan_time); } ``` For more details see [Examples][examples-url] ## Supported platform - Linux - macOS(OS X) - Windows ## Additional Notes This library requires the ability to create raw sockets. Execute with root user privileges.