Open Tools NetLens
Free · Open source · Single .exe

NetLens v1.5.14

A fast, native-Windows LAN scanner for IT admins, MSPs and small businesses. Drop the single .exe on any box, point it at a subnet, and get a clean device inventory — device type and exact model, open ports and services, printer supply levels and heuristic security findings — plus a consultant-quality, single-file HTML report. No installer, no services, no telemetry.

Specs & verification

Version 1.5.14
Started 2026-01-12
Released 2026-05-28
Platform Windows 7 → 11 · Server 2012+ · x64
Size 2.5 MB
Built with C++20 · Win32 · CMake
Dependencies None · Single file
  • GitHub github.com/3389ro/netlens · Releases · Issues
  • SHA-256 7f21b9a80b8ab1bfb4f64180ff83e876b3a862fe3e43c1da7ee78def9e40ee0f .sha256
  • Source SHA-256 8381d196fcfc270b4f2a3170cd855e068553a4ebab1771e6bf412da55cb88b7b .sha256
  • Licence MIT · LICENSE.txt + NOTICE.txt bundled inside the source ZIP and the repo

Verify the binary before you run it: Get-FileHash NetLens.exe -Algorithm SHA256 and compare against the hash above (or against the .sha256 sidecar). If your organisation prefers to build from source, the ZIP includes the full tree and a single build.ps1 script that runs CMake configure + a Release build in one step (requires Visual Studio 2022 with the Desktop C++ workload).

At a glance

Name
NetLens
Purpose
Portable LAN scanner for Windows. Discovers live hosts on a subnet; classifies each by device type and, where possible, exact model; enumerates open TCP ports and services; runs a UDP discovery pass, an SNMP printer-supplies walk and SMB dialect / share checks; surfaces heuristic security findings; and produces a clean inventory plus a single-file HTML report.
Target user
IT administrators, network consultants, support technicians and small-business owners running short engagements on customer networks. Useful in offices, light datacentres and home labs.
Platform
Windows 7 / 8 / 8.1 / 10 / 11 and Windows Server 2012 / 2016 / 2019 / 2022 / 2025, x64. Single-file native executable; no .NET, no Java, no Python runtime. Win10-only DPI APIs resolved at runtime so the binary loads cleanly on legacy Windows.
Licence
MIT. LICENSE.txt and NOTICE.txt bundled in source ZIP and repo.
Telemetry
None. The tool makes no outbound network calls of its own; it only sends ICMP and TCP probes to the IP range you specify.
Admin rights
Not required. NetLens runs as a normal user; raw-socket privilege is not used.
Local state
None. Settings are session-only and are not persisted between runs. No %APPDATA% folder, no registry writes, no installer footprint.
Download
NetLens.exe — 2.5 MB portable executable.
Source code
github.com/3389ro/netlens · source ZIP.
Verification
SHA-256 of binary: 7f21b9a80b8ab1bfb4f64180ff83e876b3a862fe3e43c1da7ee78def9e40ee0f. Verify with Get-FileHash NetLens.exe -Algorithm SHA256.

Screenshots

A completed scan of an example /24, then close-ups of the per-host details pane — printer supplies read over SNMP, and the heuristic security findings. Click any image to enlarge.

NetLens v1.5.13 after a completed scan of an example 192.168.1.0/24 — 15 of 254 hosts online. The sortable host grid lists each device with separate Device Type and exact Model columns; the right-hand details pane shows identity, inferred brand, open TCP ports and security findings for the selected host.
Completed scan of an example /24 — a sortable host grid with separate Device Type and exact Model columns, and a per-host details pane (identity, inferred brand, open ports, security findings).
NetLens details pane for a network printer — an SNMP Printer-MIB walk reports the model, serial number and per-cartridge supply levels (black plus cyan, magenta and yellow) as colour-coded bars, alongside the open ports and discovery data.
Enhanced printer detection via an SNMP Printer-MIB walk — model, serial and per-cartridge supply levels (black + CMY) shown as colour-coded bars, with lifetime counters where the device reports them.
NetLens security-findings panel for a selected host — heuristic CVE and end-of-life indicators derived from observable service banners and version hints, each tagged by severity with a reference link, presented as exposure hints rather than asserted exploits.
Security findings — heuristic CVE and end-of-life indicators inferred from observable banners and version hints, tagged by severity. Exposure hints to investigate, never an asserted exploit.

What it does

Everything below ships in the same single executable — no plug-ins, no add-ons, no cloud calls.

Host discovery

  • Adapter auto-detection. Every Ethernet and Wi-Fi IPv4 adapter is picked up via GetAdaptersAddresses. The scan-range field is pre-filled with the on-link prefix; ranges above 1024 hosts are flagged.
  • Flexible range syntax. 192.168.1.1-254, 192.168.1.10-192.168.1.50 or 192.168.1.0/24.
  • Three scan modes. Deep (default) does ICMP plus a TCP-fallback sweep on the configured port list, so hosts that block ICMP echo still get found. Fast trusts ICMP first and only TCP-probes ICMP-silent hosts on a small discovery set. Discovery-only is pure ICMP plus DNS plus MAC, with no TCP traffic.
  • Concurrent port scanning. Non-blocking connect() plus select() across a batch of ports: four ports cost one timeout window instead of four. A thread pool with configurable concurrency (default 256, capped at 1024) and locality-aware ordering surfaces populated subnets first on large ranges.

Device identification & exact model

  • Reverse DNS. GetNameInfo with a hard 800 ms cap per host, so one slow PTR record cannot stall the scan.
  • MAC address + manufacturer. SendARP for local-subnet hosts, then the embedded IEEE OUI registry (~52,790 entries across MA-L /24, MA-M /28 and MA-S /36 — public IEEE data) resolves the manufacturer of record.
  • Device-type classification. Each host is sorted into a representative category — router / firewall, managed switch, wireless controller or access point, NAS / storage, server baseboard controller (BMC / IPMI), hypervisor, network printer or MFP, IP camera / NVR, VoIP phone, or IoT / smart-home device.
  • Exact model & firmware — read, not guessed. When a device exposes a read-only, unauthenticated management surface (structured inventory XML, an embedded web-UI API, or a version banner), NetLens reads the precise model and firmware from it. A strict, manufacturer-driven resolver only reports a model it can actually read — it never presents a raw web-page title as a model.
  • Per-category port-priority profiles. A classified host gets a tailored port order so its typical services answer first: IP cameras → RTSP / web / ONVIF; routers & firewalls → admin UI + management API; NAS → SMB / AFP / NFS / web admin; printers → JetDirect / IPP / LPD; server BMCs → IPMI / Redfish.

UDP service enrichment

  • Eight parallel UDP probes per online host — the kind of services TCP-only scanners miss. One shared select() loop with a 600 ms global budget; source-IP-verified responses drop LAN spoofs.
    • UDP 137 NBNS — NBSTAT query, yields computer name + workgroup.
    • UDP 5353 mDNS / DNS-SD — surfaces the service catalogue advertised by printers, NAS, media players and mobile devices.
    • UDP 1900 SSDP / UPnP — identifies routers, smart TVs and DLNA servers.
    • UDP 53 DNS — version.bind CHAOS TXT query.
    • UDP 123 NTP — reports stratum and reference ID.
    • UDP 1434 SQL Server Browser — database instance metadata.
    • UDP 5355 LLMNR — multicast name resolution.
    • UDP 623 IPMI — RMCP ping/pong, identifies server baseboard management controllers.
  • NetBIOS name fallback. When reverse DNS is empty, the Hostname column transparently shows the NetBIOS name picked up over UDP 137, so Windows machines stay identifiable.
  • No admin rights, no raw sockets. Each probe is a connected UDP socket; all eight share one select() window per host, so the per-host cost stays bounded no matter how many go silent.
  • Enabled on the Full Common, All Ports and Custom Ports presets; off on Quick / Standard. Toggle per session via Tools → Settings.

Enhanced printer detection (SNMP)

  • Printer-MIB walk over SNMP. A minimal in-tree SNMPv2c client (read-only, community public) reads sysDescr / sysName / serial, then walks prtMarkerSupplies (RFC 3805) to surface per-cartridge supply levels — black, cyan, magenta, yellow, drum, fuser, waste toner and maintenance kit — normalised across manufacturers and shown as colour-coded bars.
  • Label printers over SGD (TCP 9100). Label printers that keep SNMP disabled are read over their native get/set protocol for model, firmware and the lifetime odometer.
  • Gated on a printer signal (port 9100 / 515 / 631 open, or a printer manufacturer OUI), so on a /24 with a single printer it costs only a few probes against that one host.
  • Surfaces in the details pane as a PRINTER SUPPLIES section directly under IDENTITY, and as its own per-host card in the HTML report.

SMB dialect & shares

  • SMB dialect detection. Direct SMB negotiation reports the dialect family in play — SMB 1.0 / 2.x / 3.x — so legacy SMB1 hosts stand out at a glance.
  • Anonymous share enumeration. Where a host permits a null session, NetLens lists the exposed shares, read-only, so unintended open shares are easy to spot.

Security findings & recommendations

  • SECURITY FINDINGS. A curated layer of heuristic CVE and end-of-life indicators, inferred from observable service banners, fingerprints and version hints — exposed remote management, legacy protocol versions, end-of-life firmware and unauthenticated admin surfaces. Each finding is tagged by severity with a reference link.
  • RECOMMENDED ACTIONS. Concrete next steps in plain English for each host worth a closer look.
  • Heuristic, not authoritative. Findings are exposure hints to investigate, not asserted vulnerabilities — there is no exploit code, no payload library and no credentialed testing. False positives are possible when a host has been patched in place without updating its banner.

Reporting

  • CSV export. UTF-8 with BOM, RFC-4180 escaped, with a formula-injection guard; opens cleanly in spreadsheets.
  • HTML export. A single self-contained file with embedded CSS and no CDN, sorted by IP for a stable order. Offline hosts are hidden by default with an inline note; cancelled scans get a prominent banner and an explicit “Partial results” flag.
  • Per-host cards. Printer supply levels with colour-coded progress bars, the UDP discovery responses, and the security findings all render in the report for hosts that returned them.

Operations

  • GUI-first. Native Win32, double-click to launch. A three-state toolbar (StartCancelCancelling…) tracks engine state.
  • Safe cancellation. Stop at any time; partial results stay valid and exports flag the run as cancelled. Ctrl+T captures the full visible UI into a timestamped folder.
  • Responsive on big ranges. An O(1) result accumulator and repaint throttling keep the grid fluid with thousands of online hosts; reverse DNS auto-disables above 1024 hosts per scan.
  • Scriptable via a C ABI. The scan engine links statically into the .exe; the same static library and stable C header (engine/include/netlens_engine.h) can be linked from any C-ABI consumer for headless or scheduled scans.
  • No installer, no services, no auto-update, no local state. A single portable .exe — settings are session-only; nothing is written to %APPDATA% and there are no registry writes.

Release history

Each version on this page maps to a tagged snapshot on GitHub — binaries are reproducible from the source ZIP.

v1.5.14 2026-05-28

Two-phase scan fixes.

Deep / All-Ports scans now build on the initial discovery instead of appearing to restart: open ports, services, SMB shares, printer supplies and security findings from the first pass carry through to the full sweep, the scan duration no longer resets at the phase change, and the sweep skips the ports discovery already covered. The Custom Ports field now appears immediately when its preset is selected, with an inline format hint.

v1.5.13 2026-05-28

Device fingerprinting, security findings & large-scan stability.

This public release rolls up the 1.4 and 1.5 development line. A new Security findings layer surfaces curated CVE / EOL heuristics from observable service banners and version hints — in the details pane and the HTML report; heuristic indicators only, never a confirmed CVE. SMB dialect detection over direct negotiation reports SMB 1.0 / 2.x / 3.x, with anonymous share enumeration where the host permits it. Device fingerprinting widened across routers and firewalls, managed switches, wireless controllers and access points, NAS appliances, server baseboard controllers, hypervisors, VoIP phones and smart-home devices, and a dedicated Model column (grid, HTML, CSV) reads the exact model only from manufacturer-driven, read-only management endpoints — never a raw page title. Printer enrichment now also reads label printers over their native SGD protocol (TCP 9100). Large ranges get an O(1) result accumulator with repaint throttling and a faster Stop on slow / firewalled / VPN hosts. Fixes: removed an incorrect SMB1 / EternalBlue finding that could fire on ordinary SMB 2.1 hosts (Windows 7 / Server 2008 R2 / 2012 and many NAS devices), plus report and export hardening (HTML escaping across every field, a CSV formula-injection guard, codepoint-safe UTF-8 at the engine boundary).

v1.3.0 2026-05-26

Native Win32 rewrite + scan-engine fork.

From-scratch native Win32 UI on a forked + extended C++ scan engine. Single 2.5 MB statically-linked NetLens.exe with PerMonitorV2 DPI awareness, static CRT, zero runtime DLL dependencies. UDP discovery widened to eight probes (added SQL Browser, LLMNR, IPMI alongside NBNS / NTP / SSDP / mDNS / DNS). New Printer SNMP module reads vendor + model + serial + per-cartridge supply levels via the Printer-MIB. Enrichment overhaul: fewer false positives (win- hostname, TP-Link cameras, IPP/CUPS-on-Linux), Netgear-switch detection, 3CX PBX recognition, anchored hostname rules. Engine reliability fixes from internal + external audits (restart race, clear_results race, cancel-to-100% jump, UTF-8 codepoint truncation, NBNS hostname promotion). HTML report redesign: offline hosts hidden by default; new Printer supplies + UDP discovery sections. Loads cleanly on Windows 7 / 8 / 8.1 / 10 / 11 and Server 2012+ (Win10-only user32 exports resolved at runtime). The CLI subsystem is gone — the GUI is now the only entry point; scripted scans link the engine’s C ABI directly.

v1.2.0 2026-04-12

UDP service enrichment.

Six parallel UDP probes per online host — NetBIOS 137, mDNS 5353, SSDP 1900, SNMP 161, DNS-version 53, NTP 123 — surface the services TCP-only scanners miss. NetBIOS name now feeds a Hostname fallback when reverse DNS is empty. Risk model picks up SNMP-public reads (Medium), UPnP and NetBIOS exposure (Low). New CSV columns and a UDP section in the HTML report. Auto-disabled for ranges above 1024 hosts.

v1.1.2 2026-03-15

Licence-clean OUI source.

OUI registry swapped to the IEEE Registration Authority’s public CSV registries (MA-L, MA-M, MA-S) — ~52,790 entries, free public use, no attribution required. The previous source carried a copyleft licence; the new one is unencumbered, so it can be bundled directly into the binary. Generator script rewritten for IEEE’s tab / CSV format. Vendor port-priority profiles unchanged (they hit IEEE-formal organisation names already).

v1.1.1 2026-02-25

Richer OUI, vendor port-priority, preset manager.

OUI database upgraded to 57,140 entries. New VendorPortProfiles module: video surveillance, MikroTik, VMware, NAS, printers, server BMC, Ubiquiti, Cisco, VoIP phones, Apple, smart-home IoT, ICS / SCADA — each gets a tailored port order so vendor-typical services appear first. New Tools → Manage port presets dialog (view, rename, edit, add, delete) with in-memory edits per session.

v1.1.0 2026-02-05

Project rename to NetLens.

Binary now ships as NetLens.exe. Internal namespace renamed to netlens::. Resource files renamed. APPDATA folder now %APPDATA%\NetLens\. No functional changes — scan engine, risk model, GUI, CLI, exports, baseline format and monitor logic are identical to v1.0.8.

v1.0.8 2026-01-15

Review-driven hardening.

Scan default flipped to Deep so Windows boxes that block ICMP no longer get silently missed. Concurrency dropped from 2048 to 1024 to play nicely with consumer-router rate-limits. Scanner-to-UI handoff is now strictly UI-thread (heap payload + PostMessage). Cancelled-scan progress bug fixed. DNS auto-off for ranges above 1024 hosts. HTML export shows scan state explicitly with an amber banner for cancelled runs.

Known limitations

FAQ

Is this really free? What's the catch?

It really is free and open source. We built NetLens for our own engineering work and use it on client engagements; publishing it is a way to give something back to the small-business IT community. There is no upsell, no “pro” tier, no licence server. If you need a customised variant for your team, that’s a paid engagement — the public tool stays free.

Why is Windows SmartScreen flagging the .exe?

On first launch SmartScreen may show “Windows protected your PC”; click More info → Run anyway. Verify the SHA-256 above against the .sha256 sidecar with Get-FileHash NetLens.exe -Algorithm SHA256. If your organisation requires building from source instead, the ZIP includes the full tree and a one-step build.ps1 — the resulting binary is identical to ours.

Does it need administrator rights?

No. NetLens uses standard Windows socket APIs (connected TCP and UDP sockets, SendARP, GetNameInfo, GetAdaptersAddresses). No raw sockets, no kernel driver, no admin token required.

Where does NetLens fit among LAN tools?

NetLens is built for the everyday LAN-inventory job on small and medium business networks: “who is on this subnet, what are they running, give me a report I can send to the customer.” It is intentionally focused — portable single-file binary, fast scans, vendor-aware port priority, UDP service enrichment, clean CSV / HTML reports. For deep security auditing or red-team work, a dedicated security scanner is the right choice; NetLens is not designed for that workflow.

Does it work over a VPN?

Yes. The adapter dropdown lists every IPv4 interface, including VPN virtual adapters. Pick the VPN adapter and the suggested range comes from its on-link prefix.

Can I integrate it into a script?

v1.3 ships GUI-only — the standalone CLI subsystem from earlier versions was removed. For scripted / scheduled scans, link the engine’s C ABI directly: engine/include/netlens_engine.h is a stable C header (no C++ types, no STL), and the engine builds as a static library that any C-ABI consumer can link. CSV / HTML exports remain RFC-4180-clean and self-contained respectively.

Need NetLens tailored to your environment?

Different protocols, custom report layout, on-prem integration, branded output, embedded use inside a larger product — we’ve done all of those. Tell us what you need.