diff options
author | Roger Dingledine <arma@torproject.org> | 2004-11-07 22:08:20 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2004-11-07 22:08:20 +0000 |
commit | 11b2c6a47617cb60f2f4980f216e6b189701ba26 (patch) | |
tree | ddc1bea3670aa842e28396759c7b5dc39f7575ea | |
parent | 2cacb4e0f90301db41f6a5881169dc3686b24250 (diff) | |
download | tor-11b2c6a47617cb60f2f4980f216e6b189701ba26.tar tor-11b2c6a47617cb60f2f4980f216e6b189701ba26.tar.gz |
add an in-progress python controller to test controlport
svn:r2701
-rwxr-xr-x | contrib/tor-control.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/contrib/tor-control.py b/contrib/tor-control.py new file mode 100755 index 000000000..d3efc78e8 --- /dev/null +++ b/contrib/tor-control.py @@ -0,0 +1,71 @@ +#!/usr/bin/python2 +#$Id$ + +import socket +import struct +import sys + +MSG_TYPE_SETCONF = 0x0002 +MSG_TYPE_GETCONF = 0x0003 +MSG_TYPE_AUTH = 0x0007 + +def parseHostAndPort(h): + host, port = "localhost", 9050 + if ":" in h: + i = h.index(":") + host = h[:i] + try: + port = int(h[i+1:]) + except ValueError: + print "Bad hostname %r"%h + sys.exit(1) + elif h: + try: + port = int(h) + except ValueError: + host = h + + return host, port + +def receive_message(s): + body = "" + header = s.recv(4) + length,type = struct.unpack("!HH",header) + print "Got response length %d, type %d"%(length,type) + if length: + body = s.recv(length) + print "Got response length %d, type %d, body %s"%(length,type,body) + return length,type,body + +def pack_message(type, body=""): + length = len(body) + reqheader = struct.pack("!HH", length, type) + return "%s%s"%(reqheader,body) + +def authenticate(s): + s.sendall(pack_message(MSG_TYPE_AUTH)) + length,type,body = receive_message(s) + return + +def get_option(s,name): + s.sendall(pack_message(MSG_TYPE_GETCONF,name)) + length,type,body = receive_message(s) + return + +def do_main_loop(host,port): + print "host is %s:%d"%(host,port) + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.connect((host,port)) + authenticate(s) + get_option(s,"nickname") +# get_option(s,"DirFetchPostPeriod\n") + + return + +if __name__ == '__main__': + if len(sys.argv) != 2: + print "Syntax: tor-control.py torhost:torport" + sys.exit(0) + sh,sp = parseHostAndPort(sys.argv[1]) + do_main_loop(sh,sp) + |