Hackney能否一次连接到多个SOCKS5电路

时间:2016-02-13 00:27:20

标签: erlang elixir socks

我在Elixir项目中使用Hackney,我尝试通过SOCKS5一次连接到多个Tor电路。我正在向一个只返回响应正文中IP地址的网站发出此请求,而不是其他任何内容。

问题在于,当我通过其中一个Tor进程发出请求,然后通过另一个Tor进程立即另一个进程时,我获得相同的IP地址(因此几乎所有请求都通过同一电路)。

 > {:ok, status, headers, c1} = :hackney.request(:get ,url, [], "", [{:proxy, {:socks5, :localhost, 9062}}])
 > :hackney.body(c1) 
 {:ok, "one.ip.add.ress\n"}
 > {:ok, status, headers, c2} = :hackney.request(:get ,url, [], "", [{:proxy, {:socks5, :localhost, 9063}}])
 > :hackney.body(c2) 
 {:ok, "one.ip.add.ress\n"}

如果我等待大约1分钟并首先与其他流程提出相同的请求,我会同时获得他的IP:

 > {:ok, status, headers, c2} = :hackney.request(:get ,url, [], "", [{:proxy, {:socks5, :localhost, 9063}}])
 > :hackney.body(c2)     
 {:ok, "two.ip.add.ress\n"}
 > {:ok, status, headers, c1} = :hackney.request(:get ,url, [], "", [{:proxy, {:socks5, :localhost, 9062}}])
 > :hackney.body(c1)          
 {:ok, "two.ip.add.ress\n"}

如果我等了1分钟左右,我再次获得第一个的IP。

 > {:ok, status, headers, c1} = :hackney.request(:get ,url, [], "", [{:proxy, {:socks5, :localhost, 9062}}])
 > :hackney.body(c1)        
 {:ok, "one.ip.add.ress\n"}
 > {:ok, status, headers, c2} = :hackney.request(:get ,url, [], "", [{:proxy, {:socks5, :localhost, 9063}}])
 > :hackney.body(c2)         
 {:ok, "one.ip.add.ress\n"}

如果我等待更长时间的两次IP更改,但是如果我在短时间内通过两个进程发出请求,我将获得两个相同的IP(我使用的第一个TOR进程的IP):

 > {:ok, status, headers, c1} = :hackney.request(:get ,url, [], "", [{:proxy, {:socks5, :localhost, 9062}}])
 > :hackney.body(c1)        
 {:ok, "new.ip.add.ress\n"}
 > {:ok, status, headers, c2} = :hackney.request(:get ,url, [], "", [{:proxy, {:socks5, :localhost, 9063}}])
 > :hackney.body(c2)         
 {:ok, "new.ip.add.ress\n"}

哈克尼有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:0)

确保使用不同的数据目录启动多个Tor实例。(--DataDirectory参数)。