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

时间:2019-10-23 14:53:29

标签: python sql database sockets socks

我正在尝试连接到需要代理(袜子)的数据库,如果我手动使用代理连接,则可以连接,但需要使脚本连接到机器的代理(袜子)以制作SELECT

脚本

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)

输出

  

回溯(最近一次通话最后一次):文件“ connection.py”,第15行,在          conn = requests.get(pymssql.connect(host = server,user = username,password = password,database = database))   pymssql.connect中的文件“ src \ pymssql.pyx”,第642行   pymssql.OperationalError:(20009,'DB-Lib错误消息20009,   严重性9:\ n无法连接:Adaptive Server不可用或没有   不存在(172.43.56.89:1433)\nNet-Lib错误,发生未知错误   (10060)\ n')

2 个答案:

答案 0 :(得分:1)

我认为一种选择是安装具有端口转发功能的本地隧道袜子,以映射数据库端口并像服务器一样充当本地主机。

如果您在Unix计算机上运行python脚本,这真的非常有效。

类似于此系统调用(对于3306 mariaDB):

ssh -L 3306:localhost:3306 user@x.x.x.x

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

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

答案 1 :(得分:0)

如果您不想入侵pymssql源代码,则可以使用外部工具来通过袜子代理重定向所有TCP流量,例如Windows的FreeCap,Windows的RedSocks Linux和Proximac(适用于macOS)。