开发者问题收集

使用 python 连接代理(SOCKS)数据库

2019-10-23
5634

我正在尝试连接到一个需要 代理(socks) 才能连接的数据库,如果我手动使用代理连接,我可以连接,但我需要让脚本连接到机器的 代理(socks) 才能进行此 SELECT

SCRIPT

import socket
import socks
import requests
import pymssql

socks.set_default_proxy(socks.SOCKS5, "138.34.133.155", 1080, True, 'user','password')
socket.socket = socks.socksocket

server = '172.43.56.89'
username = 'user'
password = 'password'
database = 'dbname'

conn = requests.get(pymssql.connect(host=server,user=username,password=password,database=database))

cursor = conn.cursor()

cursor.execute("SELECT column FROM table")

row = cursor.fetchall()

conn.close()

for i in row:
    print(i)

OUTPUT

Traceback (most recent call last): File "connection.py", line 15, in conn = requests.get(pymssql.connect(host=server,user=username,password=password,database=database)) File "src\pymssql.pyx", line 642, in pymssql.connect pymssql.OperationalError: (20009, 'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (172.43.56.89:1433)\nNet-Lib error during Unknown error (10060)\n')

2个回答

我认为一个选项是安装一个带有端口转发的本地隧道套接字,以映射您的数据库端口并充当您的服务器是本地主机一样。

如果您在 Unix 计算机上运行 python 脚本,它确实非常高效。

类似于这个系统调用(用于 3306 mariaDB):

ssh -L 3306:localhost:3306 [email protected]

首先,运行 SSH,然后,您告诉他启用从 3306 端口到您通过 user@IP 连接的服务器的 localhost:3306 端口的端口转发。

这样,来自您的 local machine:3306 的每个查询都将发送到您的 MariaDB:3306 服务器,允许您像在服务器上一样使用它。

Blag
2019-10-28

如果您不想侵入 pymssql 源代码,可以使用外部工具将所有 TCP 流量重定向到 socks 代理,例如适用于 Windows 的 FreeCap 、适用于 Linux 的 RedSocks 和适用于 macOS 的 Proximac

Arnie97
2019-10-28