当端口 1433 关闭时,pymssql 库如何回退到命名管道端口?
Posted
技术标签:
【中文标题】当端口 1433 关闭时,pymssql 库如何回退到命名管道端口?【英文标题】:How does the pymssql library fall back on the named pipe port when port 1433 is closed? 【发布时间】:2020-02-04 21:42:07 【问题描述】:我正在尝试删除 pymssql 并迁移到我当前正在进行的 python 3.6 项目上的 pyodbc。网络拓扑涉及两台机器,它们都在同一个 LAN 和同一个子网上。客户端是基于 ARM debian 的机器,服务器是 windows 盒子。 MSSQL 框上的端口 1433 已关闭,但端口 32001 已打开,并且 pymssql 仍然能够远程连接到服务器,因为它以某种方式回退到使用命名管道端口 (32001)。
我的问题是 pymssql 如何能够退回到另一个端口并与服务器通信? pyodbc 无法做到这一点,就好像我尝试使用端口 1433 它失败并且不尝试定位命名管道端口一样。我已经尝试挖掘 pymssql 源代码以查看它是如何工作的,但我所看到的只是对 dbopen 的调用,它最终出现在 freetds 库中。另外澄清一下, tsql -LH 返回命名的 pip 信息和打开的端口,这与我使用 netstat 和 nmap 看到的一致。我 100% 确定 pymssql 回退到使用命名管道端口,因为在与 pymssql 连接后建立了与命名管道端口的连接。
任何关于 pymssql 如何做到这一点但 pyodbc 不能做到这一点的见解或指导将不胜感激。
【问题讨论】:
【参考方案1】:删除 PORT= 参数并在连接字符串中使用 SERVER=ip\instance 使用命名管道而不是端口 1433 进行连接。我仍然不确定驱动程序本身是如何知道这样做的,但它可以工作并解决了我的问题。
【讨论】:
以上是关于当端口 1433 关闭时,pymssql 库如何回退到命名管道端口?的主要内容,如果未能解决你的问题,请参考以下文章