Пример #1
0
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}
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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))
Пример #5
0
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)
Пример #6
0
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
Пример #7
0
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