【问题标题】:Query a remote server's operating system?查询远程服务器的操作系统?
【发布时间】:2011-09-09 15:47:18
【问题描述】:

有没有办法在 Perl 中查询服务器的操作系统类型?例如,如果我知道远程服务器正在运行 Windows,我可能会从本地计算机向它发送一个 winver 并获取输出以确定它运行的是哪个版本的 Windows。然而,有没有办法更抽象,简单地问“你是什么?”

由于 CPAN 很大,我想知道是否有一个模块可以封装这种功能。

【问题讨论】:

  • “服务器”是一个完全模棱两可的术语。如此模棱两可,以至于没有人能回答这个问题。允许回答问题的信息将说明此“服务器”可以响应哪些协议。
  • 谢谢,我会记住的。

标签: perl operating-system


【解决方案1】:

如果您可以在删除服务器上获得命令行访问权限,那么您应该可以使用%ENV

jmaney> perl -e 'print "$ENV{OSTYPE}\n";'
linux

编辑: 看起来 Windows(或者,至少在我的笔记本电脑上的 Windows 7 上)中的密钥是 OS。因此,不幸的是,通过%ENV 的确切解决方案取决于操作系统......但是,您可以检查$ENV{OS}$ENV{OSTYPE} 中的哪一个已定义(如果它们都已定义,则规范地选择哪个您要使用的),然后进行相应的操作。

【讨论】:

  • 操作员正在寻找远程服务器的操作系统。您的声明适用于“本地”机器(或假设登录等)......不,dv 不是我的......
  • 并且 如果 OP 可以在远程服务器上获得命令行访问权限(正如我在回答的第一句话中指出的那样),那么 OP 就有机会弄清楚远程服务器的操作系统。
  • 如果您可以在远程服务器上获得命令行访问权限,那么编写 Perl 程序以在该服务器上运行绝对没有意义,因为您可以尝试类似 uname 之类的东西。
  • 杰克,这是一个很好的答案,谢谢。很抱歉混淆.. 但我实际上可以 获得命令行访问权限.. 我知道 uname 和什么不知道,但主要希望看到它通过本地机器上的 Perl 脚本完成。主要问题应该集中在想知道一个 CSPAN 模块是否可以查询远程服务器,给定一个 IP 地址,并获取有关它的信息。不过再次感谢。
【解决方案2】:

没有万无一失的方法可以做到这一点,但 HTTP Server 标头(服务器不需要发送)通常包含操作系统。例如,它可能看起来像这样(来自Wikipedia):

    Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)

The Perl CGI module has an http function that gets the HTTP headers。你可以这样使用它:

my $server = $q->http('Server');
# Test $server for Windows, *nix, etc
# My Perl experience is minimal and I haven't used it in
# a while, so I'm not going to give an example here, but
# someone can feel free to edit one in.

CPAN 可能有一个模块可以为您对 Server 标头进行测试。

【讨论】:

  • 不幸的是我无法假设。无论如何,感谢您的回答:)
  • @Wooble:你是对的。作为一名网络开发人员,当我想到“服务器”时,这就是我的想法。既然他可以获得命令行访问权限,这并不重要。
猜你喜欢
  • 2019-10-05
  • 2017-10-12
  • 2016-05-17
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
相关资源
最近更新 更多