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:
Metadata
Release files for netpulse-discovery 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| netpulse_discovery-0.1.8.tar.gz | 27.5 kB | Without provenance | Details for netpulse_discovery-0.1.8.tar.gz |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| netpulse_discovery-0.1.8-cp38-abi3-win_amd64.whl | CPython 3.8 | abi3 | Windows x86-64 | Details for netpulse_discovery-0.1.8-cp38-abi3-win_amd64.whl |
| netpulse_discovery-0.1.8-cp38-abi3-manylinux_2_34_x86_64.whl | CPython 3.8 | abi3 | Linux glibc 2.34+ x86-64 | Details for netpulse_discovery-0.1.8-cp38-abi3-manylinux_2_34_x86_64.whl |
| netpulse_discovery-0.1.8-cp38-abi3-macosx_11_0_arm64.whl | CPython 3.8 | abi3 | macOS 11.0+ ARM64 | Details for netpulse_discovery-0.1.8-cp38-abi3-macosx_11_0_arm64.whl |
Total release size: 831.9 kB
Release files / netpulse_discovery-0.1.8.tar.gz
| Download URL | netpulse_discovery-0.1.8.tar.gz |
|---|---|
| Size | 27.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f4bb09d74c4267cf9a6552b97091df33ed640138211d083d20cfbc737d0fa2a2
|
|
BLAKE2b-256 checksum How to use checksums |
8e40d7af094f2bda7d47e088a958ec212dca40601556265246f711c95cac0151
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / netpulse_discovery-0.1.8-cp38-abi3-win_amd64.whl
| Download URL | netpulse_discovery-0.1.8-cp38-abi3-win_amd64.whl |
|---|---|
| Size | 184.0 kB |
| Tags | CPython 3.8 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
a80862c92a718fadf4899af370eec417425f6d407225d5b5e0f6f295b067e34e
|
|
BLAKE2b-256 checksum How to use checksums |
aef50cdce7dc2fe88125149398b1a9ab15e1771dd805ec7a1531ef91e889bbd7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / netpulse_discovery-0.1.8-cp38-abi3-manylinux_2_34_x86_64.whl
| Download URL | netpulse_discovery-0.1.8-cp38-abi3-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 330.0 kB |
| Tags | CPython 3.8 Linux glibc 2.34+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b1fd3bca130fe38ba3d2e6dcd7e0dfc44af1fea0f186f0bd48d9b81d071b0b5c
|
|
BLAKE2b-256 checksum How to use checksums |
0c755ef2db974495ea45b6241fff3d8fbff1a103200e116d41245accb04c0bbf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / netpulse_discovery-0.1.8-cp38-abi3-macosx_11_0_arm64.whl
| Download URL | netpulse_discovery-0.1.8-cp38-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 290.4 kB |
| Tags | CPython 3.8 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4968f07db06dbbbbae1777b853f508b4ff2f30ded9f5e3c683e820059f0d14e0
|
|
BLAKE2b-256 checksum How to use checksums |
8a885c5c1760ec69734699f5805ebf16336a4f4c2788e152a4b3f4ecae775ff6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Security for netpulse-discovery 0.1.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.