有没有办法在Perl中查询服务器的操作系统类型?例如,如果我知道远程服务器正在运行Windows,我可能会从本地计算机向它发送一个winver并获取输出以确定它正在运行的Windows版本。然而,有没有办法变得更抽象,简单地问“你是谁?”
由于CPAN很大,我想知道是否有一个模块封装了这种功能。
答案 0 :(得分:3)
如果您可以在删除服务器上获得命令行访问权限,那么您应该可以使用%ENV
:
jmaney> perl -e 'print "$ENV{OSTYPE}\n";'
linux
编辑:好像Windows中的密钥(或者,至少在我的笔记本电脑上的Windows 7上)是OS
。不幸的是,通过%ENV
的确切解决方案依赖于操作系统......但是,您可以检查$ENV{OS}
或$ENV{OSTYPE}
中的哪一个已定义(如果它们都是定义,然后规范地选择你想要使用的那个),并相应地进行。
答案 1 :(得分: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
标题进行测试。