兜兜转转,如果绕过限制访问HiveSQL

in voilk •  2 months ago

    HiveSQL是包含Hive区块链所有数据的一个MS SQL Server 数据库,是我认为HIVE上最有价值的项目之一。

    94a50e6c-e12e-465e-b2ca-8914222707d6.webp
    (图片由ChatGPT协助生成)

    通过HiveSQL可以查询很多有价值的数据,比如说都谁没有设置我成为他的见证人代理也没投我见证人票,都谁没有给我的帖子投票,然后画个圈圈哦,不对,是拿个小本本记下来。

    哈哈,开个玩笑,不过谁知道这玩笑到底是真是假呢,毕竟红楼梦中有句话假做真时真亦假,无为有处有还无

    扯远了,话说好长一段时间以来,O哥都没法正常使用HiveSQL数据库,也不知道是服务者封杀了来自国内的IP,抑或是墙封杀了HiveSQL的IP?反正对我而言结果是一样,那就是没法用。

    其实也不是完全没有办法,比如说我可以随便找台VPS,然后在VPS上使用Python脚本来访问到HiveSQL,虽然不方便,但是也能做些查询。

    2084039c-05b9-4513-95c2-ad2b3f5677d9.webp
    (图片由ChatGPT协助生成)

    前几天突发奇想,既然很多工具,包括浏览器都可以使用Socks5代理,那我何不试试让LINQPad(我使用的SQL 客户端)也通过代理访问呢?

    结果各种搜索后,得出结论——没法在LINQPad中设置代理,它就不支持这个功能,所以这条路根本就行不通。

    于是我又想,是不是可以在Python代码中直接使用代理呢?那样的话,我就可以在本机上使用代码通过代理访问HiveSQL了,貌似这个思路靠谱呀?

    为了快速地得到方案,我把这个问题丢给AI,分别丢给了ChatGPT和DeekSeek,两者都信誓旦旦地给了我代码,稍有不同,但是貌似听着都挺靠谱的。

    于是开干,ChatGPT给出的方案核心是:

    import socks
    import socket
    import pymssql
    
    socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 1111)
    socket.socket = socks.socksocket
    

    至于使用pymssql访问mssql数据库,倒没啥区别了。

    DeekSeek给的方案,和上述方案略有区别,核心代码如下:

    import pyodbc
    socks_proxy = 'socks5://127.0.0.1:1111'  
    
    import os
    os.environ['HTTP_PROXY'] = socks_proxy
    os.environ['HTTPS_PROXY'] = socks_proxy
    

    然后使用pyodbc访问MSSQL数据库,相应的Python代码也一堆,就不贴了。

    结果我用上述两个方案分别试过之后,就没有一个能工作的。

    20f36f64-9cea-4d43-b19d-b3382a6d26d6.webp
    (图片由ChatGPT协助生成)

    然后我分别在上述两组代码前加入如下测试代理的代码:

    import requests
    response = requests.get("http://httpbin.org/ip")
    print(response.text)
    

    如果代理设置生效,就会分别打印出本机的外网IP,以及代理的IP。原本可能代理设置的会有问题,结果测试发现,代理如同期待的那样正常工作,可是访问MSSQL的代码就是不起作用,这是为啥呢?

    又问了一下AI,回答如下:

    由于pymssql 库是用 Cython 实现的,它并未使用 Python 的 socket 模块,因此无法通过修改 socket.socket 来使其通过 SOCKS 代理。 因此,直接在 pymssql 中配置 SOCKS 代理是不可行的。

    听起来挺有道理的,不过接下来又建议我用pyodbc实现,代码嘛,就是DeepSeek给的代码,不用说,当然不会好用了。

    然后又问它们怎么办,结果就不断地给我在pymssqlpyodbc中来回给我切换,就算明确地告诉它们这两种方案都行不通,它们还在执拗地告诉我其中一种方案,头大。

    我觉得,如果继续和它纠缠下去,他大概能给我车轱辘话说上几天、几月、甚至几年,果断放弃吧。

    那么我这种情况有没有办法使用到HiveSQL呢?在VPS上不算,VPN或许是一种方案,但是我没买过任何商业的VPN,自己弄的几天就坏掉。

    想来想去,何不用SSH转发呢?既然用SSH可以弄Socks代理,我直接把HiveSQL服务器地址转发到本机(Localhost),岂不就完美解决了?

    最终使用类似如下代码,打通了一条SSH隧道:
    ssh -L 1433:sql_server_ip:1433 user@ssh_server_ip -N

    其中sql_server_ip换成HiveSQL的Server地址(vip.hivesql.io),然后把ssh_server_ip换成自己VPS的IP,搞定。

    然后,在代码中把相应的IP地址换成127.0.0.1 无论是在代码中用pymssql还是pyodbc都可以正常连接和使用啦。

    1b618986-2a09-4533-9b9c-ab1e0c733935.webp
    (图片由ChatGPT协助生成)

    不过,当我搞定这个SSH隧道之后,我突然想到,既然可以这样用,我为啥还要直接用代码呢?用LINQPad它不香嘛?哈哈哈哈。

    所以饶了一大圈,还是用LINQPad吧,真香!至于AI,我在纠结以后代码问题还问它不问它呢?大概还是要问的,只能仅供参考吧!

    还有就是,尽管AI没帮我搞定代码,但是也让我学到了代码中使用socks proxy的两种方法(requests可用),也不算一点收获都没有呢。

    相关链接

      Authors get paid when people like you upvote their post.
      If you enjoyed what you read here, create your account today and start earning FREE VOILK!