需要在 perl 中从远程机器获取 Oracle 和 MySQL 的版本

Posted

技术标签:

【中文标题】需要在 perl 中从远程机器获取 Oracle 和 MySQL 的版本【英文标题】:Need to get the Versions of Oracle and MySQL from a remote machine in perl 【发布时间】:2020-08-14 19:05:02 【问题描述】:

我对 Perl 非常陌生。我被告知要编写一个脚本,其中只有远程机器的 IP 地址。我试图通过IP地址ping机器:

$retval=system("ping xxx.xxx.x.xxx");
if ($retval==0) 
    print "It pings\n";
 else 
    print "ping failed\n";

    现在我想知道那台机器上的操作系统版本 (xxx.xxx.x.xxx) 是 WindowsServer 2019 还是任何具有该版本的 Linux 版本。 想知道该机器的数据库版本是Oracle 还是mysql 及其版本。 想知道它是否安装了 Weblogic Server 或 IIS 服务器,如果安装了它的版本是什么。

我希望将操作系统名称及其版本、数据库名称及其版本以及服务器版本保存在一个文件中。 有人可以帮助我使用 Perl 脚本成功实现这一目标吗?

提前致谢。

【问题讨论】:

如果远程机器有openssh,你可以试试Net::OpenSSH @HåkonHægland,谢谢先生的回复!远程机器没有安装它们。你能推荐其他方法吗? 查看Net::Telnet 了解不加密数据的替代方案 对于数据库版本:像往常一样使用DBI 连接到数据库,对于MySQL 使用$dbh->mysql_serverversion,对于Oracle 使用$dbh->func('ora_server_version') 【参考方案1】:

您应该考虑使用作为 Perl 安装标准部分的 Net::Ping 模块,而不是使用像 ping 这样的外部程序。

摘自:

use Net::Ping;

$p = Net::Ping->new();
print "$host is alive.\n" if $p->ping($host);
$p->close();

关于获取更多信息,我赞同使用Net::OpenSSH 的建议。在评论中,您说您不能使用它,因为它没有安装在您的远程系统上,但我认为您误解了它的工作原理。该模块只需要安装在您的本地系统上。远程系统只需要一个ssh 服务器。

或者,您可以查看Net::SNMP 或Nmap::Parser。

【讨论】:

感谢@Dave 的回复。我想要那个远程机器上的数据库和操作系统的版本。我怎样才能得到它?【参考方案2】:

为了获得远程操作系统的版本,我想你没有太多的解决方案:

使用可以执行 TCP 扫描的扫描器(例如 nmap),它可以“可能”将操作系统名称/版本发回给您(可能有 Perl 模块可以执行此操作,但您也可以通过perl 来做到这一点

远程连接到机器(使用该机器上支持的协议,例如 SSH 或类似协议,具体取决于操作系统..)并运行系统命令(例如 *nix 机器上的“uname”)以获取操作系统版本。 使用这种方法,您还可以收集其他任何东西(数据库、中间件等) 但这意味着您知道如何连接到另一台机器(并且您通常了解操作系统..)。

【讨论】:

以上是关于需要在 perl 中从远程机器获取 Oracle 和 MySQL 的版本的主要内容,如果未能解决你的问题,请参考以下文章

perl 中的 DBD::Oracle 和 DBI 错误

使用 Pywinrm 在远程 Windows 机器中从 linux 执行 vbs 脚本(执行双跳)

如何在 MaxOSX 中从 JDBC 调用 Oracle TimesTen

如何使用 perl 和 Net::OpenSSH 在远程机器上启动后台进程?

如何使用 Perl 通过 TCP 和 UDP 连接到远程机器?

在 Perl 中从数组中删除值的最佳方法是啥?