Fixscan is a networking tool that operates 24/7, performing network scans and displaying the results in an interface. Users can also query its API to manage the data with tools like Grafana, for example. This project is owned by Fixear Cybersecurity, although I personally developed the entire codebase and designed its use cases.
The scanner is a Golang application built using a DAO (Data Access Object) design pattern. It combines efforts from multiple Golang libraries, including one for ARP scanning (which I adapted into the codebase), port scanning (developed by me), an Nmap port scanning wrapper, and a ping utility (also created by me). All of these components are controlled and monitored by a thread pool utility, which I also implemented.
Certain elements were designed with memory optimization in mind, proving to be both efficient and effective. The initial use case targeted running the tool on a Raspberry Pi 3; however, that requirement has since evolved. Today, the scanner’s primary goal is to operate on a virtual machine, with plans to later compile it into a desktop application for the three major platforms (Windows, macOS, and Linux).
The basic flow diagram of the application is as follows (all processes run asynchronously):
The scanner also exposes a REST API, which the frontend queries to retrieve all relevant information. This design enables external applications like Grafana to display scan-exported data seamlessly, without complications.
Fixscan includes a basic CLI to interact with the various modes of the scanner tool and frontend. Different prefixes allow access to specific modes:
prod → Launches the NextJS production server and Fixscan in production mode. dev → Launches the NextJS development server and Fixscan in debug mode.
The frontend is intentionally kept very basic. It is programmed in NextJS and uses shadcn/ui components. Below are some screenshots of the basic frontend:
The future of this project seems uncertain. One of the current primary efforts is to port the existing Docker infrastructure into an Electron app, with the scanner executable running in the background.