mirror of
https://github.com/Velocidex/velociraptor.git
synced 2026-10-12 02:09:59 +00:00
While the pool client is designed for _server_ load testing, it has shown itself to be useful for testing/learning/development scenarios too (for example, testing hunt behaviours). This PR preserves the load-testing aspects but adds some features that make the pool client more human-friendly and therefore more useful for lab and learning environments. Each pool client now presents a unique hostname and FQDN (e.g. "quantum-phoenix.example.com") to the server instead of the real host's hostname suffixed with the client id. The FQDN reuses the domain of the host running the pool client so the emulated clients appear to belong to the same network. Hostnames are adjective-noun combinations (e.g. "quantum-phoenix") - a numeric suffix is only appended when the number of clients is almost ten thousand. Name collisions are possible if running pool clients simultaneously on multiple hosts connected to the same server, but the server is designed to expect name collisions in the real world, so it's not an issue. Identities are generated upfront for all clients and applied to the `BasicInformation` and `DetailedInfo` sources of the `Generic.Client.Info` interrogation, as well as the periodic client info messages. Writebacks now default to in-memory only (`memory:// scheme`) so no writeback files are written to disk and each client's identity is ephemeral. This makes it easy to spin up clients -> run some tests -> stop the clients -> delete the data -> repeat, without needing to go clean up hundreds of writeback files each time. This also makes it easy to create massive amounts of hunt data in batches (create hunt -> add 10,000 clients -> hunt collections run -> stop clients -> add 10,000 new clients -> hunt collections run -> stop clients -> repeat) for server-side query performance testing. The writeback location is now configured for all platforms - previously Darwin was left unset and fell back to the config file's path, causing all clients on macOS to share a single writeback file. The root config loader no longer requires a writeback file, but it is still available if you need persistent pool client identities. Screenshots: <img width="1600" height="800" alt="pool_client" src="https://github.com/user-attachments/assets/53d14917-4252-4924-857c-acee5c6708eb" /> <img width="1200" height="637" alt="pool_client2" src="https://github.com/user-attachments/assets/c42300ec-4869-465b-b4d6-2141dcbca6bd" />