如何在不访问命令行的情况下找到运行的 Apache 版本?

How do I find the version of Apache running without access to the command line?

提问人:Simon 提问时间:10/3/2008 最后编辑:Peter MortensenSimon 更新时间:8/10/2023 访问量:274579

问:

我需要找到一个对版本进行编码的文件,或者找到一种在网络上轮询它的方法,以便它显示其版本。服务器在主机上运行,该主机不会为我提供命令行访问,尽管我可以通过FTP浏览安装位置。

我尝试过 HEAD,但没有报告版本号。

如果我尝试一个缺失的页面来获取 404,它就会被拦截,并返回一个没有服务器信息的库存页面。我想这表明服务器正在加固。

仍然没有更接近......

我按照建议放置了一个PHP文件,但是我无法浏览到它,也无法完全确定将加载它的URL路径。无论如何,我收到了大量拒绝访问的消息和相同的股票 404 页面。我知道服务器受到非常强大的保护,这让我感到有些安慰。

阿帕奇

评论

0赞 workmad3 10/3/2008
是否可以在服务器上的脚本中运行 shell 命令?
0赞 Simon 10/3/2008
好问题,不知道。我去试一试
0赞 Paul Dixon 10/3/2008
您可以从 phpshell.sourceforge.net 安装 PHPShell,这样您就可以四处逛逛

答:

138赞 7 revsPaul Dixon #1

方法

连接到主机上的端口 80 并发送它

HEAD / HTTP/1.0

这需要紧随其后的是回车 + 换行两次

你会得到这样的东西

HTTP/1.1 200 OK
Date: Fri, 03 Oct 2008 12:39:43 GMT
Server: Apache/2.2.9 (Ubuntu) DAV/2 SVN/1.5.0 PHP/5.2.6-1ubuntu4 with Suhosin-Patch mod_perl/2.0.4 Perl/v5.10.0
Last-Modified: Thu, 02 Aug 2007 20:50:09 GMT
ETag: "438118-197-436bd96872240"
Accept-Ranges: bytes
Content-Length: 407
Connection: close
Content-Type: text/html; charset=UTF-8

然后,您可以从 Server: 标头中提取 apache 版本

您可以使用的典型工具

您可以使用 HEAD 实用程序,它随 Perl 的 LWP 库的完整安装一起提供,例如

HEAD http://your.webserver.com/

或者,使用 curl 实用程序,例如

 curl --head http://your.webserver.com/

还可以使用浏览器扩展来查看服务器标头,例如 Live HTTP HeadersFirebug for Firefox,或 Fiddler for IE

坚持使用 Windows?

最后。如果您使用的是 Windows,并且没有其他可用功能,请打开命令提示符(“开始”菜单->运行,键入“cmd”并按回车键),然后键入以下命令

telnet your.webserver.com 80

然后输入(小心,您的字符不会被回声)

HEAD / HTTP/1.0

按两次回车键,您将看到服务器标头。

其他方法

正如 cfeduke 和 Veynom 所提到的,服务器可以设置为在 Server: 标头中返回有限的信息。尝试将PHP脚本上传到您的主机,其中包含此脚本

<?php phpinfo() ?>

使用 Web 浏览器请求该页面,您应该会看到那里报告的 Apache 版本。

你也可以尝试使用 PHPShell 来试一试,尝试一个像这样的命令

/usr/sbin/apache2 -V

评论

9赞 Simon 10/3/2008
如此接近。但是,服务器只说“Apache”,根本没有版本详细信息
0赞 Veynom 10/3/2008
也是我写的。:)在某些情况下只有 Apache。
7赞 user110857 1/9/2013
此外,在 Windows 7 上使用命令提示符时,请务必注意需要启用 telnet:>“程序和功能”>“开始”控制面板>打开或关闭 Windows 功能 >确保选中“Telnet 客户端”>点击确定
0赞 emeraldhieu 7/23/2013
在 中,我试图发送,但它显示Stuck with Windows?HEADHTTP/1.1 503 Service Temporarily Unavailable
0赞 AturSams 7/1/2014
它只是说服务器:Apache
1赞 Steve g 10/3/2008 #2

通过端口 80 Telnet 到主机。

类型:

get / http1.1
::enter::
::enter::

它是一种 HTTP 请求,但它是无效的,因此它给你的 500 错误可能会给你你想要的信息。末尾的空行很重要,否则它看起来只是挂起。

0赞 Jonathan Mueller 10/3/2008 #3

如果他们启用了错误页面,您可以转到不存在的页面并查看 404 页面的底部。

评论

0赞 ConroyP 10/3/2008
如果主机启用了自定义 404 处理程序,这将不起作用,例如 microsoft.com/this_is_a_made_up_page
0赞 Oli 10/3/2008 #4

在默认安装中,调用一个不存在的页面,最后会出现版本错误:

未找到对象!

在此服务器上找不到请求的 URL。如果您手动输入了 URL,请 请检查拼写,然后重试。
如果您认为这是服务器错误,请与网站管理员联系。
错误 404
localhost
10/03/08 14:41:45
Apache/2.2.8 (Win32) DAV/2 mod_ssl/2.2.8 OpenSSL/0.9.8g mod_autoindex_color PHP/5.2.5

5赞 cfeduke 10/3/2008 #5

在极少数情况下,强化的 HTTP 服务器配置为不提供服务器信息或误导性服务器信息。在这些情况下,如果服务器启用了 PHP,则可以添加:

<?php phpinfo(); ?>

并浏览到该文件并查找

_SERVER["SERVER_SOFTWARE"]

进入。这容易受到同样强化缺乏信息/误导的影响,尽管我认为它不会经常更改,因为这种方法首先需要访问机器才能创建 PHP 文件。

评论

0赞 PaulH 9/25/2017
我的强化服务器也有“Apache”,售价 _SERVER 美元[“SERVER_SOFTWARE”]
5赞 Veynom 10/3/2008 #6

警告,某些 Apache 服务器在使用 HEAD 时并不总是发送其版本号,例如在本例中:

HTTP/1.1 200 OK
Date: Fri, 03 Oct 2008 13:09:45 GMT
Server: Apache
X-Powered-By: PHP/5.2.6RC4-pl0-gentoo
Set-Cookie: PHPSESSID=a97a60f86539b5502ad1109f6759585c; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Content-Type: text/html



Connection to host lost.

如果确实安装了 PHP,只需使用 php info 命令:

<?php phpinfo(); ?>

评论

2赞 Simon East 7/23/2015
phpinfo()也并不总是显示 Apache 版本,至少在使用 CGI/FastCGI 时不会。
4赞 mmacaulay 10/3/2008 #7

Apache 服务器给出的版本信息级别可以通过其配置中的 ServerTokens 设置进行配置。

我相信还有一个设置可以控制版本是否出现在服务器错误页面中,尽管我不记得它是什么。如果您无法直接访问服务器,并且服务器管理员很称职,并且不希望您知道他们正在运行的版本...我想你可能是 SOL

0赞 Eduardo 10/3/2008 #8

您最好的选择是通过 PHP: 来自客户端的所有版本请求都不可信,因为您的 Apache 可以配置 ServerTokens Prod 和 ServerSignature Off。请参见:http://www.petefreitag.com/item/419.cfm

45赞 crmpicco 8/24/2012 #9

httpd -v将为您提供服务器上运行的 Apache 版本(如果您有 SSH/shell 访问权限)。

输出应如下所示:

Server version: Apache/2.2.3
Server built:   Oct 20 2011 17:00:12

正如已经建议的那样,你也可以这样做,这将给你相同的输出,但会得到更多风格的Linux的支持。apachectl -v

评论

15赞 Janus Troelsen 7/17/2013
在 Ubuntu 上,二进制文件称为 ,而不是apache2httpd
1赞 jontyc 8/9/2013
+1 - phpinfo() 和 curl 没有为我正在使用的共享主机提供足够的信息。这确实如此。
1赞 Konzulic 3/5/2014
OP 要求提供非外壳解决方案:)由于无论如何都发布了此内容,因此我建议使用“apachectl”以获得更大的平台独立性。
1赞 Martin Zeitler 5/24/2014 #10

只需使用如下所示的内容 - 字符串应该已经存在:

<?php
   if(isset($_SERVER['SERVER_SOFTWARE'])){
      echo $_SERVER['SERVER_SOFTWARE'];
   }
?>
-1赞 matinict 8/17/2015 #11

使用这个 PHP 脚本:

 $version = apache_get_version();
    echo "$version\n";

Se apache_get_version.

评论

0赞 PaulH 9/25/2017
apache 函数仅在将 PHP 作为 Apache 模块运行时可用。