I'm running a distant HTTP server, serving a single page, used for delay measurements purposes. From my client, I'm generating multiple different custom circuits each being assigned a new upcoming stream.
Each stream is generated using python
and stem
to call in a multithreaded fashion torsocks
as a wrapper for httping
with the following call:
'torsocks -d httping -h xxx.yyy.xxx.yyy -p 80 -t 130 -c 1 -M
with xxx.yyy.xxx.yyy being the IPv4 adress of my server.
My issue is the vast majority of them timeout (more than 90%), apparently between torsocks
and the tor
Controller, when generating few dozens of similar concurrent requests (totaling less than 100kB/s).
The -d
debug flag's output of torsocks yield:
1615247437 DEBUG torsocks[39279]: [fclose] Close caught for fd 3 (in tsocks_fclose() at fclose.c:45)
1615247437 DEBUG torsocks[39279]: [onion] Pool init with subnet 127.42.42.0 and mask 24 (in onion_pool_init() at onion.c:103)
1615247437 DEBUG torsocks[39279]: [onion] Pool initialized with base 0, max_pos 255 and size 8 (in onion_pool_init() at onion.c:131)
1615247437 DEBUG torsocks[39279]: [getaddrinfo] Requesting xxx.yyy.xxx.yyy hostname (in tsocks_getaddrinfo() at getaddrinfo.c:44)
1615247437 DEBUG torsocks[39279]: [getaddrinfo] Node xxx.yyy.xxx.yyy will be passed to the libc call (in tsocks_getaddrinfo() at getaddrinfo.c:110)
1615247437 DEBUG torsocks[39279]: [socket] Creating socket with domain 2, type 1 and protocol 6 (in tsocks_socket() at socket.c:32)
1615247437 DEBUG torsocks[39279]: Connect caught on fd 3 (in tsocks_connect() at connect.c:118)
1615247437 DEBUG torsocks[39279]: [connect] Socket family AF_INET and type 1 (in tsocks_validate_socket() at connect.c:76)
1615247437 DEBUG torsocks[39279]: [onion] Finding onion entry for IP xxx.yyy.xxx.yyy (in onion_entry_find_by_addr() at onion.c:267)
1615247437 DEBUG torsocks[39279]: Connecting to the Tor network on fd 3 (in tsocks_connect_to_tor() at torsocks.c:473)
1615247437 DEBUG torsocks[39279]: Setting up a connection to the Tor network on fd 3 (in setup_tor_connection() at torsocks.c:368)
1615247437 DEBUG torsocks[39279]: Socks5 sending method ver: 5, nmethods 0x01, methods 0x00 (in socks5_send_method() at socks5.c:228)
1615247437 DEBUG torsocks[39279]: Socks5 received method ver: 5, method 0x00 (in socks5_recv_method() at socks5.c:262)
1615247437 DEBUG torsocks[39279]: Socks5 sending connect request to fd 3 (in socks5_send_connect_request() at socks5.c:459)
1615247557 DEBUG torsocks[39279]: Socks5 received connect reply - ver: 5, rep: 0x06, atype: 0x01 (in socks5_recv_connect_reply() at socks5.c:518)
1615247557 ERROR torsocks[39279]: Connection timed out (in socks5_recv_connect_reply() at socks5.c:547)
1615247557 DEBUG torsocks[39279]: [close] Close caught for fd 3 (in tsocks_close() at close.c:33)
My torsocks
config is default, as well as the torrc
one.
As the Controller is documented as being thread safe, I'm having a hard time solving this timeout issue. How can I solve this huge share of timeouts issue ?
Controller.get_network_statuses()
then picking among the relays with a Running flag, I'm picking a Guard an Exit and a middle one, assembling them in a path and usingController.new_circuit()
to build it. Repeating until a valid circuit is successfully created. Each connection use a fully different circuit, avoiding to use the same Guard twice, and streams are attached manually, one stream per circuit.