#network #security #scan


TCP/IP stack fingerprinting library for netscan

3 releases (breaking)

0.13.0 Nov 16, 2022
0.12.0 Jul 9, 2022
0.11.0 Jul 3, 2022
0.1.0 Nov 21, 2021

#1489 in Network programming

42 downloads per month
Used in netscan

MIT license

1.5K SLoC

netscan Crates.io License

Cross-platform network scan library
with the aim of being lightweight and fast.


  • Port Scan
    • TCP SYN scan
    • TCP CONNECT scan
  • Host Scan
    • ICMP PING scan
    • TCP PING scan


Add netscan to your dependencies

netscan = "0.13.0"


Port Scan Example

use netscan::blocking::PortScanner;
use netscan::setting::{ScanType, Destination};
use std::time::Duration;
use std::net::{IpAddr, Ipv4Addr};

fn main() {
    let mut port_scanner = match PortScanner::new(IpAddr::V4(Ipv4Addr::new(192, 168, 1, 4))) {
        Ok(scanner) => (scanner),
        Err(e) => panic!("Error creating scanner: {}", e),
    // Add scan target
    let dst_ip: IpAddr = IpAddr::V4(Ipv4Addr::new(192, 168, 1, 8));
    //let dst: Destination = Destination::new(dst_ip, vec![22, 80, 443]);
    let dst: Destination = Destination::new_with_port_range(dst_ip, 1, 1000);
    // Set options
    // Run scan 
    let result = port_scanner.scan();
    // Print results 
    println!("Status: {:?}", result.scan_status);
    for (ip, ports) in result.result_map {
        println!("{}", ip);
        for port in ports {
            println!("{:?}", port);
    println!("Scan Time: {:?}", result.scan_time);

Feature flags

The following feature flags can be used to enable/disable specific features.

--feature async

Enable async scanning.(Default feature)

--feature service

Enable service detection. (Experimental)

--feature os

Enable TCP/IP Stack Fingerprinting. (Experimental)

--feature full

Enable all of the above.

For more details see Examples

Supported platform

  • Linux
  • macOS
  • Windows

Note for Windows users

To build libpnet on Windows, follow the instructions below.


  • You must use a version of Rust which uses the MSVC toolchain
  • You must have WinPcap or npcap installed (tested with version WinPcap 4.1.3) (If using npcap, make sure to install with the "Install Npcap in WinPcap API-compatible Mode")
  • You must place Packet.lib from the WinPcap Developers pack in a directory named lib, in the root of this repository. Alternatively, you can use any of the locations listed in the %LIB%/$Env:LIB environment variables. For the 64 bit toolchain it is in WpdPack/Lib/x64/Packet.lib, for the 32 bit toolchain, it is in WpdPack/Lib/Packet.lib.


Additional Notes

This library requires the ability to create raw sockets. Execute with administrator privileges.


~527K SLoC