Skip to main content

A standalone client for VirtualBox webservice API

Project description

vboxwebber

The purpose of this project is to provide a Python3 client for the VirtualBox remote webservices API. It is standalone in the way that it does not depend on the python libraries distributed with VirtualBox SDK (which to date only supports Python2 via the ancient ZSI library).

The client is generated from an XSL stylesheet and contains vbox API wrapper functions that uses zeep as SOAP-library under the hood for remote access.

The XSL stylesheet is based on the websrv-python.xsl file from the VirtualBox source package, but somewhat improved and modified to use zeep instead of ZSI. Documentation for classes and methods are also generated, hopefully removing the need of sitting with the SDK reference alongside when coding.

Installation

pip install vboxwebber

Usage

Initialize a web session manager by specifying the URL for the VirtualBox web service, and optionally the URL for the wsdl file. For older web services, I didn't manage to get the remote server's wsdl file, so it can be specified as a local file, e.g. "file:///tmp/vboxweb.wsdl".

The service and interface methods should be the same as when using the official SDK, so porting old code should be easy. Classes are generated for enums etc., but it is recommended to combine with the VirtualBox_constants.py from the SDK (which is also generated from the constants-python.xsl stylesheet - encorporating this into the same file is a TODO).

from vboxwebber import *

# Initiate the client
mgr = IWebsessionManager2("http://localhost:18083")

# Logon, get the IVirtualBox object
vbox = mgr.logon("username", "password")

# Print API version
print(vbox.getAPIVersion())

# Find machine
machine = vbox.findMachine("kali2019.4")

# Get the session object
session =  mgr.getSessionObject(vbox)

# Lock the machine to the session
machine.lockMachine(session, SessionType.WriteLock)

# Get the display
display = session.console.display

# Get screen resolution info
width, height, _bpp, _xo, _yo, _status = display.getScreenResolution(0)

# Take a screenshot
screenshot = display.takeScreenShotToArray(0, width, height, "PNG")

# Write data to file
with open("/tmp/screenshot.png", "wb") as f:
    f.write(screenshot)

# Log off, cleaning up resources (implicit, at least for newer vbox versions)
mgr.logoff(vbox)

Generating new API wrappers

The VirtualBox API doesn't change much, but should the need arise, it is easy to generate a new wrapper based on a specific VirtualBox release. Just download the VirtualBox source code package, put the xsl stylesheet in src/VBox/Main/webservice and run:

xsltproc websrv-zeep.xsl ../idl/VirtualBox.xidl > vboxwebber.py

TODO's

  • Conditionalize the generation of documentation?
  • Modify the VirtualBox glue code to include this as a platform?
  • Generate even better documentation with docstring syntax etc.

Help

Improvements are welcome.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vboxwebber-0.1.0.tar.gz (270.6 kB view details)

Uploaded Source

Built Distribution

vboxwebber-0.1.0-py3-none-any.whl (281.0 kB view details)

Uploaded Python 3

File details

Details for the file vboxwebber-0.1.0.tar.gz.

File metadata

  • Download URL: vboxwebber-0.1.0.tar.gz
  • Upload date:
  • Size: 270.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.6.9

File hashes

Hashes for vboxwebber-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f048cf584be0383d0c1a23faf4094d194f81944dc2847e2056781125411fcda8
MD5 b6f8353aa5bfde284ed37e7f57cee534
BLAKE2b-256 4a09294ebae14a0d909bdb30667c36d875f870aa8084da160c6b315bbb23a85a

See more details on using hashes here.

File details

Details for the file vboxwebber-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: vboxwebber-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 281.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.6.9

File hashes

Hashes for vboxwebber-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fc36a86b2e05d8302e998ad593ddb28c33802f8b786e550d24b4430698d6a670
MD5 066286b81972d5c64a0583828551b1c2
BLAKE2b-256 18ea1a9d48de9ab485d7a5a468938e0005ff1f1375a0c3a5b76cc109814c9b11

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page