我在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"}
哈克尼有没有办法避免这种情况?
答案 0 :(得分:0)
确保使用不同的数据目录启动多个Tor实例。(--DataDirectory
参数)。