All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.7.0 - 2026-07-30
- OUI: Dedicated
pkg/ouipackage providing an offline IEEE OUI lookup database (Lookup,LookupWithPrefix) (#106). - Fingerprint: Heuristic OS detection using TCP Window Size analysis (
GuessOSFromTCPParams), cross-banner correlation (Windows, Linux, Printers, NAS, Routers), andAssetClasstaxonomy (network,compute,iot,mobile,storage,unknown) (#107). - Results / Exporter:
AssetClassfield added toDeviceInfoand XML/CSV exports. - Results / Ports:
WellKnownServiceNamefor mapping TCP port numbers to standard service names (#141). - Discovery:
TestPingCancellationcancellation test with leak detection (#140).
- CI: Upgraded
actions/setup-gotov7.0.0(#139) andactions/checkouttov7.0.1(#138). - Docs: API stability contract updates for Phase 2 domain expansions.
0.6.0 - 2026-07-24
- Targets: Local network interface auto-detection support via
targets.DetectLocalRangeandParseRange("auto")(#136). - Fingerprint: Active RDP negotiation probe and OS heuristics (
pkg/fingerprint). - Export: Optimized CSV export memory allocations.
- BREAKING CHANGE:
Ping,ReverseDNS,GetMAC, andScanPortswrappers inpkg/scanandpkg/discoverynow acceptcontext.Contextas their first argument (#132). - Discovery:
osGetMACinpkg/discovery/os_posix.goandpkg/discovery/os_windows.goproperly respect context cancellation. - Governance: Updated Hard Rule #4 in
AGENTS.mdmandating English for all repository artifacts, PR review comments, descriptions, and commit messages.
- Governance: Added Hard Rule #8 in
AGENTS.mdforbiddingsquash and mergeto maintain DevSecOps traceability, commit provenance, and auditability.
- CI: Added explicit primary branch safety guards (
main,master,develop) and automated unit test suite (scripts/cleanup-branches_test.sh) for branch cleanup workflow to prevent catastrophic branch deletion.
0.5.1 - 2026-07-16
- Engine: Removed
pkg/storeandpkg/difffrom engine repository (moved to consumers to keep engine light and free of database dependencies).
0.5.0 - 2026-07-16
- Engine: Asynchronous event dispatcher (
asyncDispatcher) with 512-event buffer to decouple scan workers from slow callback executions. - Engine:
TestSlowCallbackDoesNotStallWorkersandTestNoGoroutineLeakOnPrematureCanceltests. - Docs: API stability and scan lifecycle events contract updates.
- Engine:
pkg/engine.StartScandeprecated in favor ofpkg/scan.Engine.ScanStream.
0.4.0 - 2026-07-16
- Fingerprint:
BannerGrabConfig.AggressiveSMBallows opt-in SMB negotiate probe (off by default). - Fingerprint:
FingerprintWithConfigacceptsBannerGrabConfigfor fine-grained control. - Fingerprint:
BannerConcurrencyconstant (5) limits simultaneous banner grab connections. - Fingerprint + Discovery: Fuzz targets for
VendorFromMAC,sanitizeBanner,parseProcNetArp. - Engine:
TestScanReportCompletenessensureslen(Devices) == Totalalways. - Engine:
TestNoGoroutineLeakOnCancelverifies no goroutine leak after cancellation. - Topology:
TestBuildGraph_EdgeLimitverifiesmaxEdgesPerSubnet = 200is respected. - Docs:
pkg/fingerprint,pkg/topology,pkg/coreerradded to README packages table. - Docs:
docs/examples/integration_examples.mdsection 4 with topology example. - Docs:
api-stability.mdlistspkg/coreerras stable.
- BREAKING CHANGE:
GrabBannerssignature changed — now acceptsBannerGrabConfigas last parameter. - BREAKING CHANGE:
Fingerprintdelegates toFingerprintWithConfigwith default config. - Engine
StartScan: Unified alive/dead host paths into a single goroutine per IP, eliminating the nested goroutine for alive hosts. This fixes a race condition inreport.Devicesordering and ensuresEventLifecycleCancelis always the last event emitted. Port scan + fingerprint now run sequentially in the same worker goroutine. - Export CSV/XML: Added
OS,DeviceType,Vendorcolumns/fields.OSFamilyomitted by design (redundant withOS). - Config:
ScanConfiggodoc expanded with default values and sanitize limits for all fields.
- discovery/parseProcNetArp: Guard against infinite loop when
eol == 0(empty line).dataToSearchnow advances by at least 1 byte. - fingerprint/doc.go: Package comment moved before
packageline sogo docrenders it correctly. - README: Removed
pkg/scanner(no longer exists). Addedpkg/fingerprint,pkg/topology,pkg/coreerr.
- SMB probe now opt-in:
BannerGrabConfig.AggressiveSMB=falseby default. Set totrueonly if permitted by engagement rules.
0.3.0 - 2026-06-24
- pkg/results:
HostResult— tipo canônico de domÃnio comAliveeOpenPortse JSON tagsalive/open_ports. SubstituiDeviceInfocomo formato de intercâmbio para a API event-driven. - pkg/results:
HostResult.ToDeviceInfo()— conversão para compatibilidade comDeviceInfo. - pkg/profile:
ScanProfile,DefaultProfile,Sanitize— configuração de varredura comDefaultPorts,Concurrency,TimeoutMse JSON tags. - pkg/events:
Event,EventType(string-based),HostDiscoveredData,ProgressData— sistema de eventos assÃncrono via channel. - pkg/export:
ExportJSON,ExportCSVpara[]results.HostResultcom sanitização CSV. - pkg/scan:
Engine,NewEngine,ScanStream,Stop— orquestrador event-driven que delega a lógica de varredura parapkg/enginee traduz eventos. - pkg/scan:
Ping,ReverseDNS,GetMAC,ScanPorts— wraerts delegando parapkg/discoveryepkg/ports. - Tests: Testes para todos os novos pacotes (
pkg/results,pkg/events,pkg/profile,pkg/export,pkg/scan).
- pkg/results/HostResult: Mudou de type alias para
DeviceInfopara struct independente com camposAlive/OpenPortse JSON tags distintas (alive/open_ports). Código existente que usaDeviceInfonão é afetado. - pkg/events/EventType: Mudou de
int(iota) parastringpara facilitar serialização nos frontends Wails e TUI.
pkg/engine,pkg/discovery,pkg/ports,pkg/exporter,pkg/fingerprint,pkg/topology,pkg/coreerrpreservados sem alteração.- Nenhuma dependência externa adicionada — apenas stdlib Go.
0.2.0 - 2026-06-21
FingerprintProviderinterface injetável emScanConfig.ScanPortsrefatorada para retornar<-chan int(canal desacopla port scan do worker).parseProcNetArpextraÃda como função testável.sanitizeBannerpara output seguro de banners.ExportCSVotimizada comstrconv.AppendInt+ reuse de slice.maxEdgesPerSubnet = 200em topology para limitar explosão O(N²).- Topology Graph Support (
pkg/topology/): Complete network topology graph builder with gateway identification, device clustering by subnet, and graph export capabilities. - OS/Device Fingerprinting Enhancements:
- OUI (Organizationally Unique Identifier) module with zero-allocation lookup for MAC vendor identification.
- TTL (Time To Live) fingerprinting module for OS detection.
- Banner fingerprinting support for service identification.
- Comprehensive test suites and benchmarks for all fingerprinting modules.
- DevSecOps Documentation: Added
docs/devsecops.mdwith security practices, vulnerability scanning procedures, and fuzzing guidelines. - Enhanced CI/CD Infrastructure:
- Golangci-lint configuration (
.golangci.yml) with strict linting rules. - Dependabot automation for dependency updates (
dependabot.yml). - Fuzz testing CI workflow for automatic fuzzing on pull requests.
- Govulncheck PR workflow for automated vulnerability scanning.
- GPG-signed commit workflow for supply chain security.
- Automated develop→main merge workflow with GPG signing.
- Golangci-lint configuration (
- BREAKING CHANGE:
ScanPortsnão retorna mais[]int— retorna<-chan int. Consumidores depkg/portsdiretamente (fora do engine) precisam ler do canal. - Performance Optimizations (Zero-Allocation Patterns):
- âš¡ ARP table parsing in MAC discovery now uses zero-allocation parsing.
- âš¡ VendorFromMAC lookup optimized for minimal memory allocations with dedicated benchmarks.
- âš¡ Subnet extraction (
/24) in topology builder uses zero-allocation string slicing. - âš¡ Topology graph edge keys replaced with zero-allocation struct keys, eliminating string concatenation overhead.
- Port Scanner Improvements: Enhanced port scanning logic with better concurrency handling and timeout calculations.
- CI Workflow Updates: Refactored CI workflows for better separation of concerns and improved maintainability.
- Dependency Updates:
actions/checkout: Bumped from v4 to v7 for enhanced features and security fixes.actions/setup-go: Bumped from v5 to v6 for improved Go version handling.
- POSIX
osPingEnhancement: Improved timeout parameter handling to properly convert milliseconds to whole seconds for Linux (-Wflag) and milliseconds for macOS. - Golangci-lint Version Mismatch: Fixed CI compilation issue by compiling golangci-lint from source when necessary.
- All commits are now GPG-signed via automated workflow for supply chain integrity.
- Added regular vulnerability scanning with
govulncheck. - Enhanced CI linting with golangci-lint and security-focused configuration.
0.1.2 - 2026-06-06
- Topology graph builder foundation.
- Initial fingerprinting module structure.
- Port scanner refactoring (PR #40 integration).
0.1.1 - 2026-06-06
- Added package-level documentation (
doc.go) to all public packages andinternal/netutil. - Added mockable, deterministic unit tests for input validation in
pkg/discovery. - Added
macos-latestto GitHub Actions CI workflow to validate POSIX builds. - Added fuzz testing (
FuzzParseRange) to target parsing logic to ensure resilience against malformed inputs. - Added
os_posix_test.gowith OS-specific validations for fallback ping execution.
- BREAKING CHANGE: Removed
OpenPortsCountfield fromDeviceInfostruct to eliminate redundancy and potential state corruption. Use the newPortCount()method instead. - Improved defensive timeout calculation in
StartScanby considering concurrent port scan batches, avoiding overestimated timeouts. - Updated minimum Go version requirement to
1.26.4ingo.modand1.26.xin CI workflows. - Improved
sanitizeCSVFieldto block newline (\n/\r) injections and control characters within the body of CSV fields. - Context is now explicitly propagated to blocking I/O calls (
discovery.Pingandports.ScanPorts) for immediate hard-cancellation support.
- Fixed pointer memory aliasing bug in
EventCallbackwithinStartScanloop, ensuring consumers receive a safe, distinct copy ofDeviceInfo. - Fixed
osPingin both Windows and POSIX implementations to handletimeoutMs <= 0gracefully with a safe default (1000ms). - Fixed POSIX
osPingignoringtimeoutMsparameter, properly converting to whole seconds for the-Wflag on Linux, and using milliseconds on macOS.
0.1.0 - 2026-06-02
pkg/scanner:DeviceInfo,ScanConfig,DefaultConfig,Sanitize.pkg/scanner:validateIPv4,Ping,ReverseDNS,GetMAC,ScanPorts.pkg/scanner:ParseRangecom suporte a CIDR e dash range.pkg/scanner:StartScan,StopScancom goroutines e cancelamento por context.pkg/scanner: build tags separados para Windows (SendARP) e POSIX (arp).pkg/exporter:ExportJSON,ExportCSV,ExportXMLcom sanitização de injeção CSV.- CI:
go vet+go test -raceno GitHub Actions. - CI:
govulnchecksemanal.