查找 Informix 数据库服务器

Posted

技术标签:

【中文标题】查找 Informix 数据库服务器【英文标题】:Finding Informix DB Server 【发布时间】:2014-04-01 13:10:10 【问题描述】:

我有一台服务器,我知道上面安装了Informix,但我不知道是谁安装的。有一个封闭源客户端连接到该服务器,但除了用户名和密码之外,我什么也得不到。我不知道如何连接它,我不知道它的端口号和服务器名称是什么。我已经下载了SQuirreLJDBC Informix 驱动程序。

如何在不知道端口和服务器名称的情况下连接到 JDBC Informix 服务器?

【问题讨论】:

【参考方案1】:

简而言之,您将需要端口号、服务器名称(以及数据库名称)来连接到 Informix。

假设您有权在安装了 Informix 的机器上四处搜寻,有几个地方可能会找到有关您的 Informix 服务器的详细信息。由于在您的情况下我没有看到有关安装 IDS (Informix) 的平台的任何详细信息,因此我将尝试提供 Unix 和 Windows 平台的信息。但首先,有一点背景:

设置与 Informix 的连接不需要太多参数。通常,您只需要:

用户名 密码 服务器 IP 地址 端口 服务器名称(Informix 实例的名称) 数据库名称([服务器名称] 上要连接的数据库的名称)

听起来你需要找出最后三个。

Linux:

在 Linux 平台(以及 Windows,我相信)上,有一些环境变量指向您系统上安装 Informix 的位置。其中最重要的是 %INFORMIXDIR%,它指向 Informix 安装的根目录。然而,很多时候,Informix 安装在 /opt 中,因此请尝试在那里。

在典型安装的 %INFORMIXDIR%/etc 中是一个名为 sqlhosts 的文件(它可能有一个特定服务器实例的后缀,但它会以 sqlhosts 开头)。在这个文件中是服务器名称,可能还有端口号。 %INFORMIXDIR%/etc/sqlhosts 包含以下格式的明文数据:

ServerName  NetType   HostName   Port/ServicesName

第一个值是您要查找的服务器名称。第四个值 (Port/ServicesName) 是端口号,或者是 /etc/services 中引用端口号的条目的名称。如果您没有看到端口号,请查看 /etc/services

例如,sqlhosts 可能包含如下内容:

myservername   onsoctcp   informix.mydomain.com   12345

在这种情况下,您的服务器名称是“myservername”,端口是 12345

或者,它可能看起来像这样:

myservername   onsoctcp   informix.mydomain.com   informixservice

在这种情况下,您必须在 /etc/services 中查找显示

的行
informixservice     12345/tcp

它会告诉你端口。

Windows

警告:我从未处理过安装在 Windows 上的 Informix 服务器,但是根据 IBM 文档,就手头的任务而言,它似乎没有太大的不同。

而不是文件 %INFORMIXDIR/etc/sqlhosts,您查找的信息包含在注册表项中

HKEY_LOCAL_MACHINE\SOFTWARE\INFORMIX\SQLHOSTS

使用 regedit.exe 读取存储在此条目中的值。

如果您在该 reg 键中找不到端口号,则 Windows 等效于 Unix 的 /etc/services 文件是

C:\Windows\System32\drivers\etc\services

使用文本编辑器检查此文件(记事本可以正常工作)。

希望这会有所帮助。祝你好运。

【讨论】:

刚刚注意到我忘记了一些事情:在 sqlhosts 文件中,HostName 条目可以是 IP 地址或主机名。系统管理员通常会使用静态 IP 服务器,例如数据库服务器,因此如果该条目包含 IP 地址而不是名称,请不要感到惊讶。【参考方案2】:

*简答:你不能。*

这种情况涉及安全问题,因此,数据库不会在您的网络上自行“发布”它,因为每个人都知道它在那里。

如果您需要在不联系您(您的?)环境管理员的情况下进行发现,则需要使用黑客技术(nmap 实用程序已在此处提供帮助)来发现一些信息(IP、端口),而您仍然缺少诸如 之类的信息服务器名协议,用户名和密码。

请注意,因为将记录在 Informix 数据库侦听器的连接尝试。

现在,如果您可以访问数据库所在的服务器,则可以查找 sqlhosts 文件并获取所有这些。

另一种更合理的选择是向您的 DBA/管理员询问配置,以证明您想要访问的理由。

【讨论】:

管理员对此一无所知,他们只是与另一家公司签约设置数据库和第三方软件。 好的,在这种情况下,您的公司可能以“root”或“管理员”(windows)身份访问服务器,与他们一起登录,您应该在所有文件夹中搜索“oninit”二进制文件以找到产品文件夹,然后检查“etc”子目录中的“sqlhosts”文件。如果服务器是windows,只需在开始菜单打开setnet32应用程序并检查参数即可。【参考方案3】:

您可以在主机上找到服务器:

onstat -g dis 

即使服务器离线(或可能退役)也会列出服务器。

服务器信息在 UNIX/Linux 上的 /INFORMIXTMP 中,我希望在 Windows 中的 C:\ 下有一个类似的文件夹。

【讨论】:

【参考方案4】:

您应该添加有关工作环境的更多信息:您的客户端是什么平台,您的服务器是什么平台,您是否可以访问服务器机器等。

如果您知道您计算机中的某些内容连接到其他计算机,那么您可以使用netstat 来发现它。如果您在 Linux 上工作,则有 -p 选项显示每个连接的 pid 和应用程序名称。

首先我们要发现闭源客户端的pid:

[root@test1 ~]# ps aux | grep my_app
root     12457  0.0  3.2 3342440 333336 ?      Sl   Mar06  21:01 java -cp /usr/local/bin/my_app...

现在,当我知道 pid 时,我可以使用 netstat:

[root@test1 ~]# netstat -tnp | grep 12457
tcp        0      0 ::ffff:169.0.1.71:55850     ::ffff:169.0.1.74:9088      ESTABLISHED 12457/java

从这个输出我可以看到 Infomix 可能在 169.0.1.74 机器的 9088 端口上工作。

在 Windows 上,您可以使用 SysInternals 的 TCPView 来查看类似的内容。

在 Windows 上,您还可以检查 ODBC 数据源管理器(32 位和 64 位)以查看是否使用了 Informix 驱动程序。

【讨论】:

以上是关于查找 Informix 数据库服务器的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL 查询查找 Informix 表和列详细信息

如何在informix中查找父级的引用记录

如何将数据从 Informix 实时推送到 .NET 服务器?

在 C# 中从 Informix 表创建类

从另一个基于 Linux 的系统到 Informix 数据库的 ODBC 连接

informix数据库错误码-268与-239有啥不同