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)
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
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))
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))
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', [('', [])]), ]
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", [("", [])]), ]
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: