def make_graph_from_hosts(hosts): #hosts = parser.get_root().search_children('host', deep=True) graph = Graph() nodes = list() node_cache = {} # Setting initial reference host main_node = NetNode() nodes.append(main_node) localhost = TracerouteHostInfo() localhost.ip = {"addr": "127.0.0.1/8", "type": "ipv4"} localhost.hostname = "localhost" main_node.set_host(localhost) main_node.set_draw_info({ "valid": True, "color": (0, 0, 0), "radius": NONE_RADIUS }) #Save endpoints for attaching scanned hosts to endpoints = {} # For each host in hosts just mount the graph for host in hosts: trace = host.trace endpoints[host] = nodes[0] hops = trace.get("hops") # If host has traceroute information mount graph if hops is not None and len(hops) > 0: prev_node = nodes[0] hops = trace.get("hops", []) ttls = [int(hop["ttl"]) for hop in hops] # Getting nodes of host by ttl for ttl in range(1, max(ttls) + 1): if ttl in ttls: # Find a hop by ttl hop = None for h in hops: if ttl == int(h["ttl"]): hop = h break node = node_cache.get(hop["ipaddr"]) if node is None: node = NetNode() nodes.append(node) hop_host = TracerouteHostInfo() hop_host.ip = { "addr": hop["ipaddr"], "type": "", "vendor": "" } node.set_draw_info({"valid": True}) node.set_draw_info({ "color": (1, 1, 1), "radius": NONE_RADIUS }) if hop["host"] != "": hop_host.hostname = hop["host"] node.set_host(hop_host) node_cache[node.get_info("ip")] = node rtt = hop["rtt"] if rtt != "--": graph.set_connection(node, prev_node, float(rtt)) else: graph.set_connection(node, prev_node) else: node = NetNode() nodes.append(node) node.set_draw_info({"valid": False}) node.set_draw_info({ "color": (1, 1, 1), "radius": NONE_RADIUS }) graph.set_connection(node, prev_node) prev_node = node endpoints[host] = node # For each fully scanned host for host in hosts: ip = host.ip if ip is None: ip = host.ipv6 node = node_cache.get(ip["addr"]) if node is None: node = NetNode() nodes.append(node) node.set_draw_info({"no_route": True}) graph.set_connection(node, endpoints[host]) node.set_draw_info({"valid": True}) node.set_draw_info({"scanned": True}) set_node_info(node, host) node_cache[node.get_info("ip")] = node graph.set_nodes(nodes) graph.set_main_node(main_node) return graph
def make_graph_from_hosts(hosts): #hosts = parser.get_root().search_children('host', deep=True) graph = Graph() nodes = list() node_cache = {} ancestor_node_cache = {} descendant_node_cache = {} # Setting initial reference host main_node = NetNode() nodes.append(main_node) localhost = TracerouteHostInfo() localhost.ip = {"addr": "127.0.0.1/8", "type": "ipv4"} localhost.hostname = "localhost" main_node.set_host(localhost) main_node.set_draw_info({ "valid": True, "color": (0, 0, 0), "radius": NONE_RADIUS }) #Save endpoints for attaching scanned hosts to endpoints = {} # For each host in hosts just mount the graph for host in hosts: trace = host.trace endpoints[host] = nodes[0] hops = trace.get("hops") # If host has traceroute information mount graph if hops is not None and len(hops) > 0: prev_node = nodes[0] hops = trace.get("hops", []) ttls = [int(hop["ttl"]) for hop in hops] # Getting nodes of host by ttl for ttl in range(1, max(ttls) + 1): if ttl in ttls: hop = find_hop_by_ttl(hops, ttl) node = node_cache.get(hop["ipaddr"]) if node is None: node = NetNode() nodes.append(node) hop_host = TracerouteHostInfo() hop_host.ip = { "addr": hop["ipaddr"], "type": "", "vendor": "" } node.set_draw_info({"valid": True}) node.set_draw_info({ "color": (1, 1, 1), "radius": NONE_RADIUS }) if hop["host"] != "": hop_host.hostname = hop["host"] node.set_host(hop_host) node_cache[node.get_info("ip")] = node rtt = hop["rtt"] if rtt != "--": graph.set_connection(node, prev_node, float(rtt)) else: graph.set_connection(node, prev_node) else: # Add an "anonymous" node only if there isn't already a node # equivalent to it (i.e. at same distance from the previous # "real" node) pre_hop = None pre_hop_distance = 0 for i in range(1, ttl + 1): pre_hop = find_hop_by_ttl(hops, ttl - i) if pre_hop is not None: pre_hop_distance = i break post_hop = None post_hop_distance = 0 for i in range(1, max(ttls) - ttl): post_hop = find_hop_by_ttl(hops, ttl + i) if post_hop is not None: post_hop_distance = i break assert pre_hop is not None, "pre_hop should have become localhost if nothing else" ancestor_key = (pre_hop["ipaddr"], pre_hop_distance) descendant_key = None if post_hop is not None: descendant_key = (post_hop["ipaddr"], post_hop_distance) if ancestor_key in ancestor_node_cache: node = ancestor_node_cache[ancestor_key] elif descendant_key is not None and descendant_key in descendant_node_cache: node = descendant_node_cache[descendant_key] graph.set_connection(node, prev_node) else: node = NetNode() nodes.append(node) node.set_draw_info({"valid": False}) node.set_draw_info({ "color": (1, 1, 1), "radius": NONE_RADIUS }) graph.set_connection(node, prev_node) ancestor_node_cache[ancestor_key] = node if descendant_key is not None: descendant_node_cache[descendant_key] = node prev_node = node endpoints[host] = node # For each fully scanned host for host in hosts: ip = host.ip if ip is None: ip = host.ipv6 node = node_cache.get(ip["addr"]) if node is None: node = NetNode() nodes.append(node) node.set_draw_info({"no_route": True}) graph.set_connection(node, endpoints[host]) node.set_draw_info({"valid": True}) node.set_draw_info({"scanned": True}) set_node_info(node, host) node_cache[node.get_info("ip")] = node graph.set_nodes(nodes) graph.set_main_node(main_node) return graph
def make_graph_from_hosts(hosts): #hosts = parser.get_root().search_children('host', deep=True) graph = Graph() nodes = list() node_cache = {} # Setting initial reference host main_node = NetNode() nodes.append(main_node) localhost = TracerouteHostInfo() localhost.ip = {"addr": "127.0.0.1/8", "type": "ipv4"} localhost.hostname = "localhost" main_node.set_host(localhost) main_node.set_draw_info( {"valid": True, "color": (0, 0, 0), "radius": NONE_RADIUS}) #Save endpoints for attaching scanned hosts to endpoints = {} # For each host in hosts just mount the graph for host in hosts: trace = host.trace endpoints[host] = nodes[0] hops = trace.get("hops") # If host has traceroute information mount graph if hops is not None and len(hops) > 0: prev_node = nodes[0] hops = trace.get("hops", []) ttls = [int(hop["ttl"]) for hop in hops] # Getting nodes of host by ttl for ttl in range(1, max(ttls) + 1): if ttl in ttls: # Find a hop by ttl hop = None for h in hops: if ttl == int(h["ttl"]): hop = h break node = node_cache.get(hop["ipaddr"]) if node is None: node = NetNode() nodes.append(node) hop_host = TracerouteHostInfo() hop_host.ip = { "addr": hop["ipaddr"], "type": "", "vendor": "" } node.set_draw_info({"valid": True}) node.set_draw_info({"color": (1, 1, 1), "radius": NONE_RADIUS}) if hop["host"] != "": hop_host.hostname = hop["host"] node.set_host(hop_host) node_cache[node.get_info("ip")] = node rtt = hop["rtt"] if rtt != "--": graph.set_connection(node, prev_node, float(rtt)) else: graph.set_connection(node, prev_node) else: node = NetNode() nodes.append(node) node.set_draw_info({"valid": False}) node.set_draw_info( {"color": (1, 1, 1), "radius": NONE_RADIUS}) graph.set_connection(node, prev_node) prev_node = node endpoints[host] = node # For each fully scanned host for host in hosts: ip = host.ip if ip is None: ip = host.ipv6 node = node_cache.get(ip["addr"]) if node is None: node = NetNode() nodes.append(node) node.set_draw_info({"no_route": True}) graph.set_connection(node, endpoints[host]) node.set_draw_info({"valid": True}) node.set_draw_info({"scanned": True}) set_node_info(node, host) node_cache[node.get_info("ip")] = node graph.set_nodes(nodes) graph.set_main_node(main_node) return graph
def make_graph_from_hosts(hosts): #hosts = parser.get_root().search_children('host', deep=True) graph = Graph() nodes = list() node_cache = {} ancestor_node_cache = {} descendant_node_cache = {} # Setting initial reference host main_node = NetNode() nodes.append(main_node) localhost = TracerouteHostInfo() localhost.ip = {"addr": "127.0.0.1/8", "type": "ipv4"} localhost.hostname = "localhost" main_node.set_host(localhost) main_node.set_draw_info( {"valid": True, "color": (0, 0, 0), "radius": NONE_RADIUS}) #Save endpoints for attaching scanned hosts to endpoints = {} # For each host in hosts just mount the graph for host in hosts: trace = host.trace endpoints[host] = nodes[0] hops = trace.get("hops") # If host has traceroute information mount graph if hops is not None and len(hops) > 0: prev_node = nodes[0] hops = trace.get("hops", []) ttls = [int(hop["ttl"]) for hop in hops] # Getting nodes of host by ttl for ttl in range(1, max(ttls) + 1): if ttl in ttls: hop = find_hop_by_ttl(hops, ttl) node = node_cache.get(hop["ipaddr"]) if node is None: node = NetNode() nodes.append(node) hop_host = TracerouteHostInfo() hop_host.ip = { "addr": hop["ipaddr"], "type": "", "vendor": "" } node.set_draw_info({"valid": True}) node.set_draw_info({"color": (1, 1, 1), "radius": NONE_RADIUS}) if hop["host"] != "": hop_host.hostname = hop["host"] node.set_host(hop_host) node_cache[node.get_info("ip")] = node rtt = hop["rtt"] if rtt != "--": graph.set_connection(node, prev_node, float(rtt)) else: graph.set_connection(node, prev_node) else: # Add an "anonymous" node only if there isn't already a node # equivalent to it (i.e. at same distance from the previous # "real" node) pre_hop = None pre_hop_distance = 0 for i in range(1, ttl + 1): pre_hop = find_hop_by_ttl(hops, ttl-i) if pre_hop is not None: pre_hop_distance = i break post_hop = None post_hop_distance = 0 for i in range(1, max(ttls) - ttl): post_hop = find_hop_by_ttl(hops, ttl+i) if post_hop is not None: post_hop_distance = i break assert pre_hop is not None, "pre_hop should have become localhost if nothing else" ancestor_key = (pre_hop["ipaddr"], pre_hop_distance) descendant_key = None if post_hop is not None: descendant_key = (post_hop["ipaddr"], post_hop_distance) if ancestor_key in ancestor_node_cache: node = ancestor_node_cache[ancestor_key] elif descendant_key is not None and descendant_key in descendant_node_cache: node = descendant_node_cache[descendant_key] graph.set_connection(node, prev_node) else: node = NetNode() nodes.append(node) node.set_draw_info({"valid":False}) node.set_draw_info({"color":(1,1,1), "radius":NONE_RADIUS}) graph.set_connection(node, prev_node) ancestor_node_cache[ancestor_key] = node if descendant_key is not None: descendant_node_cache[descendant_key] = node prev_node = node endpoints[host] = node # For each fully scanned host for host in hosts: ip = host.ip if ip is None: ip = host.ipv6 node = node_cache.get(ip["addr"]) if node is None: node = NetNode() nodes.append(node) node.set_draw_info({"no_route": True}) graph.set_connection(node, endpoints[host]) node.set_draw_info({"valid": True}) node.set_draw_info({"scanned": True}) set_node_info(node, host) node_cache[node.get_info("ip")] = node graph.set_nodes(nodes) graph.set_main_node(main_node) return graph
def make_graph_from_hosts(hosts): #hosts = parser.get_root().search_children('host', deep=True) graph = Graph() nodes = list() index = 1 # Setting initial reference host nodes.append(NetNode(0)) node = nodes[-1] node.set_info({"ip": "127.0.0.1/8", "hostname": "localhost"}) node.set_draw_info({"color": (0, 0, 0), "radius": NONE_RADIUS}) # For each host in hosts just mount the graph for host in hosts: trace = host.trace hops = trace.get("hops") # If host has traceroute information mount graph if hops is not None and len(hops) > 0: prev_node = nodes[0] hops = trace.get("hops", []) ttls = [int(hop["ttl"]) for hop in hops] # Getting nodes of host by ttl for ttl in range(1, max(ttls) + 1): if ttl in ttls: # Find a hop by ttl hop = None for h in hops: if ttl == int(h["ttl"]): hop = h break for node in nodes: if hop["ipaddr"] == node.get_info("ip"): break else: nodes.append(NetNode(index)) node = nodes[-1] index += 1 node.set_draw_info({"valid": True}) node.set_info({"ip": hop["ipaddr"]}) node.set_draw_info({ "color": (1, 1, 1), "radius": NONE_RADIUS }) if hop["host"] != "": node.set_info({"hostname": hop["host"]}) rtt = hop["rtt"] if rtt != "--": graph.set_connection(node, prev_node, float(rtt)) else: graph.set_connection(node, prev_node) else: nodes.append(NetNode(index)) node = nodes[-1] index += 1 node.set_draw_info({"valid": False}) node.set_info({"ip": None, "hostname": None}) node.set_draw_info({ "color": (1, 1, 1), "radius": NONE_RADIUS }) graph.set_connection(node, prev_node) prev_node = node # For each fully scanned host for host in hosts: ip = host.ip if len(ip) == 0: ip = host.ipv6 for node in nodes: if ip["addr"] == node.get_info("ip"): break else: nodes.append(NetNode(index)) node = nodes[-1] index += 1 node.set_draw_info({"no_route": True}) graph.set_connection(node, nodes[0]) node.set_draw_info({"valid": True}) node.set_info({"scanned": True}) set_node_info(node, host) graph.set_nodes(nodes) graph.set_main_node_by_id(0) return graph
def make_graph_from_nmap_parser(parser): """ """ hosts = parser.get_root().search_children('host', deep=True) graph = Graph() nodes = list() index = 1 # setting initial reference host nodes.append(NetNode(0)) node = nodes[-1] node.set_info({'ip': '127.0.0.1/8', 'hostname': 'localhost'}) node.set_draw_info({'color': (0, 0, 0), 'radius': NONE_RADIUS}) # for each host in hosts just mount the graph for host in hosts: trace = host.search_children('trace', True, True) # if host has traceroute information mount graph if trace != None: prev_node = nodes[0] hops = trace.search_children('hop') ttls = [int(hop.get_attr('ttl')) for hop in hops] # getting nodes of host by ttl for ttl in range(1, max(ttls) + 1): if ttl in ttls: hop = trace.query_children('hop', 'ttl', ttl, True) for node in nodes: if hop.get_attr('ipaddr') == node.get_info('ip'): break else: nodes.append(NetNode(index)) node = nodes[-1] index += 1 node.set_draw_info({'valid': True}) node.set_info({'ip': hop.get_attr('ipaddr')}) node.set_draw_info({ 'color': (1, 1, 1), 'radius': NONE_RADIUS }) if hop.get_attr('host') != None: node.set_info({'hostname': hop.get_attr('host')}) rtt = hop.get_attr('rtt') if rtt != '--': graph.set_connection(node, prev_node, float(rtt)) else: graph.set_connection(node, prev_node) else: nodes.append(NetNode(index)) node = nodes[-1] index += 1 node.set_draw_info({'valid': False}) node.set_info({'ip': None, 'hostname': None}) node.set_draw_info({ 'color': (1, 1, 1), 'radius': NONE_RADIUS }) graph.set_connection(node, prev_node) prev_node = node # for each full scanned host for host in hosts: ip = host.query_children('address', 'addrtype', 'ipv4', True) if ip == None: ip = host.query_children('address', 'addrtype', 'ipv6', True) for node in nodes: if ip.get_attr('addr') == node.get_info('ip'): break else: nodes.append(NetNode(index)) node = nodes[-1] index += 1 node.set_draw_info({'no_route': True}) graph.set_connection(node, nodes[0]) node.set_draw_info({'valid': True}) node.set_info({'scanned': True}) set_node_info(node, host) graph.set_nodes(nodes) graph.set_main_node_by_id(0) return graph