Пример #1
0
    def autorization(self, vm_name, lang):
        connect = SmartConnectNoSSL(host='192.168.13.138', user='******', pwd='')
        content = connect.content
        container = content.viewManager.CreateContainerView(
            content.rootFolder, [vim.VirtualMachine], True)
        vm_list = container.view
        for i in vm_list:
            if i.name == vm_name:
                vm = i
        if lang == 'RU':
            langchange = ['0xe1']
            keyevent1 = vim.UsbScanCodeSpecKeyEvent()
            hidCodeHexToInt1 = int(langchange[0], 16)
            hidCodeValue1 = (hidCodeHexToInt1 << 16) | 7
            keyevent1.usbHidCode = hidCodeValue1
            keyevent1.modifiers = vim.UsbScanCodeSpecModifierType()
            #keyevent1.modifiers.leftControl = True
            keyevent1.modifiers.leftAlt = True
            sp1 = vim.UsbScanCodeSpec()
            eventlist1 = [keyevent1]
            sp1.keyEvents = eventlist1
            r1 = vm.PutUsbScanCodes(sp1)

        passw = [
            '0x13', '0x04', '0x16', '0x16', '0x1a', '0x12', '0x15', '0x07',
            '0x1e', '0x28'
        ]
        for item in passw:
            keyevent2 = vim.UsbScanCodeSpecKeyEvent()
            hidCodeHexToInt2 = int(item, 16)
            hidCodeValue2 = (hidCodeHexToInt2 << 16) | 7
            keyevent2.usbHidCode = hidCodeValue2
            keyevent2.modifiers = vim.UsbScanCodeSpecModifierType()
            if passw.index(item) == 0 or passw.index(item) == 8:
                keyevent2.modifiers.leftShift = True
                sp2 = vim.UsbScanCodeSpec()
                sp2.keyEvents = [keyevent2]
                r2 = vm.PutUsbScanCodes(sp2)
                keyevent2.modifiers.leftShift = False
            else:
                sp2 = vim.UsbScanCodeSpec()
                sp2.keyEvents = [keyevent2]
                r2 = vm.PutUsbScanCodes(sp2)
Пример #2
0
 def send_key_events(self, vm_obj, key_queue, sleep_time=0):
     """
     Send USB HID Scan codes individually to prevent dropping or cobblering
     """
     send_keys = 0
     for item in key_queue:
         usb_spec = vim.UsbScanCodeSpec()
         usb_spec.keyEvents.append(item)
         send_keys += vm_obj.PutUsbScanCodes(usb_spec)
         # Sleep in between key / string send event
         time.sleep(sleep_time)
     return send_keys
def transmit_key_events(virtualmachine, q):
    """
    API call completes quickly, but key-presses may be queued (eg ~1s) before reaching the GuestOS.

    Calling PutUsbScanCodes() with too many scancodes can result in overrun/drops.
    Iterate over the list `q`, and transmit one at a time.
    """
    transmitted_quantity = 0
    for item in q:
        s = vim.UsbScanCodeSpec()
        s.keyEvents.append(item)
        transmitted_quantity += virtualmachine.PutUsbScanCodes(s)
    return transmitted_quantity
Пример #4
0
def Keystroke(vm, CHAR2HIDinfo, args):
    tmp = vim.UsbScanCodeSpecKeyEvent()
    m = vim.UsbScanCodeSpecModifierType()
    if "KEY_LEFTSHIFT" in CHAR2HIDinfo[1]:
        m.leftShift = True
    if "KEY_RIGHTALT" in CHAR2HIDinfo[1]:
        m.rightAlt = True
    if "CTRL" in CHAR2HIDinfo[1]:
        m.leftControl = True
    if "ALT" in CHAR2HIDinfo[1]:
        m.leftAlt = True
    tmp.modifiers = m
    tmp.usbHidCode = HID2HEX(CHAR2HIDinfo[0])
    sp = vim.UsbScanCodeSpec()
    sp.keyEvents = [tmp]
    vm.PutUsbScanCodes(sp)
    if args.debug:
        print("Send : Keystroke: { code: %s, modifiers: %s } on VM : %s" % (
            CHAR2HIDinfo[0], CHAR2HIDinfo[1], vm.name))
Пример #5
0
def key_stroke(virtual_machine, hid, debug=False):
    '''Sent KEYSTROKE to VIRTUAL MACHINE'''
    code, modifiers = hid
    tmp = vim.UsbScanCodeSpecKeyEvent()
    modifier = vim.UsbScanCodeSpecModifierType()
    if "KEY_LEFTSHIFT" in modifiers:
        modifier.leftShift = True
    if "KEY_RIGHTALT" in modifiers:
        modifier.rightAlt = True
    if "CTRL" in modifiers:
        modifier.leftControl = True
    if "ALT" in modifiers:
        modifier.leftAlt = True
    tmp.modifiers = modifier
    tmp.usbHidCode = hid_to_hex(code)
    inject_hid = vim.UsbScanCodeSpec()
    inject_hid.keyEvents = [tmp]
    virtual_machine.PutUsbScanCodes(inject_hid)
    if debug:
        print("Send : Keystroke: { code: %s, modifiers: %s } on VM : %s" %
              (code, modifiers, virtual_machine.name))
Пример #6
0
 def __init__(self, module):
     super(PyVmomiHelper, self).__init__(module)
     self.change_detected = False
     self.usb_scan_code_spec = vim.UsbScanCodeSpec()
     self.num_keys_send = 0
     # HID usage tables https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
     # define valid characters and keys value, hex_code, key value and key modifier
     self.keys_hid_code = [
         (('a', 'A'), '0x04', [('a', []), ('A', ['LEFTSHIFT'])]),
         (('b', 'B'), '0x05', [('b', []), ('B', ['LEFTSHIFT'])]),
         (('c', 'C'), '0x06', [('c', []), ('C', ['LEFTSHIFT'])]),
         (('d', 'D'), '0x07', [('d', []), ('D', ['LEFTSHIFT'])]),
         (('e', 'E'), '0x08', [('e', []), ('E', ['LEFTSHIFT'])]),
         (('f', 'F'), '0x09', [('f', []), ('F', ['LEFTSHIFT'])]),
         (('g', 'G'), '0x0a', [('g', []), ('G', ['LEFTSHIFT'])]),
         (('h', 'H'), '0x0b', [('h', []), ('H', ['LEFTSHIFT'])]),
         (('i', 'I'), '0x0c', [('i', []), ('I', ['LEFTSHIFT'])]),
         (('j', 'J'), '0x0d', [('j', []), ('J', ['LEFTSHIFT'])]),
         (('k', 'K'), '0x0e', [('k', []), ('K', ['LEFTSHIFT'])]),
         (('l', 'L'), '0x0f', [('l', []), ('L', ['LEFTSHIFT'])]),
         (('m', 'M'), '0x10', [('m', []), ('M', ['LEFTSHIFT'])]),
         (('n', 'N'), '0x11', [('n', []), ('N', ['LEFTSHIFT'])]),
         (('o', 'O'), '0x12', [('o', []), ('O', ['LEFTSHIFT'])]),
         (('p', 'P'), '0x13', [('p', []), ('P', ['LEFTSHIFT'])]),
         (('q', 'Q'), '0x14', [('q', []), ('Q', ['LEFTSHIFT'])]),
         (('r', 'R'), '0x15', [('r', []), ('R', ['LEFTSHIFT'])]),
         (('s', 'S'), '0x16', [('s', []), ('S', ['LEFTSHIFT'])]),
         (('t', 'T'), '0x17', [('t', []), ('T', ['LEFTSHIFT'])]),
         (('u', 'U'), '0x18', [('u', []), ('U', ['LEFTSHIFT'])]),
         (('v', 'V'), '0x19', [('v', []), ('V', ['LEFTSHIFT'])]),
         (('w', 'W'), '0x1a', [('w', []), ('W', ['LEFTSHIFT'])]),
         (('x', 'X'), '0x1b', [('x', []), ('X', ['LEFTSHIFT'])]),
         (('y', 'Y'), '0x1c', [('y', []), ('Y', ['LEFTSHIFT'])]),
         (('z', 'Z'), '0x1d', [('z', []), ('Z', ['LEFTSHIFT'])]),
         (('1', '!'), '0x1e', [('1', []), ('!', ['LEFTSHIFT'])]),
         (('2', '@'), '0x1f', [('2', []), ('@', ['LEFTSHIFT'])]),
         (('3', '#'), '0x20', [('3', []), ('#', ['LEFTSHIFT'])]),
         (('4', '$'), '0x21', [('4', []), ('$', ['LEFTSHIFT'])]),
         (('5', '%'), '0x22', [('5', []), ('%', ['LEFTSHIFT'])]),
         (('6', '^'), '0x23', [('6', []), ('^', ['LEFTSHIFT'])]),
         (('7', '&'), '0x24', [('7', []), ('&', ['LEFTSHIFT'])]),
         (('8', '*'), '0x25', [('8', []), ('*', ['LEFTSHIFT'])]),
         (('9', '('), '0x26', [('9', []), ('(', ['LEFTSHIFT'])]),
         (('0', ')'), '0x27', [('0', []), (')', ['LEFTSHIFT'])]),
         (('-', '_'), '0x2d', [('-', []), ('_', ['LEFTSHIFT'])]),
         (('=', '+'), '0x2e', [('=', []), ('+', ['LEFTSHIFT'])]),
         (('[', '{'), '0x2f', [('[', []), ('{', ['LEFTSHIFT'])]),
         ((']', '}'), '0x30', [(']', []), ('}', ['LEFTSHIFT'])]),
         (('\\', '|'), '0x31', [('\\', []), ('|', ['LEFTSHIFT'])]),
         ((';', ':'), '0x33', [(';', []), (':', ['LEFTSHIFT'])]),
         (('\'', '"'), '0x34', [('\'', []), ('"', ['LEFTSHIFT'])]),
         (('`', '~'), '0x35', [('`', []), ('~', ['LEFTSHIFT'])]),
         ((',', '<'), '0x36', [(',', []), ('<', ['LEFTSHIFT'])]),
         (('.', '>'), '0x37', [('.', []), ('>', ['LEFTSHIFT'])]),
         (('/', '?'), '0x38', [('/', []), ('?', ['LEFTSHIFT'])]),
         ('ENTER', '0x28', [('', [])]),
         ('ESC', '0x29', [('', [])]),
         ('BACKSPACE', '0x2a', [('', [])]),
         ('TAB', '0x2b', [('', [])]),
         ('SPACE', '0x2c', [(' ', [])]),
         ('CAPSLOCK', '0x39', [('', [])]),
         ('F1', '0x3a', [('', [])]),
         ('F2', '0x3b', [('', [])]),
         ('F3', '0x3c', [('', [])]),
         ('F4', '0x3d', [('', [])]),
         ('F5', '0x3e', [('', [])]),
         ('F6', '0x3f', [('', [])]),
         ('F7', '0x40', [('', [])]),
         ('F8', '0x41', [('', [])]),
         ('F9', '0x42', [('', [])]),
         ('F10', '0x43', [('', [])]),
         ('F11', '0x44', [('', [])]),
         ('F12', '0x45', [('', [])]),
         ('DELETE', '0x4c', [('', [])]),
         ('CTRL_ALT_DEL', '0x4c', [('', ['CTRL', 'ALT'])]),
         ('CTRL_C', '0x06', [('', ['CTRL'])]),
         ('RIGHTARROW', '0x4f', [('', [])]),
         ('LEFTARROW', '0x50', [('', [])]),
         ('DOWNARROW', '0x51', [('', [])]),
         ('UPARROW', '0x52', [('', [])]),
     ]
Пример #7
0
 def __init__(self, module):
     super(PyVmomiHelper, self).__init__(module)
     self.change_detected = False
     self.usb_scan_code_spec = vim.UsbScanCodeSpec()
     self.num_keys_send = 0
     # HID usage tables https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf
     # define valid characters and keys value, hex_code, key value and key modifier
     self.keys_hid_code = [
         (("a", "A"), "0x04", [("a", []), ("A", ["LEFTSHIFT"])]),
         (("b", "B"), "0x05", [("b", []), ("B", ["LEFTSHIFT"])]),
         (("c", "C"), "0x06", [("c", []), ("C", ["LEFTSHIFT"])]),
         (("d", "D"), "0x07", [("d", []), ("D", ["LEFTSHIFT"])]),
         (("e", "E"), "0x08", [("e", []), ("E", ["LEFTSHIFT"])]),
         (("f", "F"), "0x09", [("f", []), ("F", ["LEFTSHIFT"])]),
         (("g", "G"), "0x0a", [("g", []), ("G", ["LEFTSHIFT"])]),
         (("h", "H"), "0x0b", [("h", []), ("H", ["LEFTSHIFT"])]),
         (("i", "I"), "0x0c", [("i", []), ("I", ["LEFTSHIFT"])]),
         (("j", "J"), "0x0d", [("j", []), ("J", ["LEFTSHIFT"])]),
         (("k", "K"), "0x0e", [("k", []), ("K", ["LEFTSHIFT"])]),
         (("l", "L"), "0x0f", [("l", []), ("L", ["LEFTSHIFT"])]),
         (("m", "M"), "0x10", [("m", []), ("M", ["LEFTSHIFT"])]),
         (("n", "N"), "0x11", [("n", []), ("N", ["LEFTSHIFT"])]),
         (("o", "O"), "0x12", [("o", []), ("O", ["LEFTSHIFT"])]),
         (("p", "P"), "0x13", [("p", []), ("P", ["LEFTSHIFT"])]),
         (("q", "Q"), "0x14", [("q", []), ("Q", ["LEFTSHIFT"])]),
         (("r", "R"), "0x15", [("r", []), ("R", ["LEFTSHIFT"])]),
         (("s", "S"), "0x16", [("s", []), ("S", ["LEFTSHIFT"])]),
         (("t", "T"), "0x17", [("t", []), ("T", ["LEFTSHIFT"])]),
         (("u", "U"), "0x18", [("u", []), ("U", ["LEFTSHIFT"])]),
         (("v", "V"), "0x19", [("v", []), ("V", ["LEFTSHIFT"])]),
         (("w", "W"), "0x1a", [("w", []), ("W", ["LEFTSHIFT"])]),
         (("x", "X"), "0x1b", [("x", []), ("X", ["LEFTSHIFT"])]),
         (("y", "Y"), "0x1c", [("y", []), ("Y", ["LEFTSHIFT"])]),
         (("z", "Z"), "0x1d", [("z", []), ("Z", ["LEFTSHIFT"])]),
         (("1", "!"), "0x1e", [("1", []), ("!", ["LEFTSHIFT"])]),
         (("2", "@"), "0x1f", [("2", []), ("@", ["LEFTSHIFT"])]),
         (("3", "#"), "0x20", [("3", []), ("#", ["LEFTSHIFT"])]),
         (("4", "$"), "0x21", [("4", []), ("$", ["LEFTSHIFT"])]),
         (("5", "%"), "0x22", [("5", []), ("%", ["LEFTSHIFT"])]),
         (("6", "^"), "0x23", [("6", []), ("^", ["LEFTSHIFT"])]),
         (("7", "&"), "0x24", [("7", []), ("&", ["LEFTSHIFT"])]),
         (("8", "*"), "0x25", [("8", []), ("*", ["LEFTSHIFT"])]),
         (("9", "("), "0x26", [("9", []), ("(", ["LEFTSHIFT"])]),
         (("0", ")"), "0x27", [("0", []), (")", ["LEFTSHIFT"])]),
         (("-", "_"), "0x2d", [("-", []), ("_", ["LEFTSHIFT"])]),
         (("=", "+"), "0x2e", [("=", []), ("+", ["LEFTSHIFT"])]),
         (("[", "{"), "0x2f", [("[", []), ("{", ["LEFTSHIFT"])]),
         (("]", "}"), "0x30", [("]", []), ("}", ["LEFTSHIFT"])]),
         (("\\", "|"), "0x31", [("\\", []), ("|", ["LEFTSHIFT"])]),
         ((";", ":"), "0x33", [(";", []), (":", ["LEFTSHIFT"])]),
         (("'", '"'), "0x34", [("'", []), ('"', ["LEFTSHIFT"])]),
         (("`", "~"), "0x35", [("`", []), ("~", ["LEFTSHIFT"])]),
         ((",", "<"), "0x36", [(",", []), ("<", ["LEFTSHIFT"])]),
         ((".", ">"), "0x37", [(".", []), (">", ["LEFTSHIFT"])]),
         (("/", "?"), "0x38", [("/", []), ("?", ["LEFTSHIFT"])]),
         ("ENTER", "0x28", [("", [])]),
         ("ESC", "0x29", [("", [])]),
         ("BACKSPACE", "0x2a", [("", [])]),
         ("TAB", "0x2b", [("", [])]),
         ("SPACE", "0x2c", [(" ", [])]),
         ("CAPSLOCK", "0x39", [("", [])]),
         ("F1", "0x3a", [("", [])]),
         ("F2", "0x3b", [("", [])]),
         ("F3", "0x3c", [("", [])]),
         ("F4", "0x3d", [("", [])]),
         ("F5", "0x3e", [("", [])]),
         ("F6", "0x3f", [("", [])]),
         ("F7", "0x40", [("", [])]),
         ("F8", "0x41", [("", [])]),
         ("F9", "0x42", [("", [])]),
         ("F10", "0x43", [("", [])]),
         ("F11", "0x44", [("", [])]),
         ("F12", "0x45", [("", [])]),
         ("DELETE", "0x4c", [("", [])]),
         ("CTRL_ALT_DEL", "0x4c", [("", ["CTRL", "ALT"])]),
         ("CTRL_C", "0x06", [("", ["CTRL"])]),
         ("RIGHTARROW", "0x4f", [("", [])]),
         ("LEFTARROW", "0x50", [("", [])]),
         ("DOWNARROW", "0x51", [("", [])]),
         ("UPARROW", "0x52", [("", [])]),
     ]
Пример #8
0
    return (int(hid, 16) << 16 | 0007)

def Keystroke(vm, (code, modifiers), args):
    tmp = vim.UsbScanCodeSpecKeyEvent()
    m = vim.UsbScanCodeSpecModifierType()
    if "KEY_LEFTSHIFT" in modifiers:
        m.leftShift = True
    if "KEY_RIGHTALT" in modifiers:
        m.rightAlt = True
    if "CTRL" in modifiers:
        m.leftControl = True
    if "ALT" in modifiers:
        m.leftAlt = True
    tmp.modifiers = m
    tmp.usbHidCode = HID2HEX(code)
    sp = vim.UsbScanCodeSpec()
    sp.keyEvents = [tmp]
    vm.PutUsbScanCodes(sp)
    if args.debug:
        print("Send : Keystroke: { code: %s, modifiers: %s } on VM : %s" % (code, modifiers, vm.name))

def getVM(args):
    try:
        vm = None
        socket.setdefaulttimeout(args.timeout)
        esxi = connect.SmartConnectNoSSL(host=args.host, user=args.username, pwd=args.password, port=args.port)
        atexit.register(connect.Disconnect, esxi)
        entity_stack = esxi.content.rootFolder.childEntity
        while entity_stack:
            entity = entity_stack.pop()
            if entity.name == args.vm: