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

时间:2008-10-03 12:38:31

标签: apache

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

我已经尝试过HEAD并且没有报告版本号。

如果我尝试丢失页面来获取404,则会截获,并返回一个没有服务器信息的库存页面。我想这表明服务器正在变硬。

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

我按照建议添加了一个PHP文件,但是我无法浏览它并且无法确定加载它的URL路径。在任何情况下,我都会收到大量访问被拒绝的消息和相同的404页面。我知道服务器受到很强的保护,我感到很欣慰。

11 个答案:

答案 0 :(得分:125)

方法

连接主机上的端口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实用程序,例如

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

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

坚持使用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

答案 1 :(得分:43)

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

输出应该是这样的:

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

正如所建议的那样,你也可以apachectl -v来提供相同的输出,但是会有更多种类的Linux支持。

答案 2 :(得分:5)

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

<?php phpinfo(); ?>

在文件中浏览并查找

_SERVER["SERVER_SOFTWARE"]

条目。虽然我认为它不会经常改变,但是这种方法很容易受到同样强化的信息/误导性的影响,因为这种方法首先需要访问机器才能创建PHP文件。

答案 3 :(得分:4)

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

答案 4 :(得分:4)

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

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

答案 5 :(得分:1)

通过端口80 Telnet到主机。

类型:

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

  

找不到对象!

     

在此服务器上找不到请求的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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

只需使用以下内容 - 字符串应该已存在:

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

答案 10 :(得分:-1)

使用此PHP脚本:

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

Se apache_get_version