vagd.virts.qegd =============== .. py:module:: vagd.virts.qegd Classes ------- .. autoapisummary:: vagd.virts.qegd.Qegd Module Contents --------------- .. py:class:: Qegd(binary: str, img: str = DEFAULT_IMG, user: str = DEFAULT_USER, forward: Optional[Dict[str, int]] = None, packages: Optional[List[str]] = None, arm: bool = False, qemu: str = DEFAULT_QEMU_CMD, cpu: str = DEFAULT_QEMU_CPU, memory: str = DEFAULT_QEMU_MEMORY, machine: str = DEFAULT_QEMU_MACHINE, cores: str = DEFAULT_QEMU_CORES, bios: Optional[str] = None, detach: bool = False, custom: str = '', **kwargs: Any) Bases: :py:obj:`vagd.virts.shgd.Shgd` | QEMU Virtualization for pwntools :param binary: binary for VM debugging :param img: qemu image to use (requires ssh) :param user: user inside qemu image :param ports: forwarded ports :param packages: packages to install on vm :param arm: emulate arm in qemu :param qemu: qemu cmd :param cpu: value for :code -cpu :param memory: value for :code -m :param cores: value for :code -smp :param machine: value for :code -machine :param bios: value for :code -bios :param custom: custom qemu arguments :param detach: run qemu in new terminal :param kwargs: parameters to pass through to super | SSH from cmd .. code-block:: bash vagd ssh # or ssh -o "StrictHostKeyChecking=no" -i ~/.share/local/vagd/keyfile -p $(cat .vagd/qemu.lock) ubuntu@0.0.0.0 | Kill from cmd: .. code-block:: bash vagd clean # or kill $(pgrep qemu) | Qemu images are cached in the home directory: :code:`~/.share/local/vagd/qemu-imgs/` | | current used images are stored in the local directory: :code:`./.vagd/current.img` | These should be deleted automatically, but if a machine gets improperly stopped | (shutdown host while vm is running) it might remain and use up space. You can find remaining images with: .. code-block:: bash find ~/ -name current.img rm .. py:attribute:: DEFAULT_IMG :value: 'https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img' .. py:attribute:: QEMU_DIR :value: './.vagd/' .. py:attribute:: IMGS_DIR .. py:attribute:: DEFAULT_USER :value: 'vagd' .. py:attribute:: DEFAULT_HOST :value: '0.0.0.0' .. py:attribute:: TYPE :value: 'qegd' .. py:attribute:: DEFAULT_PORT :value: 2222 .. py:attribute:: DEFAULT_QEMU_CMD :value: 'qemu-system-x86_64' .. py:attribute:: DEFAULT_QEMU_ARM_CMD :value: 'qemu-system-aarch64' .. py:attribute:: DEFAULT_QEMU_MACHINE_PREFIX :value: '-machine' .. py:attribute:: DEFAULT_QEMU_MACHINE :value: 'accel=kvm,type=q35' .. py:attribute:: DEFAULT_QEMU_ARM_MACHINE :value: 'virt' .. py:attribute:: DEFAULT_QEMU_CPU_PREFIX :value: '-cpu' .. py:attribute:: DEFAULT_QEMU_CPU :value: 'host' .. py:attribute:: DEFAULT_QEMU_ARM_CPU :value: 'cortex-a72' .. py:attribute:: DEFAULT_QEMU_CORES_PREFIX :value: '-smp' .. py:attribute:: DEFAULT_QEMU_CORES :value: '2' .. py:attribute:: DEFAULT_QEMU_BIOS_PREFIX :value: '-bios' .. py:attribute:: DEFAULT_QEMU_ARM_BIOS :value: '/usr/share/edk2/aarch64/QEMU_EFI.fd' .. py:attribute:: DEFAULT_QEMU_MEMORY_PREFIX :value: '-m' .. py:attribute:: DEFAULT_QEMU_MEMORY :value: '2G' .. py:attribute:: _img :type: str .. py:attribute:: _local_img :type: str .. py:attribute:: _user :type: str .. py:attribute:: _host :type: str .. py:attribute:: _port :type: int .. py:attribute:: _forward :type: Dict[str, int] .. py:attribute:: _qemu :type: str .. py:attribute:: _cpu :type: str .. py:attribute:: _cores :type: str .. py:attribute:: _memory :type: str .. py:attribute:: _bios :type: str .. py:attribute:: _machine :type: str .. py:attribute:: _detach :type: bool .. py:attribute:: _custom :value: '' .. py:method:: _is_local(url) -> bool :staticmethod: check if provided url is local or remote :param url: url to check :return: if the url is local or remote .. py:attribute:: CURRENT_IMG :value: './.vagd/current.img' .. py:method:: _set_local_img() get local image for qemu machine .. py:attribute:: METADATA_FILE :value: './.vagd/metadata.yaml' .. py:attribute:: _METADATA :value: Multiline-String .. raw:: html
Show Value .. code-block:: python """instance-id: iid-local01 local-hostname: cloudimg """ .. raw:: html
.. py:attribute:: USER_DATA_FILE :value: './.vagd/user-data.yaml' .. py:attribute:: _USER_DATA :value: Multiline-String .. raw:: html
Show Value .. code-block:: python """#cloud-config users: - default - name: {user} groups: sudo shell: /bin/bash sudo: ['ALL=(ALL) NOPASSWD:ALL'] ssh_authorized_keys: - {pubkey} """ .. raw:: html
.. py:attribute:: SEED_FILE :value: './.vagd/seed.img' .. py:attribute:: _GENERATE_SEED_IMG :value: 'cloud-localds ./.vagd/seed.img ./.vagd/user-data.yaml ./.vagd/metadata.yaml' .. py:method:: _setup_seed() create seed.img with config data like ssh keypair in .qemu .. py:attribute:: _QEMU_PORT_FORWARDING :value: ',hostfwd={type}::{guest}-:{host}' .. py:attribute:: _QEMU_START :value: '{qemu} {machine} {cores} {cpu} {memory} -nographic {bios} -device virtio-net-pci,netdev=net0... .. py:attribute:: _QEMU_PIPE :value: '&> /dev/null; ' .. py:attribute:: _QEMU_SUFFIX :value: 'rm {lock} {current}' .. py:attribute:: _QEMU_ARM_START :value: '' .. py:attribute:: LOCKFILE :value: './.vagd/qemu.lock' .. py:method:: _qemu_start() start qemu machine .. py:method:: _new_vm() -> None create new vm .. py:method:: _vm_setup() -> None setup qemu machine