VIIPER

module
v0.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 6, 2025 License: GPL-3.0

README ΒΆ


Build Status Release Downloads Issues PRs Welcome npm version npm downloads NuGet version NuGet downloads crates.io version crates.io downloads C SDK

VIIPER 🐍

Virtual Input over IP EmulatoR

VIIPER is a tool to create virtual input devices using USBIP.

ℹ️ About VIIPER

VIIPER creates virtual USB input devices using the USBIP protocol.
These virtual devices appear as real hardware to the operating system and applications, allowing you to emulate controllers, keyboards, and other input devices without physical hardware.

VIIPER is a self-contained, standalone binary that uses USBIP to handle the USB protocol layer.
Device emulation happens in userspace code instead of kernel drivers, so no kernel programming is required to add new device types.
Users need USBIP installed once (built into Linux, usbip-win2 for Windows), after that VIIPER runs without additional dependencies or system-wide installation.
The binary is portable and can be bundled with your application.

Beyond device emulation, VIIPER can proxy real USB devices for traffic inspection and reverse engineering.

All devices can and must be controlled programmatically via an API.

✨ Features
  • βœ… Virtual input device emulation over IP using USBIP
  • βœ… USBIP server mode: expose virtual devices to remote clients
  • βœ… Automatic local attachment: automatically controls usbip client on localhost to attach devices (enabled by default)
  • βœ… Proxy mode: forward real USB devices and inspect/record traffic (for reversing)
  • βœ… Cross-platform: works on Linux and Windows
  • βœ… Flexible logging (including raw USB packet logs)
  • βœ… API server for device/bus management and controlling virtual devices programmatically
  • βœ… Multiple client SDKs for easy integration; see Client SDKs
    MIT Licensed

πŸ”Œ Requirements

VIIPER is a standalone binary that requires USBIP.

Linux:

Windows:

  • usbip-win2 is by far the most complete implementation of USBIP for Windows (comes with a SIGNED kernel mode driver).

πŸ”Œ API

VIIPER includes an API for device and bus management, as well as streaming device control.
Each device type exposes its own control interface via the API.

See the API documentation for details (🚧 in progress 🚧).

πŸ› οΈ Development

🧰 Prerequisites
  • Go 1.25 or newer
  • USBIP installed
  • (Optional) Make
    • Linux/macOS: Usually pre-installed
    • Windows: winget install ezwinports.make
πŸ”„ Building from Source
git clone https://github.com/Alia5/VIIPER.git
cd VIIPER
make build

The binary will be in dist/viiper (or dist/viiper.exe on Windows).

For more build options:

make help              # Show all available targets
make test              # Run tests

🀝 Contributing

Contributions are welcome!
Please open issues or pull requests on GitHub.
See the issues page for bugs and feature requests.

❓ FAQ

What is USBIP and why does VIIPER use it?

USBIP is a protocol that allows USB devices to be shared over a network.
VIIPER uses it because it's already built into Linux and available for Windows, making virtual device emulation possible without writing custom kernel drivers yourself.

Can I use VIIPER for gaming?

Yes! VIIPER can create virtual controllers (currently only Xbox360) that appear as real hardware to games and applications. This works with Steam, native Windows games, and any other application supporting controllers.

How is VIIPER different from other controller emulators?

Most controller emulators require custom kernel drivers for each device type.
VIIPER uses USBIP to handle the USB protocol layer, allowing device emulation in userspace without kernel drivers.
This makes VIIPER portable, easier to extend, and simpler to bundle with applications.

Can I add support for other device types?

Yes! VIIPER's architecture is designed to be extensible.
Check the xbox360 device implementation as a reference for creating new device types.

What about the proxy mode?

Proxy mode sits between a USBIP client and a USBIP server (like a Linux machine sharing real USB devices).
VIIPER intercepts and logs all USB traffic passing through, without handling the devices directly.
Useful for reverse engineering USB protocols and understanding how devices communicate.

What about TCP overhead or input latency performance?

End-to-end input latency for virtual devices created with VIIPER is typically well below 1 millisecond on a modern desktop (e.g. Windows / Ryzen 3900X test machine).
Detailed methodology and sample runs can be found in E2E Latency Benchmarks.

πŸ“„ License

VIIPER - Virtual Input over IP EmulatoR

Copyright (C) 2025 Peter Repukat

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

Credits / Inspiration

REDACTED-Bus aka ViGEmBus - (Retired) Windows kernel-mode driver emulating well-known USB game controllers.

Directories ΒΆ

Path Synopsis
cmd
viiper command
Package device provides common interfaces and utilities for virtual USB devices.
Package device provides common interfaces and utilities for virtual USB devices.
keyboard
Package keyboard provides a HID keyboard device implementation with full N-key rollover.
Package keyboard provides a HID keyboard device implementation with full N-key rollover.
mouse
Package mouse provides a HID mouse device implementation.
Package mouse provides a HID mouse device implementation.
xbox360
Package xbox360 provides an Xbox 360 controller device implementation.
Package xbox360 provides an Xbox 360 controller device implementation.
examples
internal
cmd
config
Package config defines the CLI structure and configuration for VIIPER.
Package config defines the CLI structure and configuration for VIIPER.
log
Package log provides helpers for creating a configured slog.Logger.
Package log provides helpers for creating a configured slog.Logger.
testing
e2e/scripts command
Package usb contains helpers for building USB descriptors and data.
Package usb contains helpers for building USB descriptors and data.
viiper module
Package virtualbus manages USB bus topology and auto-assigns device addresses.
Package virtualbus manages USB bus topology and auto-assigns device addresses.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL