def is_valid_result(result): if not isinstance(result, dict): return False for key, value in result.items(): if (not util.is_ipv4(key)) and (not util.is_ipv6(key)): return False if ((not isinstance(value, float)) and (not isinstance(value, int)) and (not isinstance(value, str))): return False return True
def is_valid_result(result): def check_name(node: dict): if "name" in node and (not isinstance(node["name"], str)): return False return True def check_cpes(node: dict): if "cpes" in node: if (not isinstance(node["cpes"], list)): return False for cpe in node["cpes"]: if not isinstance(cpe, str): return False return True def check_protocol(protocol: str): nonlocal value if protocol in value: if not isinstance(value, dict): return False for portid, port_node in value[protocol].items(): if (not isinstance(portid, str)) and (not isinstance( portid, int)): return False if isinstance(port_node, list): items = port_node else: items = [port_node] for port in items: if not isinstance(port, dict): return False if not check_name(port): return False if not check_cpes(port): return False if "service" in port and not isinstance( port["service"], str): return False return True if not isinstance(result, dict): return False for key, value in result.items(): if (not util.is_ipv4(key)) and (not util.is_ipv6) and (not key == "trust"): return False if (key == "trust" and (not isinstance(value, float)) and (not isinstance(value, float)) and (not isinstance(value, str))): return False if not isinstance(value, dict): return False if "os" in value: if isinstance(value["os"], list): items = value["os"] else: items = [value["os"]] for item in items: if not isinstance(item, dict): return False if not check_name(item): return False if not check_cpes(item): return False if not check_protocol("tcp"): return False if not check_protocol("udp"): return False return True
def is_valid_result(result): if not isinstance(result, dict): return False # check every entry for every IP for key, value in result.items(): if (not util.is_ipv4(key)) and (not util.is_ipv6(key)): return False if not isinstance(value, dict): return False # check all hosts for every port for portid_str, host_group in value.items(): if not isinstance(portid_str, str): return False # check validity of port number try: portid = int(portid_str) except ValueError: return False if not (1 <= portid <= 65535): return False if not isinstance(host_group, dict): return False # check all pages available for every host, indexed by status codes for webhost, node in host_group.items(): for status_code_str, pages in node.items(): # check validity of status code if not isinstance(status_code_str, str): return False try: status_code = int(status_code_str) except ValueError: return False if not (100 <= status_code < 600): return False # check validity of every web page node for path, page_info in pages.items(): if not path.startswith("/"): return False # check validity of keys and their node structure for page_key in page_info: if page_key in ("GET", "POST", "cookies", "instances"): if not isinstance(page_info[page_key], list): return False elif not page_key.startswith("misc_info"): return False # check validity of every instance if "instances" in page_info: for instance in page_info["instances"]: # check validity of keys and their node structure if any(ikey not in ("GET", "POST", "cookies") for ikey in instance): return False for param_key in ("GET", "POST", "cookies"): if param_key in instance and not isinstance( instance[param_key], dict): return False for k, v in instance[param_key].items( ): if not isinstance(k, str): return False if not isinstance(v, str): return False return True