def main(workspace='', args=None, parser=None): parser.add_argument('name', help='Host name') parser.add_argument('os', help='OS') parser.add_argument( '--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) obj = factory.createModelObject(models.Host.class_signature, parsed_args.name, workspace, os=parsed_args.os, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) else: print "A host with ID %s already exists!" % obj.getID() return 2, None return 0, obj.getID()
def main(workspace='', args=None, parser=None): parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output from the pcapfile library.') parser.add_argument('pcap', help='Path to the PCAP file'), parsed_args = parser.parse_args(args) try: from scapy.all import PcapReader except ImportError: print 'capfile not found, please install it to use this plugin.' \ ' You can do install it by executing pip2 install scapy in a shell.' return 1, None if not os.path.isfile(parsed_args.pcap): print "pcap file not found: " % parsed_args.pcap return 2, None pcap = PcapReader(parsed_args.pcap) for (domain, ip) in get_domain_resolutions(pcap): obj = factory.createModelObject(models.Host.class_signature, ip, workspace, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: models.create_host(workspace, obj) interface = factory.createModelObject( models.Interface.class_signature, '', workspace, # mac=bssid, ipv4_address=ip, ipv4_gateway='', ipv4_mask='', ipv4_dns='', ipv6_address='', ipv6_gateway='', ipv6_prefix='', ipv6_dns='', network_segment='', hostnames=[domain], parent_id=obj.getID()) old = models.get_interface(workspace, obj.getID()) if old is None: try: models.create_interface(workspace, interface) except: pass return 0, None
def main(workspace='', args=None, parser=None): parser.add_argument('ip', help='Host IP') parser.add_argument('os', help='OS') parser.add_argument('mac', help='Interface MAC Address') parser.add_argument('--gateway', help='IPV4 or IPV6 Gateway', default='0.0.0.0') parser.add_argument('--netsegment', help='Network Segment', default='') parser.add_argument( '--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) params = { 'ip': parsed_args.ip, } obj_host = factory.createModelObject( models.Host.class_signature, parsed_args.ip, workspace, os=parsed_args.os, mac=parsed_args.mac, network_segment=parsed_args.netsegment, parent_id=None) old_host = models.get_host(workspace, **params) if old_host is None: if not parsed_args.dry_run: models.create_host(workspace, obj_host) old_host = models.get_host(workspace, **params) else: return 0, None else: print "A host with ID %s already exists!" % old_host.getID() return 2, None return 0, old_host.getID()
def main(workspace='', args=None, parser=None): parser.add_argument('ip', help='Host IP') parser.add_argument('os', help='OS') parser.add_argument('mac', help='Interface MAC Address') parser.add_argument('--gateway', help='IPV4 or IPV6 Gateway', default='0.0.0.0') parser.add_argument('--netsegment', help='Network Segment', default='') parser.add_argument('--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) params = { 'ip': parsed_args.ip, } obj_host = factory.createModelObject(models.Host.class_signature, parsed_args.ip, workspace, os=parsed_args.os, mac=parsed_args.mac, network_segment=parsed_args.netsegment, parent_id=None) old_host = models.get_host(workspace, **params) if old_host is None: if not parsed_args.dry_run: models.create_host(workspace, obj_host) old_host = models.get_host(workspace, **params) else: return 0, None else: print("A host with ID %s already exists!" % old_host.getID()) return 2, None return 0, old_host.getID()
def main(workspace='', args=None, parser=None): parser.add_argument('name', help='Host name') parser.add_argument('os', help='OS') parser.add_argument('--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) obj = factory.createModelObject(models.Host.class_signature, parsed_args.name, workspace, os=parsed_args.os, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) else: print "A host with ID %s already exists!" % obj.getID() return 2, None return 0, obj.getID()
def save_objs(workspace_name): """ This function uses a set to avoid hitting too much couchdb. Wifi packets usually are repeated, for example for beacons. :param workspace_name: :return: """ order = ['Host', 'Interface', 'Service', 'Vulnerability'] saved_ids = set() tmp = created_objs iterable = tmp.items() for type in order: for key, objs in iterable: if key == type: try: if key == 'Host': print('Total {0}: {1}'.format(key, len(objs))) for obj in objs: if obj.id in saved_ids: models.update_host(workspace_name, obj) else: models.create_host(workspace_name, obj) saved_ids.add(obj.id) if key == 'Service': print('Total {0}: {1}'.format(key, len(objs))) for obj in objs: if obj.id in saved_ids: models.update_service(workspace_name, obj) else: models.create_service(workspace_name, obj) saved_ids.add(obj.id) if key == 'Vulnerability': print('Total {0}: {1}'.format(key, len(objs))) for obj in objs: if obj.id in saved_ids: models.update_vuln(workspace_name, obj) else: models.create_vuln(workspace_name, obj) if key == 'Interface': print('Total {0}: {1}'.format(key, len(objs))) for obj in objs: if obj.id in saved_ids: models.update_interface(workspace_name, obj) else: models.create_interface(workspace_name, obj) saved_ids.add(obj.id) except ConflictInDatabase as e: print('Document already exists skipping.') print(e) continue except CantCommunicateWithServerError as e: print('error') print(e) except ResourceDoesNotExist as e: print('Missing DB {0}'.format(workspace_name)) print(e) continue except Exception as e: print(e)
def process_wigle_sqlite(workspace_name, wigle_filename): try: import sqlite3 except ImportError: print( 'For using wigle import, sqlite3 is required. Please install it with: pip install sqlite3' ) conn = sqlite3.connect(wigle_filename) cursor = conn.execute( 'SELECT bssid, ssid, capabilities, bestlat, bestlon from network') for network in cursor: bssid = network[0] essid = network[1] capability = network[2].lower() lat = network[4] lng = network[3] access_point = access_point_data[bssid] if 'wpa' in capability and 'wpa2' not in capability: encryption = 'wpa' if 'wpa2' in capability: encryption = 'wpa2' if 'wep' in capability: encryption = 'wep' if 'open' in capability: encryption = 'open' access_point['essid'] = essid access_point['bssid'] = bssid access_point['encryption'] = encryption access_point['lat'] = lat access_point['lng'] = lng create_host_interface_and_vuln(workspace_name, access_point) map_file = draw_map() map_file.seek(0) now_timestamp = time.time() host = factory.createModelObject(models.Host.class_signature, 'War driving results', workspace_name=workspace_name, parent_id=None) interface = factory.createModelObject(models.Interface.class_signature, '', workspace_name, mac=bssid, ipv4_address='', ipv4_gateway='', ipv4_mask='', ipv4_dns='', ipv6_address='', ipv6_gateway='', ipv6_prefix='', ipv6_dns='', network_segment='', parent_id=host.id) service = factory.createModelObject(models.Service.class_signature, encryption, workspace_name, protocol='802.11', status='open', description='Access point encryption', ports=[0], version='', service='open', parent_id=interface.id) try: models.create_host(workspace_name, host) except ConflictInDatabase: pass try: models.create_interface(workspace_name, interface) except ConflictInDatabase: pass try: models.create_service(workspace_name, service) except ConflictInDatabase: pass name = 'Wardriving Map' description = 'See evidence for war driving map.' parent_id = host.id raw_obj = { "metadata": { "update_time": now_timestamp, "update_user": "", "update_action": 0, "creator": "UI Web", "create_time": now_timestamp, "update_controller_action": "UI Web New", "owner": "" }, "obj_id": "0c41d85f6dc71044518eea211bfbd12f2bad6f73", "owner": "", "parent": parent_id, "type": "Vulnerability", "ws": "wifi", "confirmed": True, "data": "", "desc": description, "easeofresolution": "", "impact": { "accountability": False, "availability": False, "confidentiality": False, "integrity": False }, "name": name, "owned": False, "policyviolations": [], "refs": [], "resolution": "", "severity": "info", "status": "opened", "_attachments": { "map.png": { "content_type": "image/png", "data": b64encode(map_file.read()) } }, "protocol": "", "version": "" } obj = models.ModelBase(raw_obj, workspace_name) obj.setID(parent_id, name, description) vuln_id = obj.id raw_obj.update({"_id": vuln_id}) try: _save_to_couch(workspace_name, vuln_id, **raw_obj) except ConflictInDatabase: pass map_file.close()
def main(workspace="", args=None, parser=None): WORKSPACE = workspace parser.add_argument("--csv", help="Csv file to import") parsed_args = parser.parse_args(args) if not parsed_args.csv: print "Error: Give a CSV file to import with --csv" return 2, None try: file_csv = open(parsed_args.csv, "r") except: print "Error: Unreadeable CSV file, check the path" raise counter = 0 csv_reader = csv.DictReader(file_csv, delimiter=",", quotechar='"') for register in csv_reader: host, interface, service, vulnerability, vulnerability_web = parse_register(register) # Set all IDs and create objects if host is not None: host.setID(None) if not models.get_host(WORKSPACE, host.getID()): counter += 1 print "New host: " + host.getName() models.create_host(WORKSPACE, host) if interface is not None: interface.setID(host.getID()) if not models.get_interface(WORKSPACE, interface.getID()): counter += 1 print "New interface: " + interface.getName() models.create_interface(WORKSPACE, interface) if service is not None: service.setID(interface.getID()) if not models.get_service(WORKSPACE, service.getID()): counter += 1 print "New service: " + service.getName() models.create_service(WORKSPACE, service) # Check if Service exist, then create the vuln with parent Service. # If not exist the Service, create the vuln with parent Host. if vulnerability is not None: if service is None: vulnerability.setID(host.getID()) else: vulnerability.setID(service.getID()) if not models.get_vuln(WORKSPACE, vulnerability.getID()): counter += 1 print "New vulnerability: " + vulnerability.getName() models.create_vuln(WORKSPACE, vulnerability) elif vulnerability_web is not None: vulnerability_web.setID(service.getID()) if not models.get_web_vuln(WORKSPACE, vulnerability_web.getID()): counter += 1 print "New web vulnerability: " + vulnerability_web.getName() models.create_vuln_web(WORKSPACE, vulnerability_web) print "[*]", counter, "new Faraday objects created." file_csv.close() return 0, None
def main(workspace='', args=None, parser=None): parser.add_argument('-s', '--source', nargs='*', help='Filter packets by source'), parser.add_argument('-d', '--dest', nargs='*', help='Filter packets by destination'), parser.add_argument('--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output from the pcapfile library.') parser.add_argument('pcap', help='Path to the PCAP file'), parsed_args = parser.parse_args(args) try: from pcapfile import savefile import pcapfile except ImportError: print 'capfile not found, please install it to use this plugin.' \ ' You can do it executing pip2 install pcapfile in a shell.' return 1, None if not os.path.isfile(parsed_args.pcap): print "pcap file not found: " % parsed_args.pcap return 2, None testcap = open(parsed_args.pcap, 'rb') try: capfile = savefile.load_savefile(testcap, layers=2, verbose=parsed_args.verbose) except pcapfile.Error: print "Invalid pcap file" return 3, None print 'pcap file loaded. Parsing packets...' # Set() to store already added hosts. This will save an enormous amount of time by not querying the database # for hosts we already know are in Faraday added = set() for packet in capfile.packets: if packet.packet.type != 2048: continue src = packet.packet.payload.src dst = packet.packet.payload.dst if parsed_args.source and not src in parsed_args.source: continue if parsed_args.dest and not dst in parsed_args.dest: continue if src not in added: # Lets save additional queries for this IP, it will already be on the database anyway! added.add(packet.packet.payload.src) # Parsing of source field obj = factory.createModelObject(models.Host.class_signature, src, workspace, os=None, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) print '%s\t%s' % (src, obj.getID()) if dst not in added: # Lets save additional queries for this IP, it will already be on the database anyway! added.add(packet.packet.payload.dst) # Parsing of destination field obj = factory.createModelObject(models.Host.class_signature, dst, workspace, os=None, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) print '%s\t%s' % (dst, obj.getID()) return 0, None
def main(workspace="", args=None, parser=None): WORKSPACE = workspace parser.add_argument("--csv", help="Csv file to import") parsed_args = parser.parse_args(args) if not parsed_args.csv: print "Error: Give a CSV file to import with --csv" return 2, None try: file_csv = open(parsed_args.csv, "r") except: print "Error: Unreadeable CSV file, check the path" raise counter = 0 csv_reader = csv.DictReader(file_csv, delimiter=",", quotechar='"') for register in csv_reader: host, service, vulnerability, vulnerability_web = parse_register(register) # Set all IDs and create objects if host is not None: old_host = models.get_host(WORKSPACE, ip=host.getName()) if not old_host: counter += 1 print "New host: " + host.getName() models.create_host(WORKSPACE, host) host = models.get_host(WORKSPACE, ip=host.getName()) if service is not None: service.setParent(host.getID()) service_params = { 'name': service.getName(), 'port': service.getPorts()[0], 'protocol': service.getProtocol(), 'host_id': service.getParent() } old_service = models.get_service(WORKSPACE, **service_params) if not old_service: counter += 1 print "New service: " + service.getName() models.create_service(WORKSPACE, service) service = models.get_service(WORKSPACE, **service_params) # Check if Service exist, then create the vuln with parent Service. # If not exist the Service, create the vuln with parent Host. if vulnerability is not None: if host and not service: parent_type = 'Host' parent_id = host.getID() if host and service: parent_type = 'Service' parent_id = service.getID() vulnerability.setParent(parent_id) vulnerability.setParentType(parent_type) vuln_params = { 'name': vulnerability.getName(), 'description': vulnerability.getDescription(), 'parent_type': parent_type, 'parent': parent_id, } if not models.get_vuln(WORKSPACE, **vuln_params): counter += 1 print "New vulnerability: " + vulnerability.getName() models.create_vuln(WORKSPACE, vulnerability) elif vulnerability_web is not None: vuln_web_params = { 'name': vulnerability_web.getName(), 'description': vulnerability_web.getDescription(), 'parent': service.getID(), 'parent_type': 'Service', 'method': vulnerability_web.getMethod(), 'parameter_name': vulnerability_web.getParams(), 'path': vulnerability_web.getPath(), 'website': vulnerability_web.getWebsite(), } vulnerability_web.setParent(service.getID()) if not models.get_web_vuln(WORKSPACE, **vuln_web_params): counter += 1 print "New web vulnerability: " + vulnerability_web.getName() models.create_vuln_web(WORKSPACE, vulnerability_web) print "[*]", counter, "new Faraday objects created." file_csv.close() return 0, None
def main(workspace="", args=None, parser=None): WORKSPACE = workspace parser.add_argument("--csv", help="Csv file to import") parsed_args = parser.parse_args(args) if not parsed_args.csv: print "Error: Give a CSV file to import with --csv" return 2, None try: file_csv = open(parsed_args.csv, "r") except: print "Error: Unreadeable CSV file, check the path" raise counter = 0 csv_reader = csv.DictReader(file_csv, delimiter=",", quotechar='"') for register in csv_reader: host, interface, service, vulnerability, vulnerability_web = parse_register( register) # Set all IDs and create objects if host is not None: host.setID(None) if not models.get_host(WORKSPACE, host.getID()): counter += 1 print "New host: " + host.getName() models.create_host(WORKSPACE, host) if interface is not None: interface.setID(host.getID()) if not models.get_interface(WORKSPACE, interface.getID()): counter += 1 print "New interface: " + interface.getName() models.create_interface(WORKSPACE, interface) if service is not None: service.setID(interface.getID()) if not models.get_service(WORKSPACE, service.getID()): counter += 1 print "New service: " + service.getName() models.create_service(WORKSPACE, service) # Check if Service exist, then create the vuln with parent Service. # If not exist the Service, create the vuln with parent Host. if vulnerability is not None: if service is None: vulnerability.setID(host.getID()) else: vulnerability.setID(service.getID()) if not models.get_vuln(WORKSPACE, vulnerability.getID()): counter += 1 print "New vulnerability: " + vulnerability.getName() models.create_vuln(WORKSPACE, vulnerability) elif vulnerability_web is not None: vulnerability_web.setID(service.getID()) if not models.get_web_vuln(WORKSPACE, vulnerability_web.getID()): counter += 1 print "New web vulnerability: " + vulnerability_web.getName() models.create_vuln_web(WORKSPACE, vulnerability_web) print "[*]", counter, "new Faraday objects created." file_csv.close() return 0, None
def main(workspace='', args=None, parser=None): parser.add_argument('-s', '--source', nargs='*', help='Filter packets by source'), parser.add_argument('-d', '--dest', nargs='*', help='Filter packets by destination'), parser.add_argument( '--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output from the pcapfile library.') parser.add_argument('pcap', help='Path to the PCAP file'), parsed_args = parser.parse_args(args) try: from pcapfile import savefile import pcapfile except ImportError: print 'capfile not found, please install it to use this plugin.' \ ' You can do it executing pip2 install pcapfile in a shell.' return 1, None if not os.path.isfile(parsed_args.pcap): print "pcap file not found: " % parsed_args.pcap return 2, None testcap = open(parsed_args.pcap, 'rb') try: capfile = savefile.load_savefile(testcap, layers=2, verbose=parsed_args.verbose) except pcapfile.Error: print "Invalid pcap file" return 3, None print 'pcap file loaded. Parsing packets...' # Set() to store already added hosts. This will save an enormous amount of time by not querying the database # for hosts we already know are in Faraday added = set() for packet in capfile.packets: if packet.packet.type != 2048: continue src = packet.packet.payload.src dst = packet.packet.payload.dst if parsed_args.source and not src in parsed_args.source: continue if parsed_args.dest and not dst in parsed_args.dest: continue if src not in added: # Lets save additional queries for this IP, it will already be on the database anyway! added.add(packet.packet.payload.src) # Parsing of source field obj = factory.createModelObject(models.Host.class_signature, src, workspace, os=None, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) print '%s\t%s' % (src, obj.getID()) if dst not in added: # Lets save additional queries for this IP, it will already be on the database anyway! added.add(packet.packet.payload.dst) # Parsing of destination field obj = factory.createModelObject(models.Host.class_signature, dst, workspace, os=None, parent_id=None) old = models.get_host(workspace, obj.getID()) if old is None: if not parsed_args.dry_run: models.create_host(workspace, obj) print '%s\t%s' % (dst, obj.getID()) return 0, None
def main(workspace="", args=None, parser=None): WORKSPACE = workspace parser.add_argument("--csv", help="Csv file to import") parsed_args = parser.parse_args(args) if not parsed_args.csv: print "Error: Give a CSV file to import with --csv" return 2, None try: file_csv = open(parsed_args.csv, "r") except: print "Error: Unreadeable CSV file, check the path" raise counter = 0 csv_reader = csv.DictReader(file_csv, delimiter=",", quotechar='"') for register in csv_reader: try: host, service, vulnerability, vulnerability_web = parse_register(register) # Set all IDs and create objects if host is not None: old_host = models.get_host(WORKSPACE, ip=host.getName()) if not old_host: counter += 1 print "New host: " + host.getName() try: models.create_host(WORKSPACE, host) except Exception as ex: import ipdb; ipdb.set_trace() host = models.get_host(WORKSPACE, ip=host.getName()) if service is not None: service.setParent(host.getID()) service_params = { 'name': service.getName(), 'port': service.getPorts()[0], 'protocol': service.getProtocol(), 'host_id': service.getParent() } old_service = models.get_service(WORKSPACE, **service_params) if not old_service: counter += 1 print "New service: " + service.getName() models.create_service(WORKSPACE, service) service = models.get_service(WORKSPACE, **service_params) # Check if Service exist, then create the vuln with parent Service. # If not exist the Service, create the vuln with parent Host. if vulnerability is not None: if host and not service: parent_type = 'Host' parent_id = host.getID() if host and service: parent_type = 'Service' parent_id = service.getID() vulnerability.setParent(parent_id) vulnerability.setParentType(parent_type) vuln_params = { 'name': vulnerability.getName(), 'description': vulnerability.getDescription(), 'parent_type': parent_type, 'parent': parent_id, } if not models.get_vuln(WORKSPACE, **vuln_params): counter += 1 print "New vulnerability: " + vulnerability.getName() models.create_vuln(WORKSPACE, vulnerability) elif vulnerability_web is not None: vuln_web_params = { 'name': vulnerability_web.getName(), 'description': vulnerability_web.getDescription(), 'parent': service.getID(), 'parent_type': 'Service', 'method': vulnerability_web.getMethod(), 'parameter_name': vulnerability_web.getParams(), 'path': vulnerability_web.getPath(), 'website': vulnerability_web.getWebsite(), } vulnerability_web.setParent(service.getID()) if not models.get_web_vuln(WORKSPACE, **vuln_web_params): counter += 1 print "New web vulnerability: " + vulnerability_web.getName() models.create_vuln_web(WORKSPACE, vulnerability_web) except ConflictInDatabase: print('Conflict in Database, skiping csv row') except CantCommunicateWithServerError as ex: print(register) print('Error', ex) print "[*]", counter, "new Faraday objects created." file_csv.close() return 0, None
def main(workspace='', args=None, parser=None): parser.add_argument('host_name', help='Host name') parser.add_argument('os', help='OS') parser.add_argument('interface_name', help='Interface Name') parser.add_argument('mac', help='Interface MAC Address') parser.add_argument('--ipv4address', help='IPV4 Address', default='0.0.0.0') parser.add_argument('--ipv4gateway', help='IPV4 Gateway', default='0.0.0.0') parser.add_argument('--ipv4mask', help='IPV4 Mask', default='0.0.0.0') parser.add_argument('--ipv4dns', help='IPV4 DNS, as a comma separated list', default='[]') parser.add_argument('--ipv6address', help='IPV6 Address', default='0000:0000:0000:0000:0000:0000:0000:0000') parser.add_argument('--ipv6prefix', help='IPV6 Prefix', default='00') parser.add_argument('--ipv6gateway', help='IPV4 Gateway', default='0000:0000:0000:0000:0000:0000:0000:0000') parser.add_argument('--ipv6dns', help='IPV6 DNS, as a comma separated list', default='') parser.add_argument('--netsegment', help='Network Segment', default='') parser.add_argument('--hostres', help='Hostname Resolution', default='') parser.add_argument( '--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) obj_host = factory.createModelObject(models.Host.class_signature, parsed_args.host_name, workspace, os=parsed_args.os, parent_id=None) old_host = models.get_host(workspace, obj_host.getID()) if old_host is None: if not parsed_args.dry_run: models.create_host(workspace, obj_host) else: print "A host with ID %s already exists!" % obj_host.getID() return 2, None obj_interface = factory.createModelObject( models.Interface.class_signature, parsed_args.interface_name, workspace, mac=parsed_args.mac, ipv4_address=parsed_args.ipv4address, ipv4_mask=parsed_args.ipv4mask, ipv4_gateway=parsed_args.ipv4gateway, ipv4_dns=parsed_args.ipv4dns, ipv6_address=parsed_args.ipv6address, ipv6_prefix=parsed_args.ipv6prefix, ipv6_gateway=parsed_args.ipv6gateway, ipv6_dns=parsed_args.ipv6dns, network_segment=parsed_args.netsegment, hostname_resolution=parsed_args.hostres, parent_id=obj_host.getID()) old_interface = models.get_interface(workspace, obj_interface.getID()) if old_interface is None: if not parsed_args.dry_run: models.create_interface(workspace, obj_interface) else: print "An interface with ID %s already exists!" % obj_interface.getID() return 2, None return 0, obj_interface.getID()
def main(workspace='', args=None, parser=None): parser.add_argument('host_name', help='Host name') parser.add_argument('os', help='OS') parser.add_argument('interface_name', help='Interface Name') parser.add_argument('mac', help='Interface MAC Address') parser.add_argument('--ipv4address', help='IPV4 Address', default='0.0.0.0') parser.add_argument('--ipv4gateway', help='IPV4 Gateway', default='0.0.0.0') parser.add_argument('--ipv4mask', help='IPV4 Mask', default='0.0.0.0') parser.add_argument('--ipv4dns', help='IPV4 DNS, as a comma separated list', default='[]') parser.add_argument('--ipv6address', help='IPV6 Address', default='0000:0000:0000:0000:0000:0000:0000:0000') parser.add_argument('--ipv6prefix', help='IPV6 Prefix', default='00') parser.add_argument('--ipv6gateway', help='IPV4 Gateway', default='0000:0000:0000:0000:0000:0000:0000:0000') parser.add_argument('--ipv6dns', help='IPV6 DNS, as a comma separated list', default='') parser.add_argument('--netsegment', help='Network Segment', default='') parser.add_argument('--hostres', help='Hostname Resolution', default='') parser.add_argument('--dry-run', action='store_true', help='Do not touch the database. Only print the object ID') parsed_args = parser.parse_args(args) obj_host = factory.createModelObject(models.Host.class_signature, parsed_args.host_name, workspace, os=parsed_args.os, parent_id=None) old_host = models.get_host(workspace, obj_host.getID()) if old_host is None: if not parsed_args.dry_run: models.create_host(workspace, obj_host) else: print "A host with ID %s already exists!" % obj_host.getID() return 2, None obj_interface = factory.createModelObject(models.Interface.class_signature, parsed_args.interface_name, workspace, mac=parsed_args.mac, ipv4_address=parsed_args.ipv4address, ipv4_mask=parsed_args.ipv4mask, ipv4_gateway=parsed_args.ipv4gateway, ipv4_dns=parsed_args.ipv4dns, ipv6_address=parsed_args.ipv6address, ipv6_prefix=parsed_args.ipv6prefix, ipv6_gateway=parsed_args.ipv6gateway, ipv6_dns=parsed_args.ipv6dns, network_segment=parsed_args.netsegment, hostname_resolution=parsed_args.hostres, parent_id= obj_host.getID() ) old_interface = models.get_interface(workspace, obj_interface.getID()) if old_interface is None: if not parsed_args.dry_run: models.create_interface(workspace, obj_interface) else: print "An interface with ID %s already exists!" % obj_interface.getID() return 2, None return 0, obj_interface.getID()