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

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

我已经尝试了 HEAD,没有得到一个版本号报告。

如果我尝试一个丢失的页面得到一个404它被拦截,并返回一个股票页面没有服务器信息。我猜这说明服务器硬化了。

还是没有进展。

我按照建议放置了一个 PHP 文件,但是我无法浏览到它,也无法找到加载它的 URL 路径。无论如何,我得到了大量的访问拒绝消息和相同的股票404页面。得知服务器得到了相当强大的保护,我感到一些安慰。

265287 次浏览

方法

连接到主机上的端口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: header 中提取 Apache 版本

您可以使用的典型工具

您可以使用完整安装 Perl 的 LWP库后附带的 HEAD 实用程序,例如。

HEAD http://your.webserver.com/

或者,使用 卷发实用程序,例如。

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

您还可以使用浏览器扩展来查看服务器头部,比如 Firefox 的 实时 HTTP 头纵火犯,IE 的 小提琴手

被 Windows 困住了?

终于来了。如果你在 Windows 系统上,没有其他任何东西可以使用,打开一个命令提示符(开始菜单-> 运行,键入“ cmd”并按回车键) ,然后键入这个

telnet your.webserver.com 80

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

HEAD / HTTP/1.0

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

其他方法

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

<?php phpinfo() ?>

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

您还可以尝试使用 PHPShell进行调试,如下命令

/usr/sbin/apache2 -V

Telnet 到80端口的主机。

类型:

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

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

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

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

找不到目标!

在此服务器上找不到请求的 URL。如果您手动输入 URL,请 检查你的拼写,然后再试一次。
如果您认为这是一个服务器错误,请与网站管理员联系。
错误404
本地主机
10/03/0814:41:45
Apache/2.2.8(Win32) DAV/2 mod _ ssl/2.2.8 OpenSSL/0.9.8 g mod _ autoindex _ color PHP/5.2.5 < br/>

经过加固的 HTTP 服务器很少被配置为不提供服务器信息或误导服务器信息。在这些场景中,如果服务器启用了 PHP,您可以添加:

<?php phpinfo(); ?>

在文件中,并浏览到它,然后查找

_SERVER["SERVER_SOFTWARE"]

进入。虽然我认为这种方法不会经常改变,但是它同样容易受到缺乏信息/误导的影响,因为这种方法首先需要访问机器来创建 PHP 文件。

警告,一些 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(); ?>

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

我相信还有一个设置可以控制版本是否出现在服务器错误页面中,尽管我不记得我的头脑中是怎么想的了。如果您没有直接访问服务器的权限,而服务器管理员有能力并且不希望您知道他们正在运行的版本... ... 我认为您可能是 SOL

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

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

输出应该是这样的:

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

正如已经建议的那样,您也可以使用 apachectl -v,它将提供相同的输出,但是将支持更多的 Linux 风格。

简单地使用下面这样的东西-字符串应该已经在那里了:

<?php
if(isset($_SERVER['SERVER_SOFTWARE'])){
echo $_SERVER['SERVER_SOFTWARE'];
}
?>

使用这个 PHP 脚本:

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

(西班牙语)。