代码之家  ›  专栏  ›  技术社区  ›  ArtOfWarfare

使用Telnet确定服务器是否运行MSSQL、IBM DB2或两者都不运行IE

  •  0
  • ArtOfWarfare  · 技术社区  · 10 年前

    我需要一种方法来确定给定地址的给定端口是否正在运行来自Python的Microsoft SQL Server、IBM DB2 Server实例,或者两者都没有。

    我的第一个想法是我可以使用Python的telnet库, telnetlib ,像这样:

    import telnetlib
    import socket
    
    def checkDBServerType(address, port):
        try:
            tn = telnetlib.Telnet(address, port)
        except socket.error:
            return None
        tn.write(<something>)
        if <something-else> in tn.read_eager():
            return "MSSQL"
        else:
            return "IBMDB2"
    

    问题是,我不知道该发什么。用户还将向我的程序提供用户名、密码和数据库名称,因此如果有帮助,这些信息也可用。

    此外,这是我第一篇关于ServerFault的文章,尽管我经常使用StackOverflow,有时也使用SuperUser。这是我提问的合适地点,还是在StackOverflow上更合适?(我无法决定是服务器管理员类型的人还是程序员类型的人更有可能提供帮助。)

    2 回复  |  直到 10 年前
        1
  •  3
  •   Ben Thul    10 年前

    由于您只是在寻找一种启发式方法,我想说,仅仅能够连接到默认端口将是一个很好的第一步。因此,例如,如果您可以连接到TCP 1433,那么可以合理地说该计算机正在运行SQL Server的默认实例。当然,这不是完美的(即你可能会得到假阳性或假阴性),但它很好。只有你能回答它对你是否足够好。

        2
  •  3
  •   Massimo    10 年前

    你不能简单地与数据库服务器“对话”,并期望它告诉你它正在运行什么样的软件;没有连接到数据库服务器的标准通用协议,尽管查询语言(SQL)非常标准化,但底层连接基于特定于每个数据库系统的协议;这些协议通常也不是基于文本的,因此您不能简单地打开数据库服务器的套接字并在上面写一些东西;此外,客户端应用程序通常不会直接使用它们:每个DBMS都提供一组连接库,这些连接库将它们巧妙地封装起来,这样您就不必了解如何与数据库服务器通信,而可以专注于实际查询其数据。

    最好的选择是获取SQL Server和DB2的客户机连接库,并要求每个连接库连接到远程服务器;无论谁先成功,都会告诉你远程端的服务器是什么类型的。