2016-07-28 3 views
3

私は、ステム​​を使用して 'カスタム'設定を使用して新しいtorプロセス(現在システム上で実行中のプロセスはありません)を起動しようとしています。ステムを使用してTorサブプロセスでコントローラを認証する

新しいハッシュパスワードを生成して取得する機能を作成しました。私はその後、configでその新しいパスワードを使用してTorを起動し、同じ正確なパスハッシュを使用して認証しようとすると失敗します。ここで

はコードです:

from stem.process import launch_tor_with_config 
from stem.control import Controller 

from subprocess import Popen, PIPE 
import logging 

def genTorPassHash(password): 
    """ Launches a subprocess of tor to generate a hashed <password>""" 
    logging.info("Generating a hashed password") 
    torP = Popen(['tor', '--hush', '--hash-password', str(password)], stdout=PIPE, bufsize=1) 
    try: 
     with torP.stdout: 
      for line in iter(torP.stdout.readline, b''): 
       line = line.strip('\n') 
       if not "16:" in line: 
        logging.debug(line) 
       else: 
        passhash = line 
     torP.wait() 
     logging.info("Got hashed password") 
     logging.debug(passhash) 
     return passhash 
    except Exception as e: 
     logging.exception(e) 



def startTor(config): 
    """ Starts a tor subprocess using a custom <config> 
    returns Popen and controller 
    """ 
    try: 
     # start tor 
     logging.info("Starting tor") 
     torProcess = launch_tor_with_config( 
      config=config, # use our custom config 
      tor_cmd='tor', # start tor normally 
      completion_percent=100, # blocks until tor is 100% 
      timeout=90, # wait 90 sec for tor to start 
      take_ownership=True # subprocess will close with parent 
      ) 
     # connect a controller 
     logging.info("Connecting controller") 
     torControl = Controller.from_port(address="127.0.0.1", port=int(config['ControlPort'])) 
     # auth controller 
     torControl.authenticate(password=config['HashedControlPassword']) 
     logging.info("Connected to tor process") 
     return torProcess, torControl 

    except Exception as e: 
     logging.exception(e) 


if __name__ == "__main__": 
    logging.basicConfig(format='[%(asctime)s] %(message)s', datefmt="%H:%M:%S", level=logging.DEBUG) 
    password = genTorPassHash(raw_input("Type something: ")) 

    config = { 
     'ClientOnly': '1', 
     'ControlPort': '9051', 
     'DataDirectory': '~/.tor/temp', 
     'Log': ['DEBUG stdout', 'ERR stderr' ], 
     'HashedControlPassword' : password } 

    torProcess, torControl = startTor(config) 

これは私が上記のコードを実行したときに何が起こるかです:

[email protected] ~ $ python stackOverflowTest.py 
Type something: foo 
[13:33:55] Generating a hashed password 
[13:33:55] Got hashed password 
[13:33:55] 16:84DE3F93CAFD3B0660BD6EC303A8A7C65B6BD0AC7E9454B3B130881A57 
[13:33:55] Starting tor 
[13:33:56] System call: tor --version (runtime: 0.01) 
[13:33:56] Received from system (tor --version), stdout: 
Tor version 0.2.4.27 (git-412e3f7dc9c6c01a). 
[13:34:00] Connecting controller 
[13:34:00] Sent to tor: 
PROTOCOLINFO 1 
[13:34:00] Received from tor: 
250-PROTOCOLINFO 1 
250-AUTH METHODS=HASHEDPASSWORD 
250-VERSION Tor="0.2.4.27" 
250 OK 
[13:34:00] Sent to tor: 
AUTHENTICATE "16:84DE3F93CAFD3B0660BD6EC303A8A7C65B6BD0AC7E9454B3B130881A57" 
[13:34:00] Received from tor: 
515 Authentication failed: Password did not match HashedControlPassword value from configuration 
[13:34:00] Error while receiving a control message (SocketClosed): empty socket content 
[13:34:00] Sent to tor: 
SETEVENTS SIGNAL CONF_CHANGED 
[13:34:00] Error while receiving a control message (SocketClosed): empty socket content 
[13:34:00] Failed to send message: [Errno 32] Broken pipe 
[13:34:00] Error while receiving a control message (SocketClosed): empty socket content 
[13:34:00] Received empty socket content. 
Traceback (most recent call last): 
    File "stackOverflowTest.py", line 46, in startTor 
    torControl.authenticate(password=config['HashedControlPassword']) 
    File "/usr/local/lib/python2.7/dist-packages/stem/control.py", line 991, in authenticate 
    stem.connection.authenticate(self, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/stem/connection.py", line 608, in authenticate 
    raise auth_exc 
AuthenticationFailure: Received empty socket content. 
Traceback (most recent call last): 
    File "stackOverflowTest.py", line 65, in <module> 
    torProcess, torControl = startTor(config) 
TypeError: 'NoneType' object is not iterable 

私は何かが足りないのですか?

答えて

3

問題は、パスワード自体ではなくパスワードハッシュで認証していることです。お試しください...

password = raw_input('password: ') 
password_hash = genTorPassHash(password) 

... then use the password_hash in the config and password for authentication 
関連する問題