仅通过标准python套接字

时间:2017-06-13 09:33:39

标签: python sockets tor

当我尝试在Windows 10上更新Tor的ip时,它总是失败(我已经阅读了大量的堆栈溢出帖子,如thisthis,但没有任何作用)。< / p>

  • OS:windows 10 64bits
  • tor:7.0版

我的torrc的内容

# This file was generated by Tor; if you edit it, comments will not be preserved
# The old torrc file was renamed to torrc.orig.1 or similar, and Tor will ignore it

DataDirectory C:\Users\yyyy\Desktop\Tor Browser\Browser\TorBrowser\Data\Tor
GeoIPFile C:\Users\yyyy\Desktop\Tor Browser\Browser\TorBrowser\Data\Tor\geoip
GeoIPv6File C:\Users\yyyy\Desktop\Tor Browser\Browser\TorBrowser\Data\Tor\geoip6
HiddenServiceStatistics 0

HashedControlPassword 16:D14CC89AD7848B8C60093105E8284A2D3AB2CF3C20D95FECA0848CFAD2
CookieAuthentication 1 #either with nor without this line, still fail

torrc-defaults的内容

# torrc-defaults for Tor Browser
#
# DO NOT EDIT THIS FILE
#
# This file is distributed with Tor Browser and SHOULD NOT be modified (it
# may be overwritten during the next Tor Browser update). To customize your
# Tor configuration, shut down Tor Browser and edit the torrc file.
#
# If non-zero, try to write to disk less frequently than we would otherwise.
AvoidDiskWrites 1
# Where to send logging messages.  Format is minSeverity[-maxSeverity]
# (stderr|stdout|syslog|file FILENAME).
Log notice stdout
CookieAuthentication 1
## fteproxy configuration
ClientTransportPlugin fte exec TorBrowser\Tor\PluggableTransports\fteproxy --managed

## obfs4proxy configuration
ClientTransportPlugin obfs2,obfs3,obfs4,scramblesuit exec TorBrowser\Tor\PluggableTransports\obfs4proxy

## meek configuration
ClientTransportPlugin meek exec TorBrowser\Tor\PluggableTransports\terminateprocess-buffer TorBrowser\Tor\PluggableTransports\meek-client-torbrowser -- TorBrowser\Tor\PluggableTransports\meek-client

该脚本用于更新tor ip

import repr as reprlib
import socket
import sys

try:
   tor_c = socket.create_connection(("127.0.0.1", 9151))
   tor_c.send('AUTHENTICATE "{}"\r\n'.format("16:D14CC89AD7848B8C60093105E8284A2D3AB2CF3C20D95FECA0848CFAD2"))
   response = tor_c.recv(1024)
   if response != '250 OK\r\n250 OK\r\n':
      sys.stderr.write('Unexpected response from Tor control port: {}\n'.format(response))
except Exception, e:
   sys.stderr.write('Error connecting to Tor control port: {}\n'.format(repr(e)))

但服务器总是回复我

来自Tor控制端口的意外响应:515身份验证失败:密码与HashedControlPassword 不匹配 身份验证Cookie。

我知道有这种任务的python库,但我想只通过python的标准套接字库更新ip,我怎么能正确地做到这一点?谢谢

1 个答案:

答案 0 :(得分:1)

HashedControlPassword是身份验证密码的哈希值。要进行身份验证,它将是AUTHENTICATE "your actual password"

表面上的控制协议相对简单。

例如:

telnet localhost 9051
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
authenticate "password"
250 OK
signal NEWNYM
250 OK <-- identity changed for new circuits

这对我有用:

import repr as reprlib
import socket
import sys

try:
   tor_c = socket.create_connection(("127.0.0.1", 9051))
   tor_c.send("AUTHENTICATE \"{}\"\n".format("password"))
   response = tor_c.recv(1024)
   if response != '250 OK\r\n':
      sys.stderr.write('Unexpected response from Tor control port: {}\n'.format(response))
   tor_c.send("SIGNAL NEWNYM\n");
   response = tor_c.recv(1024)
   print(response)
except Exception, e:
   sys.stderr.write('Error connecting to Tor control port: {}\n'.format(repr(e)))

您也可以通过以下示例来避免使用Python:Request new identity from Windows command line