我想使用Tor对网页发出多个GET请求.我想为每个请求使用不同的ipaddress.
import socks
import socket
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9150)
socket.socket = socks.socksocket
import requests
print (requests.get('http://icanhazip.com')).content
Run Code Online (Sandbox Code Playgroud)
使用这个,我提出了一个请求.如何更改ipaddress以制作另一个?
sha*_*k3r 85
你的问题有两个方面 -
第一个很容易使用最新的(v2.10.0以上)requests库,另外还需要requests[socks]使用socks代理.
安装 -
pip install requests requests[socks]
Run Code Online (Sandbox Code Playgroud)
基本用法 -
import requests
def get_tor_session():
session = requests.session()
# Tor uses the 9050 port as the default socks port
session.proxies = {'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050'}
return session
# Make a request through the Tor connection
# IP visible through Tor
session = get_tor_session()
print(session.get("http://httpbin.org/ip").text)
# Above should print an IP different than your public IP
# Following prints your normal public IP
print(requests.get("http://httpbin.org/ip").text)
Run Code Online (Sandbox Code Playgroud)
要更新Tor IP,即拥有一个新的可见退出IP,您需要能够通过它连接到Tor服务ControlPort,然后发送NEWNYM信号.
ControlPort默认情况下,Normal Tor安装不启用.您必须编辑您的torrc文件并取消注释相应的行.
ControlPort 9051
## If you enable the controlport, be sure to enable one of these
## authentication methods, to prevent attackers from accessing it.
HashedControlPassword 16:05834BCEDD478D1060F1D7E2CE98E9C13075E8D3061D702F63BCD674DE
Run Code Online (Sandbox Code Playgroud)
请注意,HashedControlPassword以上是密码"password".如果你想设置不同的密码,更换HashedControlPassword时指出,从输出中的torrc tor --hash-password "<new_password>"这里<new_password>是您要设置的密码.
.................................................. ..............................
Windows用户警告:请参阅此处的帖子.
在Windows上存在一个问题,如果使用以下命令安装了tor,则会忽略torrc文件中controlport的设置:
tor --service install
Run Code Online (Sandbox Code Playgroud)
要解决此问题,请在编辑torrc文件后,键入以下命令:
tor --service remove
tor --service install -options ControlPort 9051
Run Code Online (Sandbox Code Playgroud)
.................................................. ..............................
好的,现在我们已经正确配置了Tor,如果Tor已经运行,你将不得不重启Tor.
sudo service tor restart
Run Code Online (Sandbox Code Playgroud)
Tor现在应该在9051上启动并运行ControlPort,我们可以通过它向它发送命令.我更喜欢使用官方的词库来控制Tor.
安装 -
pip install stem
Run Code Online (Sandbox Code Playgroud)
您现在可以通过调用以下函数来更新Tor IP.
续订IP -
from stem import Signal
from stem.control import Controller
# signal TOR for a new connection
def renew_connection():
with Controller.from_port(port = 9051) as controller:
controller.authenticate(password="password")
controller.signal(Signal.NEWNYM)
Run Code Online (Sandbox Code Playgroud)
要验证Tor是否有新的退出IP,只需重新运行第1部分中的代码.由于某些我不知道的原因,您需要创建一个新session对象才能使用新IP.
session = get_tor_session()
print(session.get("http://httpbin.org/ip").text)
Run Code Online (Sandbox Code Playgroud)
jam*_*ell 26
这是您要使用的代码(使用下载stem包pip install stem)
from stem import Signal
from stem.control import Controller
with Controller.from_port(port = 9051) as controller:
controller.authenticate(password='your password set for tor controller port in torrc')
print("Success!")
controller.signal(Signal.NEWNYM)
print("New Tor connection processed")
Run Code Online (Sandbox Code Playgroud)
祝你好运,希望有效.
Jam*_*own 22
您可以尝试纯 python Tor 协议实现Torpy。根本不需要原始 Tor 客户端或 Stem 依赖。
$ pip3 install torpy[requests]
...
$ python3.7
>>> from torpy.http.requests import TorRequests
>>> with TorRequests() as tor_requests:
... print("build circuit")
... with tor_requests.get_session() as sess:
... print(sess.get("http://httpbin.org/ip").json())
... print(sess.get("http://httpbin.org/ip").json())
... print("renew circuit")
... with tor_requests.get_session() as sess:
... print(sess.get("http://httpbin.org/ip").json())
... print(sess.get("http://httpbin.org/ip").json())
...
build circuit
{'origin': '23.129.64.190, 23.129.64.190'}
{'origin': '23.129.64.190, 23.129.64.190'}
renew circuit
{'origin': '198.98.50.112, 198.98.50.112'}
{'origin': '198.98.50.112, 198.98.50.112'}
Run Code Online (Sandbox Code Playgroud)
因此,每次当您获得新会话时,您都会获得新身份(基本上,您将获得带有新出口节点的新电路)。在自述文件https://github.com/torpyorg/torpy 中查看更多示例
Erd*_*ker 15
你可以使用torrequest库(无耻插件).它可以在PyPI上找到.
from torrequest import TorRequest
with TorRequest() as tr:
response = tr.get('http://ipecho.net/plain')
print(response.text) # not your IP address
tr.reset_identity()
response = tr.get('http://ipecho.net/plain')
print(response.text) # another IP address, not yours
Run Code Online (Sandbox Code Playgroud)
小智 7
import requests
proxies = {
'http': 'socks5://localhost:9050',
'https': 'socks5://localhost:9050'
}
url = 'http://httpbin.org/ip'
print(requests.get(url, proxies=proxies).text)
Run Code Online (Sandbox Code Playgroud)
这个答案完成了 Ashish Nitin Patil for windows的答案 (请随时更新这个答案)
ControlPort 9051
## If you enable the controlport, be sure to enable one of these
## authentication methods, to prevent attackers from accessing it.
HashedControlPassword 16:05834BCEDD478D1060F1D7E2CE98E9C13075E8D3061D702F63BCD674DE
Run Code Online (Sandbox Code Playgroud)
上面HashedControlPassword是密码。如果您想在控制台中设置不同的密码,请导航至\Tor Browser\Browser\TorBrowser\Tor并键入以下命令:)tor.exe --hash-password password_XYZ | more。它会给你类似HashedControlPassword 16:54C092A8...“这是你的密码”的信息。现在您可以将其添加到 torrc 文件 ( Tor Browser\Browser\TorBrowser\Data\Tor\torrc)。
然后您需要重新启动 Tor:
tor --service remove
tor --service install -options ControlPort 9051
Run Code Online (Sandbox Code Playgroud)
要检查是否有效,请键入netstat -an您现在将看到端口 9051 已打开。
请注意,这tor --service install -...将创建Tor Win32 Service. 由于某种原因,似乎您必须停止服务才能使用浏览器(运行services.msc)
编辑:您会在这里找到很多信息(关于端口号和代理、Tor、Privoxy、自动切换用户代理...)。