作者归档:superaj

NIKE running 这些依赖谷歌服务的无法安装解决方案

一、    ROOT(详细各位都已经很熟悉,其实网上也很多,此次不表)

二、    拷贝以下4个文件到指定位置并设置相应的权限

1、      GoogleServicesFramework.apk (用于添加谷歌账户)

拷贝路径:/system/app

2、       NetworkLocation.apk (用于谷歌地图AGPS定位)

拷贝路径:/system/app

3、      com.google.android.maps.jar

拷贝路径:/system/framework/com.google.android.maps.jar

4、      com.google.android.maps.xml

拷贝路径: /system/etc/permissi**/com.google.android.maps.xml

以上4个文件放到相应位置,没有文件夹的,请自己建立、全部文件权限都改为644,就是竖着3趟,左边全选,中间最上面选上,右边全空

完成后,退出,重启 。

点此下载 谷歌服务

易语言 取SEO信息

.版本 2
.支持库 RegEx
.支持库 internet
.支持库 iext
.子程序 _按钮1_被单击
.局部变量 网页文本, 文本型
.局部变量 表达式, 正则表达式
.局部变量 搜索结果, 搜索结果, , "0"
.局部变量 计次变量, 整数型
.局部变量 文本, 文本型
网页文本 = 到文本 (HTTP读文件 (编辑框1.内容))
网页文本 = 子文本替换 (网页文本, #引号, “'”, 0, , 真)
网页文本 = 到小写 (网页文本)
透明标签1.标题 = 取中间文 (网页文本, “<title>”, “</title>”)
表达式.创建 (“meta (.*?)>”, 假)
搜索结果 = 表达式.搜索全部 (网页文本)
.计次循环首 (取数组成员数 (搜索结果), 计次变量)
    文本 = 搜索结果 [计次变量].取子匹配文本 (网页文本, 1, )
    .判断开始 (寻找文本 (文本, “name='keywords'”, 1, 假) > 0)
        透明标签2.标题 = 取中间文 (文本, “content='”, “'”)
    .判断 (寻找文本 (文本, “name='description'”, 1, 假) > 0)
        透明标签3.标题 = 取中间文 (文本, “content='”, “'”)
    .默认
    .判断结束
.计次循环尾 ()
.子程序 取中间文, 文本型
.参数 全文, 文本型
.参数 左文, 文本型
.参数 右文, 文本型
.局部变量 位置, 整数型
.局部变量 总长度, 整数型
.局部变量 文本, 文本型
总长度 = 取文本长度 (全文)
位置 = 寻找文本 (全文, 左文, , 假)
.如果真 (位置 < 0)
    返回 (“”)
.如果真结束
位置 = 位置 + 取文本长度 (左文)
文本 = 取文本中间 (全文, 位置, 总长度)
总长度 = 取文本长度 (文本)
位置 = 寻找文本 (文本, 右文, , 假) - 1
.如果真 (位置 < 0)
    返回 (“”)
.如果真结束
文本 = 取文本中间 (文本, 1, 位置)
返回 (文本)

 

PHP循环数组

//转换数组
function jiexiArr2($array) 
{ 
    static $result_array=array(); 
    foreach($array as $value) 
    { 
        if(is_array($value)) 
        { 
			if(isset($value['url'])){
				$result_array[]=$value; 
			}else{
				jiexiArr2($value); 
			}
        }
    } 
    return $result_array; 
}

 

function array_multi2array($array) 
{ 
    static $result_array=array(); 
    foreach($array as $value) 
    { 
        if(is_array($value)) 
        { 
            array_multi2array($value); 
        } 
        else  
            $result_array[]=$value; 
    } 
    return $result_array; 
}

 

VBS脚本实现自动按键盘的某个键

Set objShell = CreateObject(“Wscript.Shell”)
do
WScript.Sleep 3000
objShell.SendKeys “{F5}”
WScript.Sleep 3000
objShell.SendKeys “{F5}”
loop

使用 SendKeys 方法可以将键击发送到无自动化界面的应用程序中。多数键盘字符都可用一个键击表示。某些键盘字符由多个键击组合而成(例如,CTRL+SHIFT+HOME)。要发送单个键盘字符,请将字符本身作为 string 参数发送。例如,要发送字母 x,则请发送 string 参数 “x”。

可使用 SendKeys 同时发送多个键击。为此,可将每个键击按顺序排列在一起,以此来创建表示一系列键击的复合字符串参数。例如,要发送键击 a、b 和 c,则需要发送字符串参数 “abc” 。SendKeys 方法将某些字符用作字符的修饰符(而不使用其本身的含义)。这组特殊的字符可包括圆括号、中括号、大括号,以及:

加号 “+”
插入记号 “^”
百分号 “%”
和“非”符号 “~”

用大括号 “{}” 括起这些字符可以发送它们。例如,要发送加号,请使用字符串参数 “{+}”。SendKeys中使用的中括号 “[ ]” 无任何特殊含义,但是必须把它们括在大括号中,以便容纳确实要赋予其特殊含义的应用程序(例如,对于动态数据交换 (DDE) 就是这样)。

要发送左中括号字符,请发送字符串参数 “{[}”;要发送右中括号字符,请发送字符串参数 “{]}”。
要发送左大括号字符,请发送字符串参数 “{{}”;要发送右大括号字符,请发送字符串参数 “{}}”。

某些键击不生成字符(如 ENTER 和 TAB)。某些键击表示操作(如 BACKSPACE 和 BREAK)。要发送这些类型的键击,请发送下表中列出的参数:

空格键 ” ”
退格键 {BACKSPACE} 或 {BS} 或 {BKSP}
BREAK {BREAK}
DELETE {DELETE} 或 {DEL}
向下键 {DOWN}
向上键 {UP}
向左键 {LEFT}
向右键 {RIGHT}
END {END}
ENTER {ENTER} 或 ~
ESC {ESC}
TAB {TAB}
CAPS LOCK {CAPSLOCK}
HELP {HELP}
HOME {HOME}
INSERT {INSERT} 或 {INS}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
SCROLL LOCK {SCROLLLOCK}

F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}

要发送由常规键击和 SHIFT、CTRL 或 ALT 组合而成的键盘字符,请创建表示该键击组合的复合字符串参数。可通过在常规键击之前添加一个或多个以下特殊字符来完成上述操作:

SHIFT +
CTRL ^
ALT %

注意:这样使用时,不用大括号括起这些特殊字符。
要指定在按下多个其他键时,按下 SHIFT、CTRL 和 ALT 的组合,请创建复合字符串参数,用括号括起其中的组合键。例如,要发送的组合键指定:

如果在按 e 和 c 的同时按 SHIFT 键,则发送字符串参数 “+(ec)”。
如果在按 e 时只按 c(而不按 SHIFT),则发送字符串参数 “+ec”。
可使用 SendKeys 方法发送一种在一行内重复按键的键击。为此,要创建复合字符串参数,以指定要重复的键击,并在其后指定重复次数。可使用 {键击 数字} 形式的复合字符串参数来完成上述操作。例如,如果要发送 10 次 “x”,则需要发送字符串参数 “{x 10}”。请确保在键击和数字之间有一个空格。

注意:只可以发送重复按一个键的键击。例如,可以发送 10 次 “x”,但不可发送 10 次 “Ctrl+x”。
注意:不能向应用程序发送 PRINT SCREEN 键 {PRTSC}。

例子1:关机脚本 (模拟按键为:Ctrl + Esc、u、u )

把以下代码复制至记事本,另存为 off.vbs

set WshShell = CreateObject(“WScript.Shell”)
WshShell.SendKeys “^{ESC}uu”

例子2:重启脚本 (模拟按键为:Ctrl + Esc、u、r )

把以下代码复制至记事本,另存为 reboot.vbs

set WshShell = CreateObject(“WScript.Shell”)
WshShell.SendKeys “^{ESC}ur”

例子3:切换输入法 (模拟同时按下:Shift Ctrl )

set WshShell = CreateObject(“WScript.Shell”)
WshShell.SendKeys “+(^)”

例子4:输入 cn-dos.net! 至记事本并保存为 CnDos.txt

Dim WshShell
Set WshShell=WScript.CreateObject(“WScript.Shell”)
WshShell.Run “notepad”
WScript.Sleep 1500
WshShell.AppActivate “无标题 – 记事本”
WshShell.SendKeys “c”
WScript.Sleep 200
WshShell.SendKeys “n”
WScript.Sleep 200
WshShell.SendKeys “-”
WScript.Sleep 200
WshShell.SendKeys “d”
WScript.Sleep 200
WshShell.SendKeys “o”
WScript.Sleep 200
WshShell.SendKeys “s”
WScript.Sleep 200
WshShell.SendKeys “.”
WScript.Sleep 200
WshShell.SendKeys “n”
WScript.Sleep 200
WshShell.SendKeys “e”
WScript.Sleep 200
WshShell.SendKeys “t”
WScript.Sleep 200
WshShell.SendKeys “!”
WScript.Sleep 200
WshShell.SendKeys “%FS”
WScript.Sleep 500
WshShell.SendKeys “C”
WScript.Sleep 200
WshShell.SendKeys “n”
WScript.Sleep 200
WshShell.SendKeys “D”
WScript.Sleep 200
WshShell.SendKeys “o”
WScript.Sleep 200
WshShell.SendKeys “s”
WScript.Sleep 200
WshShell.SendKeys “%S”
WScript.Sleep 500
WshShell.SendKeys “%FX”

例子5:自动定时存盘的记事本(此脚本来自网上)

‘第一部分:定义变量和对象
Dim WshShell, AutoSaveTime, TXTFileName
AutoSaveTime=(1000*60*1) ‘自动存盘时间为1分钟
Set WshShell=WScript.CreateObject(“WScript.Shell”)
TXTFileName=InputBox(“给文本起名(不能用中文和纯数字):”)

‘第二部分:打开并激活记事本
WshShell.Run “notepad”
WScript.Sleep 200
WshShell.AppActivate “无标题 – 记事本”

‘第三部分:用输入的文件名存盘
WshShell.SendKeys “^s”
WScript.Sleep 300
WshShell.SendKeys TXTFileName
WScript.Sleep 300
WshShell.SendKeys “%s”
WScript.Sleep AutoSaveTime

‘第四部分:自动定时存盘
While WshShell.AppActivate (TXTFileName)=True
WshShell.SendKeys “^s”
WScript.Sleep AutoSaveTime
Wend
WScript.Quit

例子:

set objShell = CreateObject(“Wscript.Shell”)
strCommandLine = “psetup755281.exe” ‘启动安装程序
objShell.Run(strCommandLine)
set WshShell = CreateObject(“WScript.Shell”)
WScript.Sleep 2000 ‘延时3秒
WshShell.SendKeys “{ENTER}” ‘模拟按下回车键执行下一步
WScript.Sleep 300 ‘延时3秒
WshShell.SendKeys “{ENTER}” ‘模拟按下回车键执行下一步
WScript.Sleep 300 ‘延时3秒
WshShell.SendKeys “{ENTER}” ‘模拟按下回车键执行下一步
WScript.Sleep 5200 ‘延时3秒
WshShell.SendKeys “{ENTER}” ‘模拟按下回车键执行下一步
WScript.Sleep 300 ‘延时3秒
WshShell.SendKeys “{ENTER}” ‘模拟按下回车键执行下一步
WScript.Sleep 300 ‘延时3秒
WshShell.SendKeys “{ENTER}” ‘模拟按下回车键执行下一步
WScript.Sleep 200
WshShell.SendKeys ” ” ‘模拟按下空格键去除安装百度超级搜霸一行前的√号
WScript.Sleep 100
WshShell.SendKeys “{TAB}” ‘模拟按下 Tab 键选择安装项目
WScript.Sleep 200
WshShell.SendKeys ” ” ‘模拟按下空格键去除安装百度超级搜霸一行前的√号
WScript.Sleep 200 ‘延时0.3秒
WshShell.SendKeys “f” ‘模拟按下 F键同意协议

curl使用详解/curl手册

curl 是使用URL语法的传送文件工具,支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL证书、HTTP POST、HTTP PUT 、FTP 上传,kerberos、基于HTT格式的上传、代理、cookie、用户+口令证明、文件传送恢复、http代理通道和大量其他有用的技巧。详见参考手册

阅读全文 ……

PHP使用curl伪造IP地址和header信息

curl虽然功能强大,但是只能伪造$_SERVER[“HTTP_X_FORWARDED_FOR”],对于大多数IP地址检测程序来说,$_SERVER[“REMOTE_ADDR”]很难被伪造:

首先是client.php的代码

$headers['CLIENT-IP'] = '202.103.229.40';  
$headers['X-FORWARDED-FOR'] = '202.103.229.40'; 

$headerArr = array();  
foreach( $headers as $n => $v ) {  
    $headerArr[] = $n .':' . $v;   
}

ob_start();
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://localhost/curl/server.php");
curl_setopt ($ch, CURLOPT_HTTPHEADER , $headerArr );  //构造IP
curl_setopt ($ch, CURLOPT_REFERER, "http://www.163.com/ ");   //构造来路
curl_setopt( $ch, CURLOPT_HEADER, 1);

curl_exec($ch);
curl_close ($ch);
$out = ob_get_contents();
ob_clean();

echo $out;

然后是server.php

function GetIP(){
    if(!emptyempty($_SERVER["HTTP_CLIENT_IP"]))
        $cip = $_SERVER["HTTP_CLIENT_IP"];
    else if(!emptyempty($_SERVER["HTTP_X_FORWARDED_FOR"]))
        $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    else if(!emptyempty($_SERVER["REMOTE_ADDR"]))
        $cip = $_SERVER["REMOTE_ADDR"];
    else
    $cip = "无法获取!";
    return $cip;
}
echo "<br>访问IP: ".GetIP()."<br>";
echo "<br>访问来路: ".$_SERVER["HTTP_REFERER"];

 

php模拟post提交数据

<?php

//以程序登陆一个论坛登录为例
function bbslogin($user_login, $password, $host, $port = "80") {
	//需要提交的post数据
	$argv = array('cookie' => array('user_login' => $user_login, 'password' => $password, '_wp_http_referer' => '/bbpress/', 're' => '', 'remember' => true));
	foreach ($argv['cookie'] as $key => $value) {
		$params[] = $key . '=' . $value;
	}
	$params = implode('&', $params);
	$header = "POST /bbpress/bb-login.php HTTP/1.1\r\n";
	$header .= "Host:$host:$port\r\n";
	$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
	$header .= "Content-Length: " . strlen($params) . "\r\n";
	$header .= "Connection: Close\r\n\r\n";
	$header .= $params;
	$fp = fsockopen($host, $port);
	fputs($fp, $header);
	while (!feof($fp)) {
		$str = fgets($fp);
		//以下是自己的逻辑代码,这里主要是模拟cookie,可用来同步登陆
		if (!(strpos($str, "Set-Cookie:") === false)) {
			$tmparray = explode(" ", $str);
			$cookiearray = explode("=", $tmparray[1]);
			$cookiepaths = explode("=", $tmparray[6]);
			$cookiename = urldecode($cookiearray[0]);
			$cookievalue = urldecode(substr($cookiearray[1], 0, strlen($cookiearray[1]) - 1));
			$cookietime = time() + 3600 * 24 * 7;
			$cookiepath = urldecode(substr($cookiepaths[1], 0, strlen($cookiepaths[1]) - 1));
			setcookie($cookiename, $cookievalue, $cookietime, $cookiepath);
		}
	}
	fclose($fp);
}
?>

 

<?php 
// PHP POST数据的三种方法
// php有三种方法可以post数据,分别为Curl、socket、file_get_contents:

/**
 * Socket版本
 * 使用方法:
 * $post_string = "app=socket&version=beta";
 * request_by_socket('facebook.cn','/restServer.php',$post_string);
 */
function request_by_socket($remote_server, $remote_path, $post_string, $port = 80, $timeout = 30)
{
	$socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout);
	if (!$socket) die("$errstr($errno)");

	fwrite($socket, "POST $remote_path HTTP/1.0\r\n");
	fwrite($socket, "User-Agent: Socket Example\r\n");
	fwrite($socket, "HOST: $remote_server\r\n");
	fwrite($socket, "Content-type: application/x-www-form-urlencoded\r\n");
	fwrite($socket, "Content-length: " . (strlen($post_string) + 8) . '\r\n');
	fwrite($socket, "Accept:*/*\r\n");
	fwrite($socket, "\r\n");
	fwrite($socket, "mypost=$post_string\r\n");
	fwrite($socket, "\r\n");
	$header = "";
	while ($str = trim(fgets($socket, 4096))) {
		$header .= $str;
	} 
	$data = "";
	while (!feof($socket)) {
		$data .= fgets($socket, 4096);
	} 
	return $data;
} 

/**
 * Curl版本
 * 使用方法:
 * $post_string = "app=request&version=beta";
 * request_by_curl('http://facebook.cn/restServer.php',$post_string);
 */
function request_by_curl($remote_server, $post_string)
{
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $remote_server);
	curl_setopt($ch, CURLOPT_POSTFIELDS, 'mypost=' . $post_string);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_USERAGENT, "Jimmy's CURL Example beta");
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
} 

/**
 * 其它版本
 * 使用方法:
 * $post_string = "app=request&version=beta";
 * request_by_other('http://facebook.cn/restServer.php',$post_string);
 */
function request_by_other($remote_server, $post_string)
{
	$context = array(
		'http' => array(
			'method' => 'POST',
			'header' => 'Content-type: application/x-www-form-urlencoded' .
						'\r\n'.'User-Agent : Jimmy\'s POST Example beta' .
						'\r\n'.'Content-length:' . strlen($post_string) + 8,
			'content' => 'mypost=' . $post_string)
		);
	$stream_context = stream_context_create($context);
	$data = file_get_contents($remote_server, false, $stream_context);
	return $data;
} 

?>

 

隐藏nginx apache和php的版本信息不显示

web server避免一些不必要的麻烦,可以把apache和php的版本信息不显示

隐藏 Apache 版本信息

/etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf

ServerTokens ProductOnly
ServerSignature Off

重启 apache
现在 http 头里面只看到:
Server: Apache

=====================

nginx

#vi nginx.conf
在http 加上 server_tokens off;

如下:

http {
……省略配置
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay on;
server_tokens off;
…….省略配置
}

=======================

隐藏 PHP 版本
php.ini

expose_php On
改成
expose_php Off

重启apache后,php版本在http头中隐藏了。

详解 :

为了防止某些别有用心的家伙窥视我们的服务器,应该做些什么.
我们来看一下相关的2个参数,分别为ServerTokens和ServerSignature,通过控制这2个阀门应该就能起到一些作用,比如我们可以在配置文件中这么写:
ServerTokens Prod
ServerSignature Off

ServerTokens
用 于控制服务器是否相应来自客户端的请求,向客户端输出服务器系统类型或内置模块等重要的系统信息。在主配置文件中提供全局控制默认阀值为”Full” (ServerTokens Full),所以,如果你的Linux发行版本没有更改过这个阀值的话,所有与你的系统有关的敏感信息都会向全世界公开。比如RHEL会将该阀值更改 为”ServerTokens OS”,而Debian依然使用默认的”Full”阀值
以apache-2.0.55为例,阀值可以设定为以下某项(后面为相对应的Banner Header):
Prod >>> Server: Apache
Major >>> Server: Apache/2
Minor >>> Server: Apache/2.0
Minimal >>> Server: Apache/2.0.55
OS >>> Server: Apache/2.0.55 (Debian)
Full (or not specified) default >>> Server: Apache/2.0.55 (Debian) PHP/5.1.2-1+b1 mod_ssl/2.0.55 OpenSSL/0.9.8b

ServerSignature
控制由系统生成的页面(错误信息,mod_proxy ftp directory listing等等)的页脚中如何显示信息。

可在全局设置文件中控制,或是通过.htaccess文件控制
默认为”off”(ServerSignature Off),有些Linux发行版本可能会打开这个阀门,比如Debian在默认的虚拟主机上默认将这个阀门设置为开放
全局阀门的阀值会被虚拟主机或目录单位的配置文件中的阀值所覆盖,所以,必须确保这样的事情不应该发生
可用的阀值为下面所示:
Off (default): 不输出任何页脚信息 (如同Apache1.2以及更旧版本,用于迷惑)
On:输出一行关于版本号以及处于运行中的虚拟主机的ServerName (2.0.44之后的版本,由ServerTokens负责是否输出版本号)
EMail: 创建一个发送给ServerAdmin的”mailto”

注意*上述关于如何设置2个阀门从而尽量减少敏感信息泄露的方法,并不会使你的服务器真的更安全,如果你现在使用的版本比较旧,请务必尽快将系统升级,降低被蠕虫攻击的风险。

 

隐藏server信息

cd /usr/local/src/nginx-0.5.35/src/core/
[root@zyatt core]# cat nginx.h
/*
* Copyright (C) Igor Sysoev
*/
#ifndef _NGINX_H_INCLUDED_
#define _NGINX_H_INCLUDED_
#define NGINX_VERSION      “1.0”
#define NGINX_VER          “LPKWS/” NGINX_VERSION
#define NGINX_VAR          “LPKWS”
#define NGX_OLDPID_EXT     “.oldbin”
#endif /* _NGINX_H_INCLUDED_ */
测试效果
C:\curl-7.18.0>curl.exe -I 211.100.11.122/info.php

HTTP/1.1 200 OK
Server: LPKWS/1.0
Date: Tue, 11 Mar 2008 04:53:02 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
X-Powered-By: PHP/5.2.4

 

还有更彻底的编译安装

修改src/core/nginx.h

#define NGINX_VERSION “1.0.5”

#define NGINX_VER “nginx/” NGINX_VERSION

#define NGINX_VAR “NGINX”

 

修改src/http/ngx_http_header_filter_module.c48-49
static char ngx_http_server_string[] = “Server: nginx” CRLF;
static char ngx_http_server_full_string[] = “Server: nginx” CRLF;

 

修改src/http/ngx_http_special_response.c

staticu_char ngx_http_error_tail[]=”<hr><center>nginx</center>”CRLF

“</body>”CRLF

“</html>”CRLF

;

 

嘿嘿,接下来就编译安装吧!不过修改源码后还有1个地方要修改哦,Nginx的FastCGI配置文件fastcgi.conf

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

常用Web Server版本名称:

Microsoft-IIS
GWS或GFE
Apache

Lighttpd

 

 

 

1. Lighttpd 1.4.20
src/response.c:108 改为:
buffer_append_string_len(b, CONST_STR_LEN(“Server: jufukeji”));
输出 Header:
HTTP/1.1 404 Not Found
Content-Type: text/html
Content-Length: 345
Date: Mon, 12 Jan 2009 13:54:02 GMT
Server: jufukeji

2. Nginx 0.7.30
src/http/ngx_http_header_filter_module.c:48-49 改为:
static char ngx_http_server_string[] = “Server: jufukeji” CRLF;
static char ngx_http_server_full_string[] = “Server: jufukeji” CRLF;
输出 Header:
HTTP/1.1 200 OK
Server: jufukeji
Date: Mon, 12 Jan 2009 14:01:10 GMT
Content-Type: text/html
Content-Length: 151
Last-Modified: Mon, 12 Jan 2009 14:00:56 GMT
Connection: keep-alive
Accept-Ranges: bytes

3. Cherokee 0.11.6
cherokee/version.c:93 添加:
ret = cherokee_buffer_add_str (buf, “jufukeji”);
return ret;
输出 Header:
HTTP/1.1 200 OK
Connection: Keep-Alive
Keep-Alive: timeout=15
Date: Mon, 12 Jan 2009 14:54:39 GMT
Server: jufukeji
ETag: 496b54af=703
Last-Modified: Mon, 12 Jan 2009 14:33:19 GMT
Content-Type: text/html
Content-Length: 1795

4. Apache 2.2.11
server/core.c:2784 添加:
ap_add_version_component(pconf, “jufukeji”);
return;
输出 Header:
HTTP/1.1 200 OK
Date: Mon, 12 Jan 2009 14:28:10 GMT
Server: jufukeji
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: “1920edd-2c-3e9564c23b600”
Accept-Ranges: bytes
Content-Length: 44
Content-Type: text/html

5. Squid 3.0 STABLE 11
src/globals.cc:58 改为:
const char *const full_appname_string = “jufukeji”;
输出 Header:
HTTP/1.0 400 Bad Request
Server: jufukeji
Mime-Version: 1.0
Date: Mon, 12 Jan 2009 15:25:15 GMT
Content-Type: text/html
Content-Length: 1553
Expires: Mon, 12 Jan 2009 15:25:15 GMT
X-Squid-Error: ERR_INVALID_URL 0
X-Cache: MISS from ‘cache.hutuworm.org’
Via: 1.0 ‘cache.hutuworm.org’ (jufukeji)
Proxy-Connection: close

6. Tomcat 6.0.18
java/org/apache/coyote/http11/Constants.java:56 和 java/org/apache/coyote/ajp/Constants.java:236 均改为:
ByteChunk.convertToBytes(“Server: jufukeji” + CRLF);
输出 Header:
HTTP/1.1 200 OK
Server: jufukeji
ETag: W/”7857-1216684872000″
Last-Modified: Tue, 22 Jul 2008 00:01:12 GMT
Content-Type: text/html
Content-Length: 7857
Date: Mon, 12 Jan 2009 16:30:44 GMT

7. JBoss 5.0.0 GA
a. tomcat/src/resources/web.xml:40 改为
jufukeji
b. 下载 JBoss Web Server 2.1.1.GA srctar (http://www.jboss.org/jbossweb/downloads/jboss-web/)
java/org/apache/coyote/http11/Constants.java:56 和 java/org/apache/coyote/ajp/Constants.java:236 均改为:
ByteChunk.convertToBytes(“Server: jufukeji” + CRLF);
将编译所得 jbossweb.jar 覆盖 JBoss 编译输出文件:
JBOSS_SRC/build/output/jboss-5.0.0.GA/server/all/deploy/jbossweb.sar/jbossweb.jar
JBOSS_SRC/build/output/jboss-5.0.0.GA/server/standard/deploy/jbossweb.sar/jbossweb.jar
JBOSS_SRC/build/output/jboss-5.0.0.GA/server/default/deploy/jbossweb.sar/jbossweb.jar
JBOSS_SRC/build/output/jboss-5.0.0.GA/server/web/deploy/jbossweb.sar/jbossweb.jar
输出 Header:
HTTP/1.1 200 OK
Server: jufukeji
X-Powered-By: jufukeji
Accept-Ranges: bytes
ETag: W/”1581-1231842222000″
Last-Modified: Tue, 13 Jan 2009 10:23:42 GMT
Content-Type: text/html
Content-Length: 1581
Date: Tue, 13 Jan 2009 10:30:42 GM

修改nginx server 版本显示信息

修改nginx server 版本显示信息:
将源码包中/nginx-1.0.9/src/http/ngx_http_header_filter_module.c 文件下面2行
48 static char ngx_http_server_string[] = “Server: nginx” CRLF;
49 static char ngx_http_server_full_string[] = “Server: ” NGINX_VER CRLF;
修改为自己想要的
如:
48 static char ngx_http_server_string[] = “Server: Ayhtpd 2.0 ” CRLF;
49 static char ngx_http_server_full_string[] = “Server: Ayhttpd 2.0 ” NGINX_VER CRLF;

2 >vi nginx/src/core/nginx.h
找到如下几行并按照自己的意愿修改,如:
#define nginx_version         0110
#define NGINX_VERSION      “0.1.10”
#define NGINX_VER          “xws/” NGINX_VERSION

#define NGINX_VAR          “XWS”
3> 重新编译安装:

另外一种相对简单的方式是直接修改nginx配置文件隐藏版本号信息
在http段中全局配置加上
server_tokens  off;