def main(argv): plog("DEBUG", "Child Process Spawning...") TorUtil.read_config(argv[1]) (start_pct,stop_pct,nodes_per_slice,save_every,circs_per_node,out_dir, max_fetch_time,tor_dir,sleep_start,sleep_stop, min_streams,pid_file_name,db_url) = read_config(argv[1]) if pid_file_name: pidfd = file(pid_file_name, 'w') pidfd.write('%d\n' % os.getpid()) pidfd.close() slice_num = int(argv[2]) try: (c,hdlr) = setup_handler(out_dir, tor_dir+"/control_auth_cookie") except Exception, e: traceback.print_exc() plog("WARN", "Can't connect to Tor: "+str(e)) if db_url: hdlr.attach_sql_listener(db_url) sql_file = None else: plog("INFO", "db_url not found in config. Defaulting to sqlite") sql_file = os.getcwd()+'/'+out_dir+'/bwauthority.sqlite' hdlr.attach_sql_listener('sqlite:///'+sql_file) # set SOCKS proxy socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, TorUtil.tor_host, TorUtil.tor_port) socket.socket = socks.socksocket plog("INFO", "Set socks proxy to "+TorUtil.tor_host+":"+str(TorUtil.tor_port)) hdlr.wait_for_consensus() pct_step = hdlr.rank_to_percent(nodes_per_slice) # check to see if we are done if (slice_num * pct_step + start_pct > stop_pct): plog('INFO', 'stop_pct: %s reached. Exiting with %s' % (stop_pct, STOP_PCT_REACHED)) sys.exit(STOP_PCT_REACHED) plog("DEBUG", "Starting slice number %s" % slice_num) speedrace(hdlr, slice_num*pct_step + start_pct, (slice_num + 1)*pct_step + start_pct, circs_per_node, save_every, out_dir, max_fetch_time, sleep_start, sleep_stop, slice_num, min_streams, sql_file) # For debugging memory leak.. #TorUtil.dump_class_ref_counts(referrer_depth=1) # TODO: Change pathlen to 3 and kill exit+ConserveExit restrictions # And record circ failure rates.. #circ_measure(hdlr, pct, pct+pct_step, circs_per_node, save_every, # out_dir, max_fetch_time, sleep_start, sleep_stop, slice_num, sql_file) sys.exit(0)
def runProxyServer(config): try: # Use gevent when possible import gevent.monkey gevent.monkey.patch_all() print("Using gevent...") except ImportError: pass global SOCKS5_PROXY global DEBUG_MODE DEBUG_MODE = config.debug if config.socks5_server: SOCKS5_PROXY = (config.socks5_server.split(":") + ["1080"])[:2] SOCKS5_PROXY[1] = int(SOCKS5_PROXY[1]) socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, *SOCKS5_PROXY) server_address = (config.bind, config.port) httpd = ThreadedHTTPServer(server_address, ProxyHTTPRequestHandler) def handler(signum, frame): # The documentation said shutdown() should be called on a # different thread from which called serve_forever(). thread.start_new_thread(httpd.shutdown, ()) signal.signal(signal.SIGINT, handler) signal.signal(signal.SIGTERM, handler) if config.foreground is not None: ppid = config.foreground if ppid == 0: # There is a risk that the parent process had already exited at # this monent. ppid = os.getppid() pid = os.getpid() def exitIfOrphan(): while True: curr_ppid = os.getppid() if ppid != curr_ppid: os.kill(pid, signal.SIGTERM) time.sleep(30) thread.start_new_thread(exitIfOrphan, ()) ipport = httpd.socket.getsockname() if config.save_port is not None: with open(config.save_port, "w") as f: f.write(str(ipport[1])) print("Serving HTTP proxy on %s port %d ..." % ipport) httpd.serve_forever()
def main(argv): # establish a metatroller connection plog('INFO', 'Connecting to metatroller...') try: meta = MetatrollerConnector(meta_host, meta_port) except socket.error: plog('ERROR', 'Couldn\'t connect to metatroller. Is it on?') exit() # skip two lines of metatroller introduction meta.readline() meta.readline() # configure metatroller commands = [ 'SQLSUPPORT sqlite:///' + os.getcwd() + '/data/speedraces/speedracer.sqlite', 'PATHLEN 2', 'UNIFORM 1', 'ORDEREXITS 0', 'USEALLEXITS 0', 'GUARDNODES 0' ] plog('INFO', 'Executing preliminary configuration commands') for c in commands: meta.send_command_and_check(c) # set SOCKS proxy socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, tor_host, tor_port) socket.socket = socks.socksocket while True: pct = start_pct plog('INFO', 'Beginning time loop') while pct < stop_pct: meta.send_command_and_check('RESETSTATS') meta.send_command_and_check('COMMIT') plog('DEBUG', 'Reset stats') speedrace(meta, pct, pct + pct_step) plog('DEBUG', 'speedroced') meta.send_command_and_check('CLOSEALLCIRCS') # meta.send_command_and_check('SAVESTATS '+os.getcwd()+'/data/speedraces/stats-'+str(pct) + ':' + str(pct + pct_step)+"-"+str(count)+"-"+strftime("20%y-%m-%d-%H:%M:%S")) # meta.send_command_and_check('SAVERATIOS '+os.getcwd()+'/data/speedraces/ratios-'+str(pct) + ':' + str(pct + pct_step)+"-"+str(count)+"-"+strftime("20%y-%m-%d-%H:%M:%S")) meta.send_command_and_check('SAVESQL ' + os.getcwd() + '/data/speedraces/sql-' + str(pct) + ':' + str(pct + pct_step) + "-" + str(count) + "-" + strftime("20%y-%m-%d-%H:%M:%S")) plog('DEBUG', 'Wrote stats') pct += pct_step meta.send_command_and_check('COMMIT')
def main(argv): # establish a metatroller connection plog('INFO', 'Connecting to metatroller...') try: meta = MetatrollerConnector(meta_host, meta_port) except socket.error: plog('ERROR', 'Couldn\'t connect to metatroller. Is it on?') exit() # skip two lines of metatroller introduction meta.readline() meta.readline() # configure metatroller commands = [ 'SQLSUPPORT sqlite:///'+os.getcwd()+'/data/speedraces/speedracer.sqlite', 'PATHLEN 2', 'UNIFORM 1', 'ORDEREXITS 0', 'USEALLEXITS 0', 'GUARDNODES 0'] plog('INFO', 'Executing preliminary configuration commands') for c in commands: meta.send_command_and_check(c) # set SOCKS proxy socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, tor_host, tor_port) socket.socket = socks.socksocket while True: pct = start_pct plog('INFO', 'Beginning time loop') while pct < stop_pct: meta.send_command_and_check('RESETSTATS') meta.send_command_and_check('COMMIT') plog('DEBUG', 'Reset stats') speedrace(meta, pct, pct + pct_step) plog('DEBUG', 'speedroced') meta.send_command_and_check('CLOSEALLCIRCS') # meta.send_command_and_check('SAVESTATS '+os.getcwd()+'/data/speedraces/stats-'+str(pct) + ':' + str(pct + pct_step)+"-"+str(count)+"-"+strftime("20%y-%m-%d-%H:%M:%S")) # meta.send_command_and_check('SAVERATIOS '+os.getcwd()+'/data/speedraces/ratios-'+str(pct) + ':' + str(pct + pct_step)+"-"+str(count)+"-"+strftime("20%y-%m-%d-%H:%M:%S")) meta.send_command_and_check('SAVESQL '+os.getcwd()+'/data/speedraces/sql-'+str(pct) + ':' + str(pct + pct_step)+"-"+str(count)+"-"+strftime("20%y-%m-%d-%H:%M:%S")) plog('DEBUG', 'Wrote stats') pct += pct_step meta.send_command_and_check('COMMIT')
def main(argv): TorUtil.read_config(argv[1]) (start_pct,stop_pct,nodes_per_slice,save_every,circs_per_node,out_dir, max_fetch_time,tor_dir,sleep_start,sleep_stop, min_streams,pid_file_name,db_url,only_unmeasured, min_unmeasured) = read_config(argv[1]) plog("NOTICE", "Child Process Spawned...") # make sure necessary out_dir directory exists path = os.getcwd()+'/'+out_dir if not os.path.exists(path): os.makedirs(path) if pid_file_name: pidfd = file(pid_file_name, 'w') pidfd.write('%d\n' % os.getpid()) pidfd.close() slice_num = int(argv[2]) try: (c,hdlr) = setup_handler(out_dir, tor_dir+"/control_auth_cookie") except Exception, e: traceback.print_exc() plog("WARN", "Can't connect to Tor: "+str(e)) sys.exit(STOP_PCT_REACHED) if db_url: hdlr.attach_sql_listener(db_url) sql_file = None else: plog("INFO", "db_url not found in config. Defaulting to sqlite") sql_file = os.getcwd()+'/'+out_dir+'/bwauthority.sqlite' #hdlr.attach_sql_listener('sqlite:///'+sql_file) hdlr.attach_sql_listener('sqlite://') # set SOCKS proxy socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, TorUtil.tor_host, TorUtil.tor_port) socket.socket = socks.socksocket plog("INFO", "Set socks proxy to "+TorUtil.tor_host+":"+str(TorUtil.tor_port)) hdlr.schedule_selmgr(lambda s: setattr(s, "only_unmeasured", only_unmeasured)) hdlr.wait_for_consensus() # Now that we have the consensus, we shouldn't need to listen # for new consensus events. c.set_events([TorCtl.EVENT_TYPE.STREAM, TorCtl.EVENT_TYPE.BW, TorCtl.EVENT_TYPE.CIRC, TorCtl.EVENT_TYPE.STREAM_BW], True) # We should go to sleep if there are less than 5 unmeasured nodes after # consensus update if min_unmeasured and hdlr.get_unmeasured() < min_unmeasured: plog("NOTICE", "Less than "+str(min_unmeasured)+" unmeasured nodes ("+str(hdlr.get_unmeasured())+"). Sleeping for a bit") time.sleep(3600) # Until next consensus arrives plog("NOTICE", "Woke up from waiting for more unmeasured nodes. Requesting slice restart.") sys.exit(RESTART_SLICE) pct_step = hdlr.rank_to_percent(nodes_per_slice) plog("INFO", "Percent per slice is: "+str(pct_step)) if pct_step > 100: pct_step = 100 # check to see if we are done if (slice_num * pct_step + start_pct > stop_pct): plog('NOTICE', 'Child stop point %s reached. Exiting with %s' % (stop_pct, STOP_PCT_REACHED)) sys.exit(STOP_PCT_REACHED) successful = speedrace(hdlr, slice_num*pct_step + start_pct, (slice_num + 1)*pct_step + start_pct, circs_per_node, save_every, out_dir, max_fetch_time, sleep_start, sleep_stop, slice_num, min_streams, sql_file, only_unmeasured) # For debugging memory leak.. #TorUtil.dump_class_ref_counts(referrer_depth=1) # TODO: Change pathlen to 3 and kill exit+ConserveExit restrictions # And record circ failure rates.. #circ_measure(hdlr, pct, pct+pct_step, circs_per_node, save_every, # out_dir, max_fetch_time, sleep_start, sleep_stop, slice_num, sql_file) # XXX: Hack this to return a codelen double the slice size on failure? plog("INFO", "Slice success count: "+str(successful)) if successful == 0: plog("WARN", "Slice success count was ZERO!") sys.exit(0)
def main(argv): TorUtil.read_config(argv[1]) (start_pct, stop_pct, nodes_per_slice, save_every, circs_per_node, out_dir, max_fetch_time, tor_dir, sleep_start, sleep_stop, min_streams, pid_file_name, db_url, only_unmeasured, min_unmeasured) = read_config(argv[1]) plog("NOTICE", "Child Process Spawned...") # make sure necessary out_dir directory exists path = os.getcwd() + '/' + out_dir if not os.path.exists(path): os.makedirs(path) if pid_file_name: pidfd = file(pid_file_name, 'w') pidfd.write('%d\n' % os.getpid()) pidfd.close() slice_num = int(argv[2]) try: (c, hdlr) = setup_handler(out_dir, tor_dir + "/control_auth_cookie") except Exception, e: traceback.print_exc() plog("WARN", "Can't connect to Tor: " + str(e)) sys.exit(STOP_PCT_REACHED) if db_url: hdlr.attach_sql_listener(db_url) sql_file = None else: plog("INFO", "db_url not found in config. Defaulting to sqlite") sql_file = os.getcwd() + '/' + out_dir + '/bwauthority.sqlite' #hdlr.attach_sql_listener('sqlite:///'+sql_file) hdlr.attach_sql_listener('sqlite://') # set SOCKS proxy socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, TorUtil.tor_host, TorUtil.tor_port) socket.socket = socks.socksocket plog( "INFO", "Set socks proxy to " + TorUtil.tor_host + ":" + str(TorUtil.tor_port)) hdlr.schedule_selmgr( lambda s: setattr(s, "only_unmeasured", only_unmeasured)) hdlr.wait_for_consensus() # Now that we have the consensus, we shouldn't need to listen # for new consensus events. c.set_events([ TorCtl.EVENT_TYPE.STREAM, TorCtl.EVENT_TYPE.BW, TorCtl.EVENT_TYPE.CIRC, TorCtl.EVENT_TYPE.STREAM_BW ], True) # We should go to sleep if there are less than 5 unmeasured nodes after # consensus update if min_unmeasured and hdlr.get_unmeasured() < min_unmeasured: plog( "NOTICE", "Less than " + str(min_unmeasured) + " unmeasured nodes (" + str(hdlr.get_unmeasured()) + "). Sleeping for a bit") time.sleep(3600) # Until next consensus arrives plog( "NOTICE", "Woke up from waiting for more unmeasured nodes. Requesting slice restart." ) sys.exit(RESTART_SLICE) pct_step = hdlr.rank_to_percent(nodes_per_slice) plog("INFO", "Percent per slice is: " + str(pct_step)) if pct_step > 100: pct_step = 100 # check to see if we are done if (slice_num * pct_step + start_pct > stop_pct): plog( 'NOTICE', 'Child stop point %s reached. Exiting with %s' % (stop_pct, STOP_PCT_REACHED)) sys.exit(STOP_PCT_REACHED) successful = speedrace(hdlr, slice_num * pct_step + start_pct, (slice_num + 1) * pct_step + start_pct, circs_per_node, save_every, out_dir, max_fetch_time, sleep_start, sleep_stop, slice_num, min_streams, sql_file, only_unmeasured) # For debugging memory leak.. #TorUtil.dump_class_ref_counts(referrer_depth=1) # TODO: Change pathlen to 3 and kill exit+ConserveExit restrictions # And record circ failure rates.. #circ_measure(hdlr, pct, pct+pct_step, circs_per_node, save_every, # out_dir, max_fetch_time, sleep_start, sleep_stop, slice_num, sql_file) # XXX: Hack this to return a codelen double the slice size on failure? plog("INFO", "Slice success count: " + str(successful)) if successful == 0: plog("WARN", "Slice success count was ZERO!") sys.exit(0)
def set_proxy(typ=socks.PROXY_TYPE_SOCKS4, host="127.0.0.1", port=9050): socks.setdefaultproxy(typ, host, port) socket.socket = socks.socksocket
def main(argv): plog("DEBUG", "Child Process Spawning...") TorUtil.read_config(argv[1]) (start_pct, stop_pct, nodes_per_slice, save_every, circs_per_node, out_dir, max_fetch_time, tor_dir, sleep_start, sleep_stop, min_streams, pid_file_name, db_url) = read_config(argv[1]) # make sure necessary out_dir directory exists path = os.getcwd() + '/' + out_dir if not os.path.exists(path): os.makedirs(path) if pid_file_name: pidfd = file(pid_file_name, 'w') pidfd.write('%d\n' % os.getpid()) pidfd.close() slice_num = int(argv[2]) try: (c, hdlr) = setup_handler(out_dir, tor_dir + "/control_auth_cookie") except Exception, e: traceback.print_exc() plog("WARN", "Can't connect to Tor: " + str(e)) sys.exit(STOP_PCT_REACHED) if db_url: hdlr.attach_sql_listener(db_url) sql_file = None else: plog("INFO", "db_url not found in config. Defaulting to sqlite") sql_file = os.getcwd() + '/' + out_dir + '/bwauthority.sqlite' #hdlr.attach_sql_listener('sqlite:///'+sql_file) hdlr.attach_sql_listener('sqlite://') # set SOCKS proxy socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, TorUtil.tor_host, TorUtil.tor_port) socket.socket = socks.socksocket plog( "INFO", "Set socks proxy to " + TorUtil.tor_host + ":" + str(TorUtil.tor_port)) hdlr.wait_for_consensus() pct_step = hdlr.rank_to_percent(nodes_per_slice) # check to see if we are done if (slice_num * pct_step + start_pct > stop_pct): plog( 'INFO', 'stop_pct: %s reached. Exiting with %s' % (stop_pct, STOP_PCT_REACHED)) sys.exit(STOP_PCT_REACHED) plog("DEBUG", "Starting slice number %s" % slice_num) speedrace(hdlr, slice_num * pct_step + start_pct, (slice_num + 1) * pct_step + start_pct, circs_per_node, save_every, out_dir, max_fetch_time, sleep_start, sleep_stop, slice_num, min_streams, sql_file) # For debugging memory leak.. #TorUtil.dump_class_ref_counts(referrer_depth=1) # TODO: Change pathlen to 3 and kill exit+ConserveExit restrictions # And record circ failure rates.. #circ_measure(hdlr, pct, pct+pct_step, circs_per_node, save_every, # out_dir, max_fetch_time, sleep_start, sleep_stop, slice_num, sql_file) sys.exit(0)
if pid_file_name: pidfd = file(pid_file_name, "w") pidfd.write("%d\n" % os.getpid()) pidfd.close() try: (c, hdlr) = setup_handler(out_dir, tor_dir + "/control_auth_cookie") except Exception, e: traceback.print_exc() plog("WARN", "Can't connect to Tor: " + str(e)) sql_file = os.getcwd() + "/" + out_dir + "/bwauthority.sqlite" hdlr.attach_sql_listener("sqlite:///" + sql_file) # set SOCKS proxy socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, TorUtil.tor_host, TorUtil.tor_port) socket.socket = socks.socksocket plog("INFO", "Set socks proxy to " + TorUtil.tor_host + ":" + str(TorUtil.tor_port)) while True: pct = start_pct plog("INFO", "Beginning time loop") slice_num = 0 while pct < stop_pct: hdlr.wait_for_consensus() pct_step = hdlr.rank_to_percent(nodes_per_slice) hdlr.reset_stats() hdlr.commit() plog("DEBUG", "Reset stats") speedrace(