查找 Informix 数据库服务器
Posted
技术标签:
【中文标题】查找 Informix 数据库服务器【英文标题】:Finding Informix DB Server 【发布时间】:2014-04-01 13:10:10 【问题描述】:我有一台服务器,我知道上面安装了Informix
,但我不知道是谁安装的。有一个封闭源客户端连接到该服务器,但除了用户名和密码之外,我什么也得不到。我不知道如何连接它,我不知道它的端口号和服务器名称是什么。我已经下载了SQuirreL
和JDBC 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 数据库服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从 Informix 实时推送到 .NET 服务器?