提问人:Simon 提问时间:10/3/2008 最后编辑:Peter MortensenSimon 更新时间:8/10/2023 访问量:274579
如何在不访问命令行的情况下找到运行的 Apache 版本?
How do I find the version of Apache running without access to the command line?
问:
我需要找到一个对版本进行编码的文件,或者找到一种在网络上轮询它的方法,以便它显示其版本。服务器在主机上运行,该主机不会为我提供命令行访问,尽管我可以通过FTP浏览安装位置。
我尝试过 HEAD,但没有报告版本号。
如果我尝试一个缺失的页面来获取 404,它就会被拦截,并返回一个没有服务器信息的库存页面。我想这表明服务器正在加固。
仍然没有更接近......
我按照建议放置了一个PHP文件,但是我无法浏览到它,也无法完全确定将加载它的URL路径。无论如何,我收到了大量拒绝访问的消息和相同的股票 404 页面。我知道服务器受到非常强大的保护,这让我感到有些安慰。
答:
方法
连接到主机上的端口 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 Headers 或 Firebug 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
评论
Stuck with Windows?
HEAD
HTTP/1.1 503 Service Temporarily Unavailable
通过端口 80 Telnet 到主机。
类型:
get / http1.1
::enter::
::enter::
它是一种 HTTP 请求,但它是无效的,因此它给你的 500 错误可能会给你你想要的信息。末尾的空行很重要,否则它看起来只是挂起。
如果他们启用了错误页面,您可以转到不存在的页面并查看 404 页面的底部。
评论
在默认安装中,调用一个不存在的页面,最后会出现版本错误:
未找到对象!
在此服务器上找不到请求的 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
在极少数情况下,强化的 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(); ?>
评论
phpinfo()
也并不总是显示 Apache 版本,至少在使用 CGI/FastCGI 时不会。
Apache 服务器给出的版本信息级别可以通过其配置中的 ServerTokens 设置进行配置。
我相信还有一个设置可以控制版本是否出现在服务器错误页面中,尽管我不记得它是什么。如果您无法直接访问服务器,并且服务器管理员很称职,并且不希望您知道他们正在运行的版本...我想你可能是 SOL。
您最好的选择是通过 PHP: 来自客户端的所有版本请求都不可信,因为您的 Apache 可以配置 ServerTokens Prod 和 ServerSignature Off。请参见: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
正如已经建议的那样,你也可以这样做,这将给你相同的输出,但会得到更多风格的Linux的支持。apachectl -v
评论
apache2
httpd
只需使用如下所示的内容 - 字符串应该已经存在:
<?php
if(isset($_SERVER['SERVER_SOFTWARE'])){
echo $_SERVER['SERVER_SOFTWARE'];
}
?>
使用这个 PHP 脚本:
$version = apache_get_version();
echo "$version\n";
评论