我如何找到无需访问命令行即可运行的Apache版本?


74

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

我尝试了HEAD,但没有得到版本号报告。

如果我尝试缺少页面以获取404,则会被拦截,并返回没有服务器信息的股票页面。我想这表明服务器已经过强化。

还没有近...

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


您可以在服务器上的脚本中运行Shell命令吗?
workmad3,

好问题,不知道。我去吧
西蒙

您可以从phpshell.sourceforge.net安装PHPShell,这可让您戳一戳
Paul Dixon

Answers:


129

方法

连接到主机上的端口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版本。

您可以使用的典型工具

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

HEAD http://your.webserver.com/

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

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

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

卡在Windows上吗?

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

telnet your.webserver.com 80

然后输入(注意,您的字符不会被回显)

HEAD / HTTP/1.0

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

其他方法

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

<?php phpinfo() ?>

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

您也可以尝试使用PHPShell进行戳戳,尝试使用类似的命令

/usr/sbin/apache2 -V

7
很近。但是服务器只说“ Apache”,根本没有版本详细信息
Simon

就像我写的一样。:)在某些情况下仅Apache。
Veynom

7
此外,在Windows 7上使用命令提示符时,需要注意的是必须启用telnet:“开始”>“控制面板”>“程序和功能”>“打开或关闭Windows功能”>确保选中“ Telnet Client”>单击“确定”
gmeben

在中Stuck with Windows?,我尝试发送,HEAD但显示HTTP/1.1 503 Service Temporarily Unavailable
emeraldhieu

它只是说服务器:Apache
AturSams 2014年

43

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

输出应该是这样的:

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

如建议的那样,您也可以这样做apachectl -v,将为您提供相同的输出,但将得到更多Linux风格的支持。


15
在Ubuntu上,二进制叫apache2,不httpd
剑锋Troelsen

1
+1-phpinfo()和curl没有为我使用的共享主机提供足够的信息。做到了。
jontyc

1
OP要求非外壳解决方案:)不管怎么说,我建议使用'apachectl'以获得更大的平台独立性。
Konzulic 2014年

5

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

<?php phpinfo(); ?>

在文件中浏览并找到

_SERVER["SERVER_SOFTWARE"]

条目。尽管我可以想象它不会经常更改,但是这同样容易引起信息的缺乏/误导,因为这种方法首先需要访问计算机才能创建PHP文件。


我加固的服务器还为$ _SERVER [“ SERVER_SOFTWARE”]设置了“ Apache”
PaulH,2017年

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(); ?>

1
phpinfo()也不总是显示Apache版本,至少在使用CGI / FastCGI时不会。
西蒙·伊斯特

4

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

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


1

Telnet到主机的端口80。

类型:

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

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




0

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

找不到对象!

在此服务器上找不到请求的URL。如果您手动输入网址,请检查拼写,然后重试。
如果您认为这是服务器错误,请与网站管理员联系。
错误404
本地主机
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


0

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

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

-1

使用以下PHP脚本:

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

Se apache_get_version


仅当将PHP作为Apache模块运行时,apache函数才可用。
PaulH
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.