Caleb James DeLisle 2e8608ec5a Merge branch 'master' of git://github.com/lgierth/cjdns into crashey 10 vuotta sitten
..
cjdnsadmin 2e8608ec5a Merge branch 'master' of git://github.com/lgierth/cjdns into crashey 10 vuotta sitten
README.md 98a9442894 Update README.md 11 vuotta sitten
cexec d21ec9877d cli added 11 vuotta sitten
cjdnsa 2bd89b45ea Refactor python scripts 11 vuotta sitten
cjdnsadminmaker.py 59fb3eba9d Use json shorthands 10 vuotta sitten
cjdnslog 38eacb6963 Changed /usr/bin/python to /usr/bin/env python in the few python scripts that weren't already doing so to allow for python binaries in locations other than /usr/bin. In the dynamicEndpoints.py script, I also switched python2 to python, which breaks it on some distros (like Arch Linux) while making it work on others (like Debian;) more importantly however, is that doing this makes things consistant with the other scripts, which are configured to work with how Debian names things. 11 vuotta sitten
drawgraph 2aa5b0dbf2 add graph maker and made adminTools module for interactive analysis 11 vuotta sitten
dumpgraph 2aa5b0dbf2 add graph maker and made adminTools module for interactive analysis 11 vuotta sitten
dumptable 2aa5b0dbf2 add graph maker and made adminTools module for interactive analysis 11 vuotta sitten
dynamicEndpoints.conf.example d01b1aa8ed Config file is now required for dynamicEndpoints.py, and help message is somewhat informative 10 vuotta sitten
dynamicEndpoints.py d01b1aa8ed Config file is now required for dynamicEndpoints.py, and help message is somewhat informative 10 vuotta sitten
findnodes fc0cb75f63 Catch KeyboardInterrupt 10 vuotta sitten
getLinks f30eccdbc8 Fixed getLinks 11 vuotta sitten
graphStats 2aa5b0dbf2 add graph maker and made adminTools module for interactive analysis 11 vuotta sitten
ip6topk 19d508131a [contrib] Find public key given IP6 11 vuotta sitten
peerStats 9c9102dcf2 Revert "Revert "Merge branch 'anonPeerStats' of git://github.com/kpcyrd/cjdns into crashey"" 10 vuotta sitten
pingAll.py 38d3f8bbf1 Rewrite of RouterModule and fix of a minor DoS issue caused by a direct peer sending too many setup packets. 11 vuotta sitten
pktoip6 22a23168eb [contrib] Find IP6 given the public key 11 vuotta sitten
searches fa15457db8 leak in sctive search counter caused searches not to be run after the node had run a long time. 11 vuotta sitten
sessionStats 428d3f65a2 Added CryptoAuth session state and ipv6 address to sessionStats 11 vuotta sitten
trashroutes a52c99787e trashroutes should not stack overflow if there's an invalid route. 11 vuotta sitten

README.md

cjdnsadmin.py

Using cjdnsadmin.py is trivially simple, you can connect to a router and issue it commands in 3 steps:

from cjdnsadmin.cjdnsadmin import connect;

Make sure cjdnsadmin/cjdnsadmin.py and cjdnsadmin/bencode.py are in your path, the easiest thing to do is put cjdnsadmin/ in the same directory as your script.

connect()

This takes 3 parameters, the ip address of the listening router, it's port number, and the password to connect to it. These can be found in your cjdroute.conf here:

"admin":
{
    // Port to bind the admin RPC server to.
    "bind": "127.0.0.1:11234",

    // Password for admin RPC server.
    "password": "4s8mshm4hbb2lbdwz4bxfdn9w7"
},

To connect to this node, you would use:

cjdns = connect('127.0.0.1', 11234, '4s8mshm4hbb2lbdwz4bxfdn9w7');

The password will be checked when you connect and if it's incorrect you will get an exception.

Or just use

from cjdnsadmin.cjdnsadmin import connectWithAdminInfo;
cjdns = connectWithAdminInfo();

It get data from ~/.cjdnsadmin

Use it!

The cjdns object returned from connect() and connectWithAdminInfo() contains functions corrisponding to each of the RPC calls in the router. There is a field called cjdns.functions which contains a list of the functions and their parameters.

Example usage of cjdnsadmin/cjdnsadmin.py

user@debo8:~/wrk/play$ python
Python 2.7.2+ (default, Jan 20 2012, 17:51:10)
[GCC 4.6.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from cjdnsadmin.cjdnsadmin import connectWithAdminInfo;
>>> cjdns = connectWithAdminInfo();
>>> cjdns.functions();
RouterModule_pingNode(required String path)
UDPInterface_scrambleKeys(required String xorValue)
ping()
AuthorizedPasswords_add(Int authType, required String password)
AuthorizedPasswords_flush()
memory()
NodeStore_dumpTable()
UDPInterface_beginConnection(required String publicKey, String password, required String address)
>>> print cjdns.AuthorizedPasswords_add(1, 1);
{'error': 'Entry [password] is required and must be of type [String]'}
>>> print cjdns.AuthorizedPasswords_add(1, 'abcd');
{'error': 'none'}
>>> print cjdns.memory();
{'bytes': 750556}
>>> routes = cjdns.NodeStore_dumpTable();
>>> print routes;
{'routingTable': [{'ip': 'fc45:a51e:89eb:6d57:ad43:5723:e1d3:5d51', 'link': 4294967295, 'path': '0000.0000.0000.0001'}, {'ip': 'fcf1:a7a8:8ec0:589b:c64c:cc95:1ced:3679', 'link': 266287520, 'path': '0000.0000.0000.0006'}, {'ip': 'fce5:de17:cbde:c87b:5289:0556:8b83:c9c8', 'link': 0, 'path': '0000.0000.0000.0004'}]}
>>> for route in routes['routingTable']: print route['ip'] + "@" + route['path'] + "\n";
...
fc45:a51e:89eb:6d57:ad43:5723:e1d3:5d51@0000.0000.0000.0001

fcf1:a7a8:8ec0:589b:c64c:cc95:1ced:3679@0000.0000.0000.0006

fce5:de17:cbde:c87b:5289:0556:8b83:c9c8@0000.0000.0000.0004

>>> cjdns.disconnect();
>>> exit(0)

For convenience, you can directly start ./cjdnsa