def whoami(cjdns): from publicToIp6 import PublicToIp6_convert; resp=cjdns.NodeStore_nodeForAddr(0) key=resp['result']['key'] ver=resp['result']['protocolVersion'] IP=PublicToIp6_convert(key) return {'IP':IP,'key':key,'version':ver}
def peerStats(cjdns,up=False,verbose=False): from publicToIp6 import PublicToIp6_convert; allPeers = [] i = 0; while True: ps = cjdns.InterfaceController_peerStats(i); peers = ps['peers'] for p in peers: if p['state'] == 'UNRESPONSIVE' and up: continue allPeers.append(p) if (not 'more' in ps): break i += 1 if verbose: STAT_FORMAT = '%s\tv%s\t%s\tin %d\tout %d\t%s\tdup %d los %d oor %d' for peer in allPeers: ip = PublicToIp6_convert(peer['publicKey']) p = STAT_FORMAT % (ip, peer['version'], peer['switchLabel'], peer['bytesIn'], peer['bytesOut'], peer['state'], peer['duplicates'], peer['lostPackets'], peer['receivedOutOfRange']) if 'user' in peer: p += '\t%r' % peer['user'] print p return allPeers
def peerStats(cjdns,up=False,verbose=False): from publicToIp6 import PublicToIp6_convert; allPeers = [] i = 0; while True: ps = cjdns.InterfaceController_peerStats(i); peers = ps['peers'] for p in peers: if p['state'] == 'UNRESPONSIVE' and up: continue allPeers.append(p) if (not 'more' in ps): break i += 1 if verbose: for peer in allPeers: p = (PublicToIp6_convert(peer['publicKey']) + '\t' + peer['switchLabel'] + '\tin ' + str(peer['bytesIn']) + '\tout ' + str(peer['bytesOut']) + '\t' + peer['state'] + '\tdup ' + str(peer['duplicates']) + ' los ' + str(peer['lostPackets']) + ' oor ' + str(peer['receivedOutOfRange'])); if 'user' in peer: p += '"' + peer['user'] + '"'; print p; return allPeers
def get_peerstats( ): #find out who were connected to so we can find dns servers cjdns = at.anonConnect() peerstats_raw = at.peerStats(cjdns, verbose=False) cjdns.disconnect() global peerstats_result for x in peerstats_raw: peerstats_result.append(PublicToIp6_convert(x['publicKey'])) print "peerstats" + str(len(peerstats_result))
def cjdns_graph_from_nodes(cjdns, source_nodes): nodes_to_check = deque(source_nodes.values()) nodes = source_nodes.copy() edges = [] while len(nodes_to_check) > 0: node = nodes_to_check.pop() nodes[node.ip] = node resp = cjdns.NodeStore_nodeForAddr(node.ip) if not 'result' in resp: continue res = resp['result'] if 'protocolVersion' in res: node.version = res['protocolVersion'] if 'linkCount' in res: for i in range(0, int(res['linkCount'])): resp = cjdns.NodeStore_getLink(parent=node.ip, linkNum=i) if not 'result' in resp: continue res = resp['result'] if not 'child' in res or not 'isOneHop' in res or res[ 'isOneHop'] != 1: continue # Add node child_id = res['child'] child_key = '.'.join(child_id.rsplit('.', 2)[1:]) child_ip = PublicToIp6_convert(child_key) if not child_ip in nodes: n = Node(child_ip) nodes[child_ip] = n nodes_to_check.append(n) # Add edge e = Edge(nodes[node.ip], nodes[child_ip]) if not e in edges: edges.append(e) return (nodes, edges)
def makeGraph(): import adminTools as admin import networkx as nx from publicToIp6 import PublicToIp6_convert from collections import deque cjdns = admin.connect() root = admin.whoami(cjdns) rootIP = root['IP'] G = nx.Graph() G.add_node(rootIP[-4:], ip=rootIP) nodes = deque() nodes.append(rootIP) while len(nodes) != 0: parentIP = nodes.popleft() resp = cjdns.NodeStore_nodeForAddr(parentIP) numLinks = 0 if 'result' in resp: link = resp['result'] if 'linkCount' in link: numLinks = int(resp['result']['linkCount']) G.node[parentIP[-4:]]['version'] = resp['result'][ 'protocolVersion'] for i in range(0, numLinks): resp = cjdns.NodeStore_getLink(i, parent=parentIP) childLink = resp['result'] if not childLink: continue childAddr = admin.parseAddr(childLink['child']) childIP = PublicToIp6_convert(childAddr['publicKey']) # Check to see if its one hop away from parent node if childLink['isOneHop'] != 1: continue # If its a new node then we want to follow it if not childIP[-4:] in G.nodes(): G.add_node(childIP[-4:], ip=childIP) G.node[childIP[-4:]]['version'] = 0 nodes.append(childIP) # If there is not a link between the nodes we should put one there if (not childIP[-4:] in G[parentIP[-4:]]): G.add_edge(parentIP[-4:], childIP[-4:]) return G
def peerStats(cjdns, up=False, verbose=False, human_readable=False): from publicToIp6 import PublicToIp6_convert allPeers = [] i = 0 while True: ps = cjdns.InterfaceController_peerStats(i) peers = ps['peers'] for p in peers: p.update(parseAddr(p['addr'])) if p['state'] == 'UNRESPONSIVE' and up: continue allPeers.append(p) if (not 'more' in ps): break i += 1 if verbose: STAT_FORMAT = '%s\tv%s\t%s\tin %s\tout %s\t%s\tdup %d los %d oor %d' for peer in allPeers: ip = PublicToIp6_convert(peer['publicKey']) b_in = peer['bytesIn'] b_out = peer['bytesOut'] if human_readable: b_in = sizeof_fmt(b_in) b_out = sizeof_fmt(b_out) p = STAT_FORMAT % (ip, peer['version'], peer['switchLabel'], str(b_in), str(b_out), peer['state'], peer['duplicates'], peer['lostPackets'], peer['receivedOutOfRange']) if 'user' in peer: p += '\t%r' % peer['user'] print p return allPeers