def netscan_scapy(dev): network = ifconfig.getAddr(dev) netmask = ifconfig.getMask(dev) netsize = netmask2netsz(netmask) ans, unans = srp( Ether(dst="ff:ff:ff:ff:ff:ff") / \ ARP(pdst="{0}/{1}".format(network, netsize)), timeout=0.1, iface=dev) for request, responce in ans: yield responce.payload.fields['hwsrc'].upper(), responce.payload.fields['psrc']
def netscan_scapy(dev): network = ifconfig.getAddr(dev) netmask = ifconfig.getMask(dev) netsize = netmask2netsz(netmask) ans, unans = srp( Ether(dst="ff:ff:ff:ff:ff:ff") / \ ARP(pdst="{0}/{1}".format(network, netsize)), timeout=0.1, iface=dev) for request, responce in ans: yield responce.payload.fields['hwsrc'].upper( ), responce.payload.fields['psrc']
def start_vm(self, vmname, users, prepare_image=False): logger.info("Start vm/network {0} with credentials {1}".format( vmname, users)) vms = [ vm for vm in self.vms.values() if vm.name == vmname or vm.name.startswith(vmname + self.DOM_SEPARATOR) ] vm_names = " ".join(vm.name for vm in vms) logger.debug( "Found next vm's, which match name glob {0}".format(vm_names)) for vm in vms: logger.debug("Prepare vm {0}".format(vm.name)) path = os.path.join(self.root, self.templates[vm.htype]) vm_xml_templ = open(path).read() logger.info("Use template '{0}'".format(path)) vm_xm = fromstring(vm_xml_templ) el = Element('vcpu') el.text = str(vm.vcpu) vm_xm.append(el) el = Element('name') el.text = vm.name vm_xm.append(el) el = Element('memory') el.text = str(vm.mem * 1024) vm_xm.append(el) devs = vm_xm.find('devices') disk_emulator = self.defaults.get('disk_emulator', 'qemu') if 'virtio' in vm.opts: bus = 'virtio' else: bus = 'ide' if 'ide' == bus: dev_name_templ = 'hd' elif 'scsi' == bus: dev_name_templ = 'sd' elif 'virtio' == bus: dev_name_templ = 'vd' letters = [ chr(ord('a') + pos) for pos in range(ord('z') - ord('a')) ] for hdd_pos, image in enumerate(vm.images): if hdd_pos > len(letters): raise CloudError("To many HHD devices {0}".format( len(vm.images))) rimage = image dev_st = os.stat(rimage) while stat.S_ISLNK(dev_st.st_mode): rimage = os.readlink(rimage) dev_st = os.stat(rimage) dev = dev_name_templ + letters[hdd_pos] if stat.S_ISDIR(dev_st.st_mode): hdd = xmlbuilder.XMLBuilder('filesystem', type='mount') hdd.source(dir=image) hdd.target(dir='/') else: res = subprocess.check_output(['qemu-img', 'info', image]) hdr = "file format: " tp = None for line in res.split('\n'): if line.startswith(hdr): tp = line[len(hdr):].strip() assert tp is not None if stat.S_ISBLK(dev_st.st_mode): hdd = xmlbuilder.XMLBuilder('disk', device='disk', type='block') hdd.driver(name=disk_emulator, type=tp) hdd.source(dev=image) hdd.target(bus=bus, dev=dev) elif stat.S_ISREG(dev_st.st_mode): hdd = xmlbuilder.XMLBuilder('disk', device='disk', type='file') hdd.driver(name=disk_emulator, type=tp) hdd.source(file=image) hdd.target(bus=bus, dev=dev) else: raise CloudError( "Can't connect hdd device {0!r}".format(image)) devs.append(~hdd) eths = {} conn = self.get_vm_conn(vm.name) for eth in vm.eths(): edev = xmlbuilder.XMLBuilder('interface', type='network') edev.source(network=eth['network']) edev.mac(address=eth['mac']) devs.append(~edev) if 'ip' not in eth: eths[eth['name']] = (eth['mac'], 'dhcp', None, None) else: brdev = get_network_bridge(conn, eth['network']) addr = ifconfig.getAddr(brdev) mask = ifconfig.getMask(brdev) eths[eth['name']] = (eth['mac'], eth['ip'], netmask2netsz(mask), addr) if users is None: users = {vm.user: vm.passwd} try: if vm.htype == 'lxc': prepare_guest(vm.images[0], vm.name, users, eths, format='lxc') elif prepare_image: prepare_guest(vm.images[0], vm.name, users, eths) except CloudError as x: print "Can't update vm image -", x logger.debug("Image ready - start vm {0}".format(vm.name)) conn.createXML(tostring(vm_xm), 0) logger.debug("VM {0} started ok".format(vm.name)) conn.close()
def start_vm(self, vmname, users, prepare_image=False): logger.info("Start vm/network {0} with credentials {1}".format(vmname, users)) vms = [vm for vm in self.vms.values() if vm.name == vmname or vm.name.startswith(vmname + self.DOM_SEPARATOR)] vm_names = " ".join(vm.name for vm in vms) logger.debug("Found next vm's, which match name glob {0}".format(vm_names)) for vm in vms: logger.debug("Prepare vm {0}".format(vm.name)) path = os.path.join(self.root, self.templates[vm.htype]) vm_xml_templ = open(path).read() logger.info("Use template '{0}'".format(path)) vm_xm = fromstring(vm_xml_templ) el = Element('vcpu') el.text = str(vm.vcpu) vm_xm.append(el) el = Element('name') el.text = vm.name vm_xm.append(el) el = Element('memory') el.text = str(vm.mem * 1024) vm_xm.append(el) devs = vm_xm.find('devices') disk_emulator = self.defaults.get('disk_emulator', 'qemu') if 'virtio' in vm.opts: bus = 'virtio' else: bus = 'ide' if 'ide' == bus: dev_name_templ = 'hd' elif 'scsi' == bus: dev_name_templ = 'sd' elif 'virtio' == bus: dev_name_templ = 'vd' letters = [chr(ord('a') + pos) for pos in range(ord('z') - ord('a'))] for hdd_pos, image in enumerate(vm.images): if hdd_pos > len(letters): raise CloudError("To many HHD devices {0}".format(len(vm.images))) rimage = image dev_st = os.stat(rimage) while stat.S_ISLNK(dev_st.st_mode): rimage = os.readlink(rimage) dev_st = os.stat(rimage) dev = dev_name_templ + letters[hdd_pos] if stat.S_ISDIR(dev_st.st_mode): hdd = xmlbuilder.XMLBuilder('filesystem', type='mount') hdd.source(dir=image) hdd.target(dir='/') else: res = subprocess.check_output(['qemu-img', 'info', image]) hdr = "file format: " tp = None for line in res.split('\n'): if line.startswith(hdr): tp = line[len(hdr):].strip() assert tp is not None if stat.S_ISBLK(dev_st.st_mode): hdd = xmlbuilder.XMLBuilder('disk', device='disk', type='block') hdd.driver(name=disk_emulator, type=tp) hdd.source(dev=image) hdd.target(bus=bus, dev=dev) elif stat.S_ISREG(dev_st.st_mode): hdd = xmlbuilder.XMLBuilder('disk', device='disk', type='file') hdd.driver(name=disk_emulator, type=tp) hdd.source(file=image) hdd.target(bus=bus, dev=dev) else: raise CloudError("Can't connect hdd device {0!r}".format(image)) devs.append(~hdd) eths = {} conn = self.get_vm_conn(vm.name) for eth in vm.eths(): edev = xmlbuilder.XMLBuilder('interface', type='network') edev.source(network=eth['network']) edev.mac(address=eth['mac']) devs.append(~edev) if 'ip' not in eth: eths[eth['name']] = (eth['mac'], 'dhcp', None, None) else: brdev = get_network_bridge(conn, eth['network']) addr = ifconfig.getAddr(brdev) mask = ifconfig.getMask(brdev) eths[eth['name']] = (eth['mac'], eth['ip'], netmask2netsz(mask), addr) if users is None: users = {vm.user: vm.passwd} try: if vm.htype == 'lxc': prepare_guest(vm.images[0], vm.name, users, eths, format='lxc') elif prepare_image: prepare_guest(vm.images[0], vm.name, users, eths) except CloudError as x: print "Can't update vm image -", x logger.debug("Image ready - start vm {0}".format(vm.name)) conn.createXML(tostring(vm_xm), 0) logger.debug("VM {0} started ok".format(vm.name)) conn.close()