High-speed network discovery and drift analysis engine
Project description
NetPulse Discovery
NetPulse Discovery is a high-performance, asynchronous network mapping and drift-analysis engine. By offloading packet-level networking to a compiled Rust core, it achieves near wire-speed execution while maintaining a flexible, developer-friendly Python API.
🚀 Key Features
High-Performance Networking (Rust Core)
NetPulse operates at near wire-speed, utilizing a custom Rust core (_engine) layered with PyO3. It broadcasts custom Layer 2 ARP frames and Layer 3 ICMP Echo sweeps using raw datalink sockets. Features include OS Fingerprinting via TCP banners and TTL extraction, native Traceroutes, and Passive Topology Sniffing (CDP/LLDP).
Cloud Native & Developer Ecosystem
Ready for modern infrastructure! Spin up the API daemon with netpulse-discovery serve to instantly access a full REST API, a Strawberry GraphQL interface (/graphql) for complex topological querying, and a Prometheus Metrics exporter (/metrics) built right in. You can also inject real-time Python plugins directly into the discovery engine.
- Asynchronous Port Scanning: Native
asyncioTCP connect scanner that can check hundreds of ports across multiple devices concurrently. - Drift Detection: Built-in intelligence to compare historical scans and calculate exact topological drift (e.g., "Host 192.168.1.5 went offline").
- MAC Vendor Resolution: Automatically translates hardware MAC addresses into human-readable manufacturer names.
- Standalone API & CLI: Usable as a Python library, a Typer-powered CLI, or a FastAPI REST microservice.
📦 Installation
NetPulse Discovery is distributed as a pre-compiled binary wheel. It is entirely self-sufficient and requires no Rust compiler or external dependencies to install!
pip install netpulse-discovery
⚡ Quickstart
As a CLI Tool
The standalone CLI returns structured JSON output perfect for piping into jq or other tools. You can also export directly to files!
[!IMPORTANT] Multiplatform Execution: Low-level network scanning requires elevated privileges.
- Linux / macOS: Prefix your commands with
sudo- Windows: Open an Administrator Command Prompt or PowerShell session to execute.
# Scan a network
sudo netpulse-discovery scan 192.168.1.0/24 --timeout 500
# Export results directly to a file
sudo netpulse-discovery scan 192.168.1.0/24 --output results.json
sudo netpulse-discovery scan 192.168.1.0/24 --output results.yaml
sudo netpulse-discovery scan 192.168.1.0/24 --output results.txt
# Calculate Network Drift from two exported JSON files (No sudo required)
netpulse-discovery drift old_results.json results.json --output drift_report.yaml
# Run Continuous Daemon Mode with Webhook Alerting
sudo netpulse-discovery watch 192.168.1.0/24 --interval 300 --webhook https://hooks.slack.com/services/T000/B000/XXX
# Generate an Ansible Infrastructure-as-Code Inventory from a live scan
sudo netpulse-discovery generate-inventory 192.168.1.0/24 --format ansible --output hosts.yaml
As a Standalone REST API
You can spin up a dedicated, hyper-fast FastAPI server instantly:
netpulse-discovery serve --port 8000
Then send requests to http://localhost:8000/discovery/scan or http://localhost:8000/discovery/drift/compare.
As a Python Library
Embed the high-performance engine directly into your own applications:
import asyncio
from netpulse.discovery.services.discovery import DiscoveryService
from netpulse.discovery.models.discovery import DiscoveryMethod
async def main():
service = DiscoveryService()
# Scans the network using ARP resolution
result = await service.discover_network(
"10.0.0.0/24",
methods=[DiscoveryMethod.ARP]
)
for device in result.devices:
print(f"[{device.ip}] {device.mac} - {device.vendor}")
asyncio.run(main())
📚 Documentation
For more detailed guides, check out the docs/ folder:
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file netpulse_discovery-0.1.8.tar.gz.
File metadata
- Download URL: netpulse_discovery-0.1.8.tar.gz
- Upload date:
- Size: 27.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4bb09d74c4267cf9a6552b97091df33ed640138211d083d20cfbc737d0fa2a2
|
|
| MD5 |
c0b39a0ab076f8706a2591da9e9a5433
|
|
| BLAKE2b-256 |
8e40d7af094f2bda7d47e088a958ec212dca40601556265246f711c95cac0151
|
File details
Details for the file netpulse_discovery-0.1.8-cp38-abi3-win_amd64.whl.
File metadata
- Download URL: netpulse_discovery-0.1.8-cp38-abi3-win_amd64.whl
- Upload date:
- Size: 184.0 kB
- Tags: CPython 3.8+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a80862c92a718fadf4899af370eec417425f6d407225d5b5e0f6f295b067e34e
|
|
| MD5 |
f5b295d3e0abe9a0690b13c7c7220983
|
|
| BLAKE2b-256 |
aef50cdce7dc2fe88125149398b1a9ab15e1771dd805ec7a1531ef91e889bbd7
|
File details
Details for the file netpulse_discovery-0.1.8-cp38-abi3-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: netpulse_discovery-0.1.8-cp38-abi3-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 330.0 kB
- Tags: CPython 3.8+, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1fd3bca130fe38ba3d2e6dcd7e0dfc44af1fea0f186f0bd48d9b81d071b0b5c
|
|
| MD5 |
35e70caddaf9a86dc2fe3520da687ff9
|
|
| BLAKE2b-256 |
0c755ef2db974495ea45b6241fff3d8fbff1a103200e116d41245accb04c0bbf
|
File details
Details for the file netpulse_discovery-0.1.8-cp38-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: netpulse_discovery-0.1.8-cp38-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 290.4 kB
- Tags: CPython 3.8+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4968f07db06dbbbbae1777b853f508b4ff2f30ded9f5e3c683e820059f0d14e0
|
|
| MD5 |
515fd5f823028fe2b90ecc3c518827c8
|
|
| BLAKE2b-256 |
8a885c5c1760ec69734699f5805ebf16336a4f4c2788e152a4b3f4ecae775ff6
|