对于某些需要,我想要一个 python 应用程序连接到一个 tor 代理,但我想使用静态 IP 而不是 DNS。确实当我
我无法实现它。当我想连接到数据库时,请求总是超时。
这是我的 docker-compose 文件:
version: "3.9"
services:
test:
image: busybox
command: ifconfig
networks:
app_net:
ipv4_address: 172.18.18.9
app:
build: ./python
depends_on:
- tor
tor:
build:
context: ./tor
container_name: tor
environment:
- TOR_INSTANCES=1
- TOR_HASHED_PASSWORD=16:D87F66F5B5E2A6BC605544DBB4720DAD433C1E8CE7D18F835D58A4353E
- TOR_PROXIES_CONTROLLER_AUTH_PASSWORD=testtor
- TOR_CONTROLLER_HOST=172.18.18.10
ports:
- "9050-9060:9050-9060"
- "10000-10050:10000-10050"
networks:
app_net:
ipv4_address: 172.18.18.10
networks:
app_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.18.18.0/24
gateway: 172.18.18.1
我的python代码很简单,这就是我想要做的:
- 从请求中获取 IP(没有代理)
- 相同但有代理
- 续订代理
- 再次执行请求
第一个请求顺利通过,但随后代理超时。显然,我也无法更新 IP,因为 ip 所以没有解决。
^[[Dapp_1 | After request :: https://ifconfig.io/ip 200 82.123.30.131
app_1 |
app_1 | SOCKSHTTPSConnectionPool(host='ifconfig.io', port=443): Max retries exceeded with url: /ip (Caused by NewConnectionError('<urllib3.contrib.socks.SOCKSHTTPSConnection object at 0xffffbcb16940>: Failed to establish a new connection: [Errno -2] Name or service not known'))
app_1 | Traceback (most recent call last):
app_1 | File "/usr/local/lib/python3.8/site-packages/stem/socket.py", line 535, in _make_socket
app_1 | control_socket.connect((self.address, self.port))
app_1 | TimeoutError: [Errno 110] Connection timed out
但是,如果我只执行 tor docker-container,并将 tor 代理替换为“localhost”,它就可以正常工作:
def add_proxies(self):
self.http.proxies['http'] = 'socks5://localhost:9051'
self.http.proxies['https'] = 'socks5://localhost:9051'
def renew_proxy_ip(self):
with Controller.from_port(port=10001) as controller:
controller.authenticate(password="testtor")
print("Authentication :: ", controller.is_authenticated())
controller.signal(Signal.NEWNYM)
预期输出
After request :: https://ifconfig.io/ip 200 2a01:cb04:be0:b300:d44d:f8d3:6328:b2f1
After request :: https://ifconfig.io/ip 200 2a00:1768:6001:28:2236::1
Authentication :: True
After request :: https://ifconfig.io/ip 200 2a03:4000:37:645::
我添加了一个 ifconfig busybox 来查看 ip 是否正确映射,是这样的:
test_1 | eth0 Link encap:Ethernet HWaddr 02:42:AC:12:12:09
test_1 | inet addr:172.18.18.9 Bcast:172.18.18.255 Mask:255.255.255.0
test_1 | UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
test_1 | RX packets:2 errors:0 dropped:0 overruns:0 frame:0
test_1 | TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
test_1 | collisions:0 txqueuelen:0
test_1 | RX bytes:200 (200.0 B) TX bytes:0 (0.0 B)
test_1 |
test_1 | lo Link encap:Local Loopback
test_1 | inet addr:127.0.0.1 Mask:255.0.0.0
test_1 | UP LOOPBACK RUNNING MTU:65536 Metric:1
test_1 | RX packets:0 errors:0 dropped:0 overruns:0 frame:0
test_1 | TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
test_1 | collisions:0 txqueuelen:1000
test_1 | RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
我创建了一个仓库,您可以在其中重现该问题:https ://github.com/thibault-lr/docker-static-ip只需使用docker-compose up
我有点不得不继续这样做,控制器身份验证需要一个 IP 才能连接。我已经坚持了一段时间,我想知道是否有人已经遇到过这个问题?我在 macos 上并在 linux 服务器上尝试过,它保持不变
如果这是不可能的,我还没有探索其他解决方案:
- 使用 telnet 通过 DNS 连接到 Tor 网络
- 使用套接字文件进行身份验证
非常感谢提前!TL