General SOCKS server failure while using tor proxy

2019-09-19 23:52发布

问题:

I am proxying traffic over tor, so letter on when I need to call localhost port, it gives failure error.

def create_connection(self, address, timeout=None, source_address=None):
    sock = socks.socksocket()
    sock.connect(address)
    return sock

def getVideoTrend(self):

    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
    socket.socket = socks.socksocket
    socket.create_connection = self.create_connection
    #some code
    Mongo.SaveEntity()

SaveEntity contains:

hostname = 'localhost'
port = 27017
self.client = MongoClient(hostname, port)

which gives

  File "radurl.py", line 110, in getVideoTrend
    MongoDbOpp().saveEntity(final_result)    
  File "/root/Documents/scraping/radurls/mongo_operation.py", line 14, in __init__
    self.client = MongoClient(hostname, port)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 377, in __init__
    raise ConnectionFailure(str(e))
pymongo.errors.ConnectionFailure: 0x01: General SOCKS server failure

I understand the reason behind this error, that mongo attempts to connect to local control port, gets proxied through a tor exit node.

Is there any solution to this prob?

Or I can terminate tor session after before Mongo operation?

回答1:

Make mongo connection object before your code. Spent a day trying to figure this out. Then just changed the order of importing the mongo and tor files and it worked.