[tor-dev] Tor-stem in python script - HTTP requests issue

Eduard Natale eduard.natale at gmail.com
Thu Aug 1 17:00:11 UTC 2013


Hello guys,

I had a problem and currently I'm not able to solve it. So, here I am ;) I
have a python script that uses python-stem to create and handle a tor
instance (on a defined port). What it does is retrieving (using a  HTTP
GET) a web page and submitting information (using HTTP POST messages).
Basically i use tor because I need to test this server from different IP
addresses with more requests in parallel. What I also do is keeping trace
of Cookies. Here's a sample of the code I use, based on the example on stem
website https://stem.torproject.org/tutorials/to_russia_with_love.html (to
have more parallel requests, i launch the script many times with different
socks_port value):
----------------------------
import socket, socks, stem.process
import mechanize, cookielib

SOCKS_PORT = 9000
DATA_DIRECTORY = "TOR_%s" % SOCKS_PORT
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', SOCKS_PORT)
socket.socket = socks.socksocket

tor_process = stem.process.launch_tor_with_config(
          config = {
            'SocksPort': str(SOCKS_PORT),
            'ControlPort': str(SOCKS_PORT+1),
            'DataDirectory': DATA_DIRECTORY,
            'ExitNodes': '{it}',
          },
        )

# initialize python mechanize, with cookies (it works exactly like urllib2,
urllib3, etc. already tried...)
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
...

for number in num_list:
  req = br.open_novisit("http://example.com") #_1_
  res = req.read()
  print res
  req.close()
  req2 = br.open("http://example.com/post_to_me", data_to_post) #_2_
  res2 = req2.read()
  req2.close()
--------------------------------

And that's it. The problem occurs on the lines i marked as _1_ and _2_:
basically when it reaches around 200 requests, it seems to block
undefinitely, waiting for a response that never comes. Of course,
wiresharking doesn't work because it's encrypted. The same stuff, without
TOR, works perfectly. So, why does it stuck at about 200 requests!? I tried
to:

1. Telnet on control port, forcing to renew circuits with SIGNAL NEWNYM
2. instantiating mechanize (urllib2, 3, whatever) in the loop
3. ...i don't remember what else

I thought it could be a local socket connection limit: actually without
TOR, i see in wireshark the source port changes every time a request is
performed. But actually i don't know if the problem is in using the same
source port every time (but i don't think so) and if so, should I close the
current socket and open a new one? Should I kill the tor process? I can't
exaplain myself why...
What I only know is: *when the script stucks, if i kill the python process
(ctrl+c) and then re-launch, it starts working again.*. I've seen that it's
possible to set the value of TrackHostExitsExpire, is it useful in my case?

Thanks in advance to whoever can help me!!
Ed
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tor-dev/attachments/20130801/73a1021f/attachment.html>


More information about the tor-dev mailing list