General SOCKS server failure while using tor proxy

3.2k views Asked by At

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?

2

There are 2 answers

0
ye zilin On

you can simply record the orginal socket like ori_socket = socket.socket first. And redefine the socket.socket = ori_socket before you perform mongo action. That's works for me

0
user2889561 On

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.