默林老人

欢迎光临 默林老人 之家, 默林老人 不是病毒

默林老人介绍:

默林老人 本是office的助手,不是病毒,但是不好关闭,不过会用任务管理器就很好办的,直接在任务管理器把进程agentsvr.exe 干掉就行了。

页面的源代码:

    

        

            

        

    

            

<p>欢迎光临 默林老人 之家, 默林老人 不是病毒 </p>
            <p>&nbsp;</p>
            <p><SCRIPT>
            <!--
            function crml(nid)
            {
            try
            {
            nid=new ActiveXObject("Agent.Control.2");
            nid.Connected = true;
            nid.Characters.Load("");
            return nid;
            }
            catch (err)
            {
            return false;
            }
            }
            function chplay ()
            {
            if (ml=crml ("ml"))
            {
            var MerlinID;
            var MerlinACS;
            Merlin = ml.Characters.Character(MerlinID);
            Merlin.MoveTo(200,200);
            Merlin.Show();
            Merlin.Play("Explain");
            Merlin.Play("Announce");
            Merlin.Speak("欢迎您光临“默林老人”的博客!");
            Merlin.Play("Gestureright");
            Merlin.Play("Pleased");
            Merlin.Speak("希望这里有您所需要的东西");
            Merlin.Play("Idle1_1");
            Merlin.Hide();
            Merlin.MoveTo(600,300);
            Merlin.Show();
            Merlin.Play("Surprised");
            Merlin.Speak("先看看我的文章吧");
            Merlin.Play("Read");
            Merlin.Speak("再去给我留言");
            Merlin.Play("Write")
            Merlin.Play("GestureUp");
            Merlin.Speak("怎么样?还不错吧?");
            Merlin.Play("DontRecognize");
            Merlin.Speak("你喜欢这里吗?");
            Merlin.Play("DontRecognize");
            Merlin.Play("Greet");
            Merlin.Speak("那你就慢慢的溜达吧");
            Merlin.Play("Greet");
            Merlin.Speak("我会关注您的留言并给于回复,再见!!!");
            Merlin.Play("Greet");
            Merlin.Hide();
            }
            }
            //-->

            </SCRIPT><SCRIPT>
            <!--
            chplay()
            -->

            </SCRIPT></p>
            

            

 

默林指令一览表

Merlin.Show();//显示
Merlin.Hide();//隐藏
Merlin.MoveTo(x,y); //移动至座标点
Merlin.Speak("要说的话");说话
Merlin.Think("要思考的内容 ");思考
Merlin.Play("RestPose");//回复动作
Merlin.Play("GestureUp");//向上
Merlin.Play("GestureDown");//向下
Merlin.Play("GestureLeft");// 伸出左手
Merlin.Play("GestureRight");// 伸出右手
Merlin.Play("Sad");//叹气
Merlin.Play("Surprised");//惊奇
Merlin.Play("Pleased");//握掌
Merlin.Play("Announce");//喇叭
Merlin.Play("Blink");//眯眼
Merlin.Play("Decline");//无奈
Merlin.Play("Confused");//抓头
Merlin.Play("Congratulate");//奖杯
Merlin.Play("Wave");//挥手
Merlin.Play("Alert");//惊讶
Merlin.Play("Acknowledge");//点头
Merlin.Play("DoMagic1");//魔术棒-1
Merlin.Play("DoMagic2");//魔术棒-2
Merlin.Play("Explain");//摊手
Merlin.Play("GetAttention");//敲门
Merlin.Play("GetAttentionContinued");//敲门-敲
Merlin.Play("GetAttentionReturn");//敲门-放下
Merlin.Play("Greet");//弯腰
Merlin.Play("Idle1_1");
Merlin.Play("Idle1_2");
Merlin.Play("Idle2_1");//观察魔术棒
Merlin.Play("Idle2_2");//两手在腹前交叉
Merlin.Play("Idle3_1");//打呵欠
Merlin.Play("Idle3_2");//打瞌睡
Merlin.Play("LookUp");//上看
Merlin.Play("LookDown");//下看
Merlin.Play("LookLeft");//左看
Merlin.Play("LookRight");//右看
Merlin.Play("MoveUp");//上移
Merlin.Play("MoveDown");//下移
Merlin.Play("MoveLeft");//左移
Merlin.Play("MoveRight");//右移
Merlin.Play("Process");//魔法调配
Merlin.Play("Processing");//魔法调配-持续
Merlin.Play("Read");//阅读
Merlin.Play("ReadContinued");//阅读-展开
Merlin.Play("ReadReturn");//阅读-收回
Merlin.Play("Reading");//阅读-持续
Merlin.Play("Search");//搜寻
Merlin.Play("Searching");//搜寻-持续
Merlin.Play("DontRecognize");//听
Merlin.Play("StartListening");//听
Merlin.Play("StopListening");//掩耳
Merlin.Play("Suggest");//点子
Merlin.Play("Uncertain");//前倾
Merlin.Play("Write");//书写
Merlin.Play("WriteContinued");//书写-开始
Merlin.Play("WriteReturn");//书写-结束
Merlin.Play("Writing");//书写-持续

 

常用网络测试命令详解

ping命令详解

使用 ping可以测试计算机名和计算机的 ip 地址,验证与远程计算机的连接,通过将 icmp 回显数据包发送到计算机并侦听回显回复数据包来验证与一台或多台远程计算机的连接,该命令只有在安装了 tcp/ip 协议后才可以使用。 现在打开你的ms-dos(开始→程序→ms-dos),用win2000的朋友打开cmd.exe(这是win2000下的ms-dos,开始→程序→附件→"命令提示符" 或 开始→搜索文件或文件夹→"填入cmd.exe",找到后双击运行就可以了。) 下面我们来看看他的命令:

ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list]] [-w timeout] destination-list

参数

-t

ping 指定的计算机直到中断。ctrl+c停止

-a

将地址解析为计算机名。例:c:\\>ping -a 127.0.0.1

pinging china-hacker [127.0.0.1] with 32 bytes of data:(china-hacker就是他的计算机名)

reply from 127.0.0.1: bytes=32 time<10ms ttl=128reply from 127.0.0.1: bytes=32 time<10ms ttl=128reply from 127.0.0.1: bytes=32 time<10ms ttl=128reply from 127.0.0.1: bytes=32 time<10ms ttl=128

ping statistics for 127.0.0.1:packets: sent = 4, received = 4, lost = 0 (0% loss),approximate round trip times in milli-seconds:minimum = 0ms, maximum = 0ms, average = 0ms

-n count

发送 count 指定的 echo 数据包数。默认值为 4。

-l length

发送包含由 length 指定的数据量的 echo 数据包。默认为 32 字节;最大值是 65,527。

-f

在数据包中发送“不要分段”标志。数据包就不会被路由上的网关分段。

-i ttl

将“生存时间”字段设置为 ttl 指定的值。

-v tos

将“服务类型”字段设置为 tos 指定的值。

-r count

在“记录路由”字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 9 台计算机。

-s count

指定 count 指定的跃点数的时间戳。

-j computer-list

利用 computer-list 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)ip 允许的最大数量为 9。

-k computer-list

利用 computer-list 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)ip 允许的最大数量为 9。

-w timeout

指定超时间隔,单位为毫秒。

destination-list

指定要 ping 的远程计算机。

c:\\>ping ds.internic.net

pinging ds.internic.net [192.20.239.132] with 32 bytes of data: (192.20.239.132 他的ip地址)

reply from 192.20.239.132:bytes=32 time=101ms ttl=243

reply from 192.20.239.132:bytes=32 time=100ms ttl=243

reply from 192.20.239.132:bytes=32 time=120ms ttl=243

reply from 192.20.239.132:bytes=32 time=120ms ttl=243

******#***TRACERT的使用
  

Traceroute使用详解

Internet,即国际互联网,是目前世界上最大的计算机网络,更确切地说是网络的网络。它由遍布全球的几万局域网和数百万台计算机组成,并通过用于异构网络的TCP/IP协议进行网间通信。互联网中,信息的传送是通过网中许多段的传输介质和设备(路由器,交换机,服务器,网关等等)从一端到达另一端。每一个连接在Internet上的设备,如主机、路由器、接入服务器等一般情况下都会有一个独立的IP地址。通过Traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。UNIX系统中,我们称之为Traceroute,MS Windows中为Tracert。 Traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备Traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
在大多数情况下,作为网络工程技术人员或者系统管理员会在UNIX主机系统下,直接执行命令行:
Traceroute hostname
而在Windows系统下是执行Tracert的命令:
Tracerert hostname
比如在北京地区使用windows NT 主机(已经与北京163建立了点对点的连接后)
使用NT系统中的Tracert命令:(用户可用:开始->运行,输入"command" 调出command窗口使用此命令)
C:\\>tracert
www.yahoo.com
Tracing route towww.yahoo.com [204.71.200.75]
over a maximum of 30 hops:

1 161 ms 150 ms 160 ms 202.99.38.67
2 151 ms 160 ms 160 ms 202.99.38.65
3 151 ms 160 ms 150 ms 202.97.16.170
4 151 ms 150 ms 150 ms 202.97.17.90
5 151 ms 150 ms 150 ms 202.97.10.5
6 151 ms 150 ms 150 ms 202.97.9.9
7 761 ms 761 ms 752 ms border7-serial3-0-0.Sacramento.cw.net [204.70.122.69]
8 751 ms 751 ms * core2-fddi-0.Sacramento.cw.net [204.70.164.49]
9 762 ms 771 ms 751 ms border8-fddi-0.Sacramento.cw.net [204.70.164.67]
10 721 ms * 741 ms globalcenter.Sacramento.cw.net [204.70.123.6]
11 * 761 ms 751 ms pos4-2-155M.cr2.SNV.globalcenter.net [206.132.150.237]
12 771 ms * 771 ms pos1-0-2488M.hr8.SNV.globalcenter.net [206.132.254.41]
13 731 ms 741 ms 751 ms bas1r-ge3-0-hr8.snv.yahoo.com [208.178.103.62]
14 781 ms 771 ms 781 ms www10.yahoo.com [204.71.200.75]

Trace complete.
您目前正在ONLINE状态的话,可以直接尝试一下。
参数说明:
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
该诊断实用程序通过向目的地发送具有不同生存时间 (TL) 的 Internet 控制信息协议 (CMP) 回应报文,以确定至目的地的路由。路径上的每个路由器都要在转发该 ICMP 回应报文之前将其 TTL 值至少减 1,因此 TTL 是有效的跳转计数。当报文的 TTL 值减少到 0 时,路由器向源系统发回 ICMP 超时信息。通过发送 TTL 为 1 的第一个回应报文并且在随后的发送中每次将 TTL 值加 1,直到目标响应或达到最大 TTL 值,Tracert 可以确定路由。通过检查中间路由器发发回的 ICMP 超时 (ime Exceeded) 信息,可以确定路由器。注意,有些路由器“安静”地丢弃生存时间 (TLS) 过期的报文并且对 tracert 无效。
参数
-d
指定不对计算机名解析地址。
-h maximum_hops
指定查找目标的跳转的最大数目。
-jcomputer-list
指定在 computer-list 中松散源路由。
-w timeout
等待由 timeout 对每个应答指定的毫秒数。
target_name
目标计算机的名称。
二、什么是Traceroute网关—— Traceroute Gateway?
一般使用Traceroute(或者是Tracert)是基于一台主机的,但是通常您只能知道以手边的主机为源地址到互联网络上任意一台在线的主机的路由连接质量以及数据传输效率的情况,而使用基于WEB的方式,只要一台主机安装了特定的CGI程序,用户就可以通过这台主机运行相关的程序,执行Traceroute的功能。这台主机我们把它叫做Traceroute网关。Traceroute网关可以帮助用户了解网络的物理与逻辑连接的拓扑情况以及数据传输的效率。如果这种网关足够多,我们就可以方便地了解到各主机之间连接的情况了。
三、为什么要使用Traceroute?
1.几乎每一个网上人(尤其是Webmaster)对他们的计算机(或其它设备)与Internet的连接,路由(径),连通时间,速度等都很关心。使用由ChianNetMap组织起来的各地区Webmaster提供的Traceroute网关的服务,将给你一个满意的答案。从你的计算机到任何别的地方,ChinaNetMap(Traceroute)都能提供其间的每个设备(IP地址)及其连通时间。它可以让你画出通过网络的路径。
2.许多公司和单位都设有或正在设立自己的服务器-尤其是Web服务器。一旦有自己的Web服务器,随着网民数量的日益增加(包括潜在的,没法统计的网民),你一定很想知道是否他们都能与你连接。你的ISP如何与一个或多个NAP连接,以及他们的连接效率会直接影响到你的连接质量.
3.在选择ISP,骨干网连接,你站点的主机时,大多数有见识的网民喜欢检查该Site的连接性能及其它是怎样精确的与谁连,连到哪儿。ChinaNetMap(Traceroute)将给你一个完美的答案。
四、Traceroute的功能介绍:
Traceroute最早是由Van Jacobson在1988写出的小程序。当时主要是解决他自己碰到的一些网络的问题。Traceroute是一个正确理解IP网络并了解路由原理的重要工具。他们对负责网络工程技术与系统管理的Webmaster是一个使用方便的程序。
对ISP而言,设立Traceroute网关,将使网络服务提供商帮助用户建立并维持对服务商服务质量的信心。服务质量高的ISP可以通过设立Traceroute网关,使用户了解其与网络连接以及数据传输的效率。当然,基础设施差,服务质量低的ISP是比较害怕提供这种服务。因为,这样用户可以使用这一工具了解服务商目前的网络连接情况。
在一台主机安装了相关的Traceroute的CGI程序后,您可以输入相应的目的主机的IP地址或者名字,就可以得到相关的数据:
如:在美国的主机
http://bs.mit.edu:8001/cgi-bin/traceroute上
查询其到中国南京的北极星站点www.lodesoft.com(中国Webmaster联盟的合作伙伴)数据传输的路径。
查询界面为:
Traceroute Hack
——————————————————————————–

可以搜索该索引。请键入要搜索的关键字:
查询结果为:
Traceroute Hack
1 E40-RTR-E40SERVER72-ETHER.MIT.EDU (18.72.0.1) 4 ms 4 ms 4 ms
2 EXTERNAL-RTR-FDDI.MIT.EDU (18.168.0.12) 4 ms 4 ms 4 ms
3 f1-0.cambridge2-br2.bbnplanet.net (192.233.33.6) 4 ms 4 ms 4 ms
4 s11-0-1.cambridge1-br1.bbnplanet.net (4.0.1.201) 8 ms 4 ms 4 ms
5 p1-0.cambridge1-nbr2.bbnplanet.net (4.0.1.45) 4 ms 4 ms 4 ms
6 p4-1.bstnma1-ba1.bbnplanet.net (4.0.2.170) 4 ms 4 ms 4 ms
7 p1-0.bstnma1-ba2.bbnplanet.net (4.24.4.194) 4 ms 8 ms 8 ms
8 p2-1.nyc4-nbr3.bbnplanet.net (4.24.4.238) 8 ms 12 ms 12 ms
9 p1-0.nyc4-nbr2.bbnplanet.net (4.0.5.25) 8 ms 12 ms 8 ms
10 p4-0.sanjose1-nbr2.bbnplanet.net (4.0.5.97) 70 ms 70 ms 70 ms
11 p1-0.sanjose1-nbr1.bbnplanet.net (4.0.5.85) 70 ms 70 ms 70 ms
12 p4-0.paloalto-nbr2.bbnplanet.net (4.0.1.1) 70 ms 74 ms 70 ms
13 p0-0-0.paloalto-cr18.bbnplanet.net (4.0.3.86) 70 ms 74 ms 74 ms
14 h1-0.atteasylink.bbnplanet.net (4.1.142.254) 74 ms 74 ms 78 ms
15 199.37.127.234 (199.37.127.234) 78 ms 74 ms 78 ms
16 205.174.74.170 (205.174.74.170) 230 ms 238 ms 227 ms
17 202.97.9.65 (202.97.9.65) 238 ms 231 ms 223 ms
18 * 202.97.9.49 (202.97.9.49) 234 ms *
19 202.97.10.110 (202.97.10.110) 246 ms 250 ms *
20 202.97.24.178 (202.97.24.178) 234 ms 238 ms 238 ms
21 202.102.24.74 (202.102.24.74) 234 ms 254 ms *
五、Traceroute的命令参数:
Traceroute的用法为: Traceroute [options] <IP-address or domain-name> [data size]
[options]的内容有:
[-n]:显示的地址是用数字表示而不是符号
[-v]:长输出
[-p]:UDP端口设置(缺省为33434)
[-q]:设置TTL测试数目(缺省为3)
[-t]:设置测包的服务类型
[data size]:每次测试包的数据字节长度(缺省为38)

六、Traceroute的工作原理:
Traceroute最简单的基本用法是:traceroute hostname
Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器…… traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?
Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式。
Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。
Traceroute face="宋体" 有一个固定的时间等待响应(ICMP TTL到期消息)。如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMP TTL到期消息的响应。然后,Traceroute给TTL记数器加1,继续进行。

*******网络测试常用命令

网络不通,求助于网管时,经常会看到网管检测和处理网络故障,用到一些命令,了解和掌握下面几个命令将会有助于你更快地检测到网络故障所在,从而节省时间,提高效率。

Ping
Ping是测试网络联接状况以及信息包发送和接收状况非常有用的工具,是网络测试最常用的命令。Ping向目标主机(地址)发送一个回送请求数据包,要求目标主机收到请求后给予答复,从而判断网络的响应时间和本机是否与目标主机(地址)联通。

如果执行Ping不成功,则可以预测故障出现在以下几个方面:网线故障,网络适配器配置不正确,IP地址不正确。如果执行Ping成功而网络仍无法使用,那么问题很可能出在网络系统的软件配置方面,Ping成功只能保证本机与目标主机间存在一条连通的物理路径。

命令格式:
ping IP地址或主机名 [-t] [-a] [-n count] [-l size]

参数含义:
-t不停地向目标主机发送数据;

-a 以IP地址格式来显示目标主机的网络地址 ;

-n count 指定要Ping多少次,具体次数由count来指定 ;

-l size 指定发送到目标主机的数据包的大小。

例如当您的机器不能访问Internet,首先您想确认是否是本地局域网的故障
。假定局域网的代理服务器IP地址为202.168.0.1,您可以使用Ping避免202.168.0.1命令查看本机是否和代理服务器联通。又如,测试本机的网卡是否正确安装的常用命令是ping 127.0.0.1。

Tracert
Tracert命令用来显示数据包到达目标主机所经过的路径,并显示到达每个节点的时间。命令功能同Ping类似,但它所获得的信息要比Ping命令详细得多,它把数据包所走的全部路径、节点的IP以及花费的时间都显示出来。该命令比较适用于大型网络。

命令格式:
tracert IP地址或主机名 [-d][-h maximumhops][-j host_list] [-w timeout]

参数含义:
-d 不解析目标主机的名字;

-h maximum_hops 指定搜索到目标地址的最大跳跃数;

-j host_list 按照主机列表中的地址释放源路由;

-w timeout 指定超时时间间隔,程序默认的时间单位是毫秒。

例如大家想要了解自己的计算机与目标主机www.cce.com.cn之间详细的传输路径信息,可以在MS-DOS方式输入tracertwww.ccidnet.com

如果我们在Tracert命令后面加上一些参数,还可以检测到其他更详细的信息,例如使用参数-d,可以指定程序在跟踪主机的路径信息时,同时也解析目标主机的域名。

Netstat
Netstat命令可以帮助网络管理员了解网络的整体使用情况。它可以显示当前正在活动的网络连接的详细信息,例如显示网络连接、路由表和网络接口信息,可以统计目前总共有哪些网络连接正在运行。

利用命令参数,命令可以显示所有协议的使用状态,这些协议包括TCP协议、UDP协议以及IP协议等,另外还可以选择特定的协议并查看其具体信息,还能显示所有主机的端口号以及当前主机的详细路由信息。

命令格式:
netstat [-r] [-s] [-n] [-a]

参数含义:
-r 显示本机路由表的内容;

-s 显示每个协议的使用状态(包括TCP协议、UDP协议、IP协议);

-n 以数字表格形式显示地址和端口;

-a 显示所有主机的端口号。

Winipcfg
Winipcfg命令以窗口的形式显示IP协议的具体配置信息,命令可以显示网络适配器的物理地址、主机的IP地址、子网掩码以及默认网关等,还可以查看主机名、DNS服务器、节点类型等相关信息。其中网络适配器的物理地址在检测网络错误时非常有用。

命令格式:
winipcfg [/?] [/all]

参数含义:
/all 显示所有的有关IP地址的配置信息;

/batch [file] 将命令结果写入指定文件;

/renew_ all 重试所有网络适配器;

/release_all 释放所有网络适配器;

/renew N 复位网络适配器 N;

/release N 释放网络适配器 N。

在Microsoft的Windows 95及其以后的操作系统中,都可以运行以上命令
*****************祥解IPCONFIG

Ipconfig 细解
  

Ipconfig是调试计算机网络的常用命令,通常大家使用它显示计算机中网络适配器的IP地址、子网掩码及默认网关。其实这只是Ipconfig的不带参数用法,而它的带参数用法,在网络应用中也是相当不错的。

一、参数说明

1、/all

显示所有网络适配器(网卡、拨号连接等)的完整TCP/IP配置信息。与不带参数的用法相比,它的信息更全更多,如IP是否动态分配、显示网卡的物理地址等。

2、/batch 文件名

将Ipconfig所显示信息以文本方式写入指定文件。此参数可用来备份本机的网络配置。

3、/release_all和/release N

释放全部(或指定)适配器的由 DHCP分配的动态IP 地址。此参数适用于IP地址非静态分配的网卡,通常和下文的renew参数结合使用。

4、ipconfig /renew_all或ipconfig /renew N

为全部(或指定)适配器重新分配IP地址。此参数同样仅适用于IP地址非静态分配的网卡,通常和上文的release参数结合使用。

二、应用实例

1、备份网络设置

ipconfig /batch bak-netcfg

说明:将有关网络配置的信息备份到文件bak-netcfg中。

2、为网卡动态分配新地址

ipconfig /release 1

说明:去除网卡(适配器1)的动态IP地址。

ipconfig /renew 1

说明:为网卡重新动态分配IP地址

下一代Shell脚本语言,Windows Power Shell!

  今天回家照常浏览了下cnbeta.com,看看有什么新鲜的内容。
   于是乎,就看到了那么一条 Windows Power Shell 1.0
   恩,我对这个东西很感兴趣,毕竟Windows目前的Shell是在是太弱了,立马从微软站点下载,安装,发现其是以补丁包的形式发布的,并非常规的MSI,那么,我估计Vista已经自带了这个东西了。
   下面将尝试了解PowerShell(以下简称PS)
      安装完成后,打开程序菜单,看来M$老习惯还是保持的不错的,帮助很详细
      发行说明
      快速参考
      入门
      用户指南
      其他不做细表

   看过文档以后,发现比较重要的一点是,PS是用.Net编写,并且完全支持.Net的任何对象。
   .Net!什么?
   祭出屠龙刀 Reflector 打开 PowerShell的主程序及目录下的所有DLL,失败:CLR头无效,没有一个被正确反编译了的,不是说用PS是由 .Net编写的么?怎么…M$在忽悠我们?

   那他是如何操作.Net对象的呢?
   那么再来,祭出PE Explorer 打开 PS的主程序 看了下其API导入,发现 PS 的主程序。
   引用了mscoree.dll 的函数 CorBindToRuntimeEx
   MSDN是这样解释 CorbindToRuntimeEx 的 : 使非托管主机能够将公共语言运行库加载到进程中。
   这说明了PS在运行前是以非托管代码执行了必要的初始化,然后才进入CLR的,也可能是建立一个混合环境,方面托管和非托管代码交互执行;那么,宿主程序在哪呢?

   用 Windows 的搜索功能搜索关键字 "PowerShell",失败,找出来的全部是程序目录里的东西!~~~
   仔细想了一下,决定从根源着手;Windows的补丁程序是使用CAB打包的,因此可以直接用 WinRAR打开,用WinRAR打开 WindowsXP-KB926140-x86-CHS.exe,找到了我需要的东西 "_sfx_manifest_",用文本格式打开查看,发现了一些我需要的东西:
   "microsoft.powershell.consolehost.dll" = "_sfx_0008._p", "powershell.exe"
   "system.management.automation.dll" = "_sfx_0009._p", "microsoft.powershell.consolehost.dll"
   "microsoft.powershell.security.dll" = "_sfx_0010._p", "system.management.automation.dll"
   ……

   这充分说明了,宿主程序是存在的,它就是 Microsoft.PowerShell.ConsoleHost.dll,那么,为什么我找不到这些文件呢?
   再考虑以下,觉得这些东西可能在 GAC 中,打开GAC目录查看;哈,他们都在那呢?
   但是用 Reflector 仍然有问题!Reflector 找不到这些程序集~~~,用 Open Cache 同样找不到!!!
   没法,就从补丁包里把文件解出来看吧,弄出来再用 Reflector 打开,傻了,"File is not a portable executable. DOS header does not contain ‘MZ’ signature.",文件头不对;用记事本打开看看,发现文件头居然为 "PA19",这是什么格式的文件,为什么我从来没有见过?NGEN生成的本地代码?或者是加密过的Managed DLL?

   先不管这个,找其他办法弄出 GAC里面的程序集好了。
   GAC目录已经被一个 Shell Extension所接管了,那么现在要做的就是把目录里面的文件弄出来,我先后尝试了对话框,复制文件夹,未果,最后用一条命令行搞定了:

xcopy /e C:\Windows\assembly\GAC_MSIL G:\GAC_MSIL

   然后在拷贝出来的目录中寻找需要的程序集。哈,现在我们可以看PS的代码了,这将是很愉快的一件事。
   另外,我通过 _sfx_manifest_ 文件和 Reflector 分析程序集引用发现多了一个程序集 "System.Management.Automation.dll",其EXE备注为"Microsoft Command-Line Shell Engine Core Assembly"
   我将这些解出来的程序集打包上传,点这里下载,我们可以Reflector分析他的代码,或者将他和PS的主程序一起打包用以实现 XCOPY 部署,用以做为产品的脚本系统。

   到这里,我们已经把代码程序集都搞出来了,我们来看一下 PowerShell 到底是什么东西,能做什么:
      由于以下原因,Windows PowerShell 使用它自己的语言,而不是重用现有的语言:
         •Windows PowerShell 需要用于管理 .NET 对象的语言。
         •该语言需要为使用 cmdlet 提供一致的环境。
         •该语言需要支持复杂的任务,而不会使简单的任务变得更复杂。 
         •该语言需要与在 .NET 编程中使用的高级语言(如 C#)一致。

      PS语言的一些特性:
         1.高级语言的部分特性(变量、数组、运算符、哈希表、函数,条件语句,循环语句…)
         2.能直接在文件系统、注册表、证书存储区、驱动器中导航,而导航方式和我们熟悉的DOS导航方式极相似。
         3.强大的通配符和字符串搜索功能
         4.可以创建和操作.Net对象 和 COM 对象
         5.基于对象管道功能使用任何对象(包括.Net和COM对象)与目标交互
         7.可以直接访问 WMI 对象。
         8.可以编写 .Net 程序集来扩展PS,通过扩展,几乎可以无限的扩充 PS 的功能。

      其他特性请参考PowerShell的帮助文档。
      
      常见的命令:
         Get-Date            – 获得当前日期。
         Get-Help            – 获取帮助。
         Get-Member       – 查看对象结构(可用此命令查看 .Net 对象的成员)。
         Get-WmiObject   – 获取 WMI 对象。
         Get-Process         – 获取进程对象。
         Get-Service         – 获取Windows服务对象。

   现在已经是月黑风高催人眠,只能等明天继续研究了;最后,我们以经典的 Hello World 来结尾吧,明天,我们再来进一步研究 PS:
      使用 输出命令

WriteOutput "Hello World!"

      使用 .Net 来输出

[System.Console]::ForegroundColor = [System.ConsoleColor]::Blue
[System.Console]::WriteLine(
"Hello World!")

   真是强大的Shell!

PS: 
   我一直都希望M$能够提供一个无图形界面的,从目前看来似乎是时间还早了,但是现在是朝着好的方向发展,PowerShell让我看到了希望,说不定PowerShell就是将来的无图形界面 Server 的雏形。
   所以,我大胆预测,Vienna(继Vista之后的下一个OS,完全重写内核)将会是内核和图形界面分离,而非现在基于NT的内核,内核与图形界面将凑在一起;并且将会有一个无图形界面的Server和目前的图形Server,两者将在很长一段时间内并存,至于谁会被取代,我觉得似乎是没可能了。
   因此,我能想象的到的东西大概是,微软会将 Windows PE 升级,使其使用 Vienna 的核心,并且将会包含 .Net Framework X.Y,同时分为字符界面和图形界面。这样,Windows PE 将会成为一个极为顺手的系统诊断、故障排除工具。
   Windows Server 在和 Unix/Linux Server 的距离在拉近。

李清照 词全集

如梦令

常记溪亭日暮,沉醉不知归路。

兴尽晚回舟,误入藕花深处。

争渡,争渡,惊起一滩鸥鹭。

如梦令

昨夜雨疏风骤,浓睡不消残酒。

试问卷帘人,却道海棠依旧。

知否?知否?应是绿肥红瘦。

点绛唇
 
寂寞深闺,柔肠一寸愁千缕。惜春春去,几点催花雨。

倚遍栏干,只是无情绪!人何处?连天衰草,望断归来路。

点绛唇
 
蹴罢秋千,起来慵整纤纤手。露浓花瘦,薄汗轻衣透。

见有人来,袜铲金钗溜,和羞走。倚门回首,却把青梅嗅。

浣溪沙

莫许杯深琥珀浓,未成沈醉意先融,疏钟己应晚来风。

瑞脑香消魂梦断,辟寒金小髻鬟松,醒时空对烛花红。

浣溪沙

小院闲窗春己深,重帘未卷影沈沈,倚楼无语理瑶琴。

远岫出山催薄暮,细风吹雨弄轻阴,梨花欲谢恐难禁。

浣溪沙

淡荡春光寒食天,玉炉沈水袅残烟,梦回山枕隐花钿。

海燕未来人斗草,江梅已过柳生绵,黄昏疏雨湿秋千。

浣溪沙

髻子伤春慵更梳,晚风庭院落梅初,淡云来往月疏疏,

玉鸭薰炉闲瑞脑,朱樱斗帐掩流苏,通犀还解辟寒无。

浣溪沙

绣幕芙蓉一笑开,斜偎宝鸭亲香腮,眼波才动被人猜。

一面风情深有韵,半笺娇恨寄幽怀,月移花影约重来。

诉衷情

夜来沈醉卸妆迟,梅萼插残枝。酒醒熏破春睡,梦断不成归。

人悄悄,月依依,翠帘垂。更挪残蕊,更拈馀香,更得些时。

菩萨蛮

归鸿声断残云碧,背窗雪落炉烟直。烛底凤钗明,钗头人胜轻。

角声催晓漏,曙色回牛斗。春意看花难,西风留旧寒。

菩萨蛮

风柔日薄春犹早,夹衫乍著心情好。睡起觉微寒,梅花鬓上残。

故乡何处是?忘了除非醉。沈水卧时烧,香消酒未消。

好事近

风定落花深,帘外拥红堆雪。长记海棠开後,正是伤春时节。

酒阑歌罢玉尊空,青缸暗明灭。魂梦不堪幽怨,更一声啼鴂。

清平乐

年年雪里,常插梅花醉,挪尽梅花无好意,赢得满衣清泪!

今年海角天涯,萧萧两鬓生华。看取晚来风势,故应难看梅花。

忆秦娥

临高阁,乱山平野烟光薄。烟光薄,栖鸦归後,暮天闻角。

断香残香情怀恶,西风催衬梧桐落。梧桐落,又还秋色,又还寂寞。

添字采桑子

窗前谁种芭蕉树?阴满中庭;阴满中庭,叶叶心心、舒卷有馀情。

伤心枕上三更雨,点滴霖霪;点滴霖霪,愁损北人、不惯起来听!

摊破浣溪沙

揉破黄金万点轻,剪成碧玉叶层层。风度精神如彦辅,太鲜明。

梅蕊重重何俗甚,丁香千结苦粗生。熏透愁人千里梦,却无情。

摊破浣溪沙

病起萧萧两鬓华,卧看残月上窗纱。豆蔻连梢煎熟水,莫分茶。

枕上诗书闲处好,门前风景雨来佳,终日向人多酝藉,木犀花。

武陵春

风住尘香花已尽,日晚倦梳头。物是人非事事休,欲语泪先流。

闻说双溪春尚好,也拟泛轻舟。只恐双溪舴艋舟,载不动、许多愁。

醉花阴

薄雾浓云愁永昼,瑞脑消金兽。佳节又重阳,玉枕纱橱,半夜凉初透。

东篱把酒黄昏後,有暗香盈袖。莫道不消魂,帘卷西风,人比黄花瘦。

南歌子

天上星河转,人间帘幕垂。凉生枕簟泪痕滋,起解罗衣聊问、夜何其?

翠贴莲蓬小,金销藕叶稀。旧时天气旧时衣,只有情怀不似、旧家时!

怨王孙

湖上风来波浩渺,秋已暮、红稀香少。水光山色与人亲,说不尽、无穷好。

莲子已成荷叶老,青露洗、苹花汀草。眠沙鸥鹭不回头,似也恨、人归早。

鹧鸪天

寒日萧萧上锁窗,梧桐应恨夜来霜。酒阑更喜团茶苦,梦断偏宜瑞脑香。

秋已尽,日犹长,仲宣怀远更凄凉。不如随分尊前醉,莫负东篱菊蕊黄。

鹧鸪天

暗淡轻黄体性柔,情疏迹远只香留.何须浅碧深红色,自是花中第一流.

梅定妒,菊应羞,画栏开处冠中秋.骚人可煞无情思,何事当年不见收.

玉楼春 红梅

红酥肯放琼苞碎,探著南枝开遍末?不知酝藉几多时,但见包藏无限意。

道人憔悴春窗底,闷损阑干愁不倚。要来小看便来休,未必明朝风不起。

小重山

春到长门春草青,红梅些子破,未开匀。碧云笼碾玉成尘,留晓梦,惊破一瓯春。

花影压重门,疏帘铺淡月,好黄昏。二年三度负东君,归来也,著意过今春。

临江仙

庭院深深深几许,云窗雾阁常扃,柳梢梅萼渐分明,春归秣陵树,人老建康城。

感月吟风多少事,如今老去无成,谁怜憔悴更雕零,试灯无意思,踏雪没心情。

临江仙 梅

庭院深深深几许,云窗雾阁春迟,为谁憔悴损芳姿。夜来清梦好,应是发南枝。

玉瘦檀轻无限恨,南楼羌管休吹。浓香吹尽有谁知,暖风迟日也,别到杏花肥。

蝶恋花

暖日晴风初破冻,柳眼梅腮,已觉春心动。酒意诗情谁与共,泪融残粉花钿重。

乍试夹衫金缕缝,山枕斜欹,枕损钗头凤。独抱浓愁无好梦,夜阑犹翦灯花弄。

蝶恋花 昌乐馆寄姊妹

泪湿罗衣脂粉满,四叠阳关,唱到千千遍。人道山长水又断,潇潇微雨闻孤馆。

惜别伤离方寸乱,忘了临行,酒盏深和浅,好把音书凭过雁,东莱不似蓬莱远。

蝶恋花 上巳召亲族

永夜恹恹欢意少,空梦长安,认取长安道。为报今年春色好,花光月影宜相照。

随意杯盘虽草草,酒美梅酸,恰称人怀抱。醉里插花花莫笑,可怜人似春将老。

一剪梅

红藕香残玉簟秋。轻解罗裳,独上兰舟。云中谁寄锦书来?雁字回时,月满西楼。

花自飘零水自流。一种相思,两处闲愁。此情无计可消除,才下眉头,却上心头。

渔家傲

天接云涛连晓雾,星河欲转千帆舞;彷佛梦魂归帝所,闻天语,殷勤问我归何处。

我报路长嗟日暮,学诗漫有惊人句;九万里风鹏正举,风休住,蓬舟吹取三山去。

渔家傲

雪里已知春信至,寒梅点缀琼枝腻,香脸半开娇旖旎,当庭际,玉人浴出新妆洗。

造化可能偏有意,故教明月玲珑地。共赏金尊沉绿蚁,莫辞醉,此花不与群花比。

减字木兰花

卖花担上,买得一枝春欲放。泪染轻匀,犹带彤霞晓露痕。

怕郎猜道,奴面不如花面好。云鬓斜簪,徒要教郎比并看。

瑞鹧鸪 双银杏

风韵雍容未甚都,尊前甘橘可为奴。谁怜流落江湖上,玉骨冰肌未肯枯。

谁教并蒂连枝摘,醉后明皇倚太真。居士擘开真有意,要吟风味两家新。

念奴娇 春情

萧条庭院,又斜风细雨,重门须闭。宠柳娇花寒食近,种种恼人天气。
险韵诗成,扶头酒醒,别是闲滋味。征鸿过尽,万千心事难寄。

楼上几日春寒,帘垂四面,玉栏干慵倚。被冷香消新梦觉,不许愁人不起。
清露晨流,新桐初引,多少游春意!日高烟敛,更看今日晴未?

长寿乐

南昌生日,微寒应候,望日边六叶,阶蓂初秀。爱景欲挂扶桑,漏残银箭,杓回摇斗。
庆高闳此际,掌上一颗明珠剖。有令容淑质,归逢佳偶。到如今,昼锦满堂贵胄。

荣耀,文步紫禁,一一金章绿绶。更值棠棣连阴,虎符熊轼,夹河分守。
况青云咫尺,朝暮入承明后。看彩衣争献,兰羞玉酎。祝千龄,借指松椿比寿。

行香子

天与秋光,转转情伤,探金英知近重阳。
薄衣初试,绿蚁新尝,渐一番风,一番雨,一番凉。

黄昏院落,凄凄惶惶,酒醒时往事愁肠。
那堪永夜,明月空床。闻砧声捣,蛩声细,漏声长。

行香子 七夕

草际鸣蛩,惊落梧桐,正人间、天上愁浓。
云阶月地,关锁千重。纵浮槎来,浮槎去,不相逢。

星桥鹊驾,经年才见,想离情、别恨难穷。
牵牛织女,莫是离中。甚霎儿晴,霎儿雨,霎儿风。

孤雁儿

藤床纸帐朝眠起,说不尽、无佳思。
沈香烟断玉炉寒,伴我情怀如水。
笛声三弄,梅心惊破,多少春情意。

小风疏雨萧萧地,又催下、千行泪。
吹箫人去玉楼空,肠断与谁同倚?
一枝折得,人间天上,没个人堪寄。

[歹带]人娇 後亭梅开有感

玉瘦香浓,檀深雪散,今年恨探梅又晚。
江楼楚馆,云间水远。清昼永,凭栏翠帘低卷。

坐上客来,尊前酒满,歌声共水流云断。
南枝可插,更须频剪,莫待西楼,数声羌管。

满庭芳

小阁藏春,闲窗销昼,画堂无限深幽。篆香烧尽,日影下帘钩。
手种江梅更好,又何必、临水登楼?无人到,寂寥恰似、何逊在杨州.

从来,如韵胜,难堪雨藉,不耐风揉。更谁家横笛,吹动浓愁?
莫恨香消玉减,须信道、扫迹难留。难言处,良窗淡月,疏影尚风流。

满庭芳

小阁藏春,闲窗销昼,画堂无限深幽。篆香烧尽,日影下帘钩。
手种江梅更好,又何必、临水登楼?无人到,寂寥恰似、何逊在杨州.

从来,如韵胜,难堪雨藉,不耐风揉。更谁家横笛,吹动浓愁?
莫恨香消玉减,须信道、扫迹难留。难言处,良窗淡月,疏影尚风流。

凤凰台上忆吹箫

香冷金猊,被翻红浪,起来慵自梳头。任宝奁尘满,日上帘钩。
生怕离怀别苦,多少事、欲说还休。新来瘦,非干病酒,不是悲秋。

休休!这回去也,千万遍阳关,也则难留。念武陵人远,烟锁秦楼。
惟有楼前流水,应念我、终日凝眸。凝眸处,从今又添,一段新愁。

声声慢

寻寻觅觅,冷冷清清,凄凄惨惨戚戚。乍暖还寒时候,最难将息。
三杯两盏淡酒,怎敌他、晚来风急?雁过也,正伤心,却是旧时相识。

满地黄花堆积。憔悴损,如今有谁堪摘?守著窗儿,独自怎生得黑?
梧桐更兼细雨,到黄昏、点点滴滴。这次第,怎一个、愁字了得!

庆清朝慢

禁幄低张,雕栏巧护,就中独占残春。
客华淡伫,绰约俱见天真。
待得群花过後,一番风露晓妆新。
妖娆艳态,妒风笑月,长[歹带]东君。
东城边,南陌上,正日烘池馆,竞走香轮。

绮筵散日,谁人可继芳尘?
更好明光宫殿,几枝先近日边匀,金尊倒,拚了尽烛,不管黄昏。

永遇乐

落日熔金,暮云合璧,人在何处?染柳烟浓,吹梅笛怨,春意知几许?
元宵佳节,融和天气,次第岂无风雨?来相召、香车宝马,谢他酒朋诗侣。

中州盛日,闺门多暇,记得偏重三五。铺翠冠儿,拈金雪柳,簇带争济楚。
如今憔悴,风鬟霜鬓,怕见夜间出去。不如向、帘儿底下,听人笑语。

多丽 咏白菊

小楼寒,夜长帘幕低垂。
恨潇潇、无情风雨,夜来揉损琼肌。
也不似、贵妃醉脸,也不似、孙寿愁眉。
韩令偷香,徐娘傅粉,莫将比拟未新奇,细看取、屈平陶令,风韵正相宜。
微风起,清芬酝藉,不减酴醿。

渐秋阑,雪清玉瘦,向人无限依依。
似愁凝、汉阜解佩,似泪洒、纨扇题诗。
朗月清风,浓烟暗雨,天教憔悴瘦芳姿。
纵爱惜、不知从此,留得几多时。人情好,何须更忆,泽畔东篱。

TCP连接状态详解

TCP连接状态详解

    

        

            

        

    

            

            

            

tcp状态:

            
            

LISTEN:侦听来自远方的TCP端口的连接请求
            
            SYN-SENT:再发送连接请求后等待匹配的连接请求
            
            SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
            
            ESTABLISHED:代表一个打开的连接
            
            FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
            
            FIN-WAIT-2:从远程TCP等待连接中断请求
            
            CLOSE-WAIT:等待从本地用户发来的连接中断请求
            
            CLOSING:等待远程TCP对连接中断的确认
            
            LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
            
            TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
            
            CLOSED:没有任何连接状态

            

            

            

            

            

            

            

            

            

            

            

            

            

            

            

            

            

            

 

            

 

            

            

 

            

            

 

            

            

 

            

TCP是一个面向连接的协议,所以在连接双方发送数据之前,都需要首先建立一条连接。这和前面讲到的协议完全不同。前面讲的所有协议都只是发送数据而已,大多数都不关心发送的数据是不是送到,UDP尤其明显,从编程的角度来说,UDP编程也要简单的多—-UDP都不用考虑数据分片。

            

书中用telnet登陆退出来解释TCP协议连接的建立和中止的过程,可以看到,TCP连接的建立可以简单的称为三次握手,而连接的中止则可以叫做四次握手

            

1.连接的建立

            

在建立连接的时候,客户端首先向服务器申请打开某一个端口(用SYN段等于1的TCP报文),然后服务器端发回一个ACK报文通知客户端请求报文收到,客户端收到确认报文以后再次发出确认报文确认刚才服务器端发出的确认报文(绕口么),至此,连接的建立完成。这就叫做三次握手。如果打算让双方都做好准备的话,一定要发送三次报文,而且只需要三次报文就可以了。

            

可以想见,如果再加上TCP的超时重传机制,那么TCP就完全可以保证一个数据包被送到目的地。

            

2.结束连接

            

TCP有一个特别的概念叫做half-close,这个概念是说,TCP的连接是全双工(可以同时发送和接收)连接,因此在关闭连接的时候,必须关闭传和送两个方向上的连接。客户机给服务器一个FIN为1的TCP报文,然后服务器返回给客户端一个确认ACK报文,并且发送一个FIN报文,当客户机回复ACK报文后(四次握手),连接就结束了。

            

3.最大报文长度

            

在建立连接的时候,通信的双方要互相确认对方的最大报文长度(MSS),以便通信。一般这个SYN长度是MTU减去固定IP首部和TCP首部长度。对于一个以太网,一般可以达到1460字节。当然如果对于非本地的IP,这个MSS可能就只有536字节,而且,如果中间的传输网络的MSS更佳的小的话,这个值还会变得更小。

            

4.TCP的状态迁移图

            

书P182页给出了TCP的状态图,这是一个看起来比较复杂的状态迁移图,因为它包含了两个部分—服务器的状态迁移和客户端的状态迁移,如果从某一个角度出发来看这个图,就会清晰许多,这里面的服务器和客户端都不是绝对的,发送数据的就是客户端,接受数据的就是服务器。

            

4.1.客户端应用程序的状态迁移图

            

客户端的状态可以用如下的流程来表示:

            

CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

            

以上流程是在程序正常的情况下应该有的流程,从书中的图中可以看到,在建立连接时,当客户端收到SYN报文的ACK以后,客户端就打开了数据交互地连接。而结束连接则通常是客户端主动结束的,客户端结束应用程序以后,需要经历FIN_WAIT_1,FIN_WAIT_2等状态,这些状态的迁移就是前面提到的结束连接的四次握手。

            

4.2.服务器的状态迁移图

            

服务器的状态可以用如下的流程来表示:

            

CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

            

在建立连接的时候,服务器端是在第三次握手之后才进入数据交互状态,而关闭连接则是在关闭连接的第二次握手以后(注意不是第四次)。而关闭以后还要等待客户端给出最后的ACK包才能进入初始的状态。

            

4.3.其他状态迁移

            

书中的图还有一些其他的状态迁移,这些状态迁移针对服务器和客户端两方面的总结如下

            

 

            

                    

  1. LISTEN->SYN_SENT,对于这个解释就很简单了,服务器有时候也要打开连接的嘛。
  2.                 

  3. SYN_SENT->SYN收到,服务器和客户端在SYN_SENT状态下如果收到SYN数据报,则都需要发送SYN的ACK数据报并把自己的状态调整到SYN收到状态,准备进入ESTABLISHED
  4.                 

  5. SYN_SENT->CLOSED,在发送超时的情况下,会返回到CLOSED状态。
  6.                 

  7. SYN_收到->LISTEN,如果受到RST包,会返回到LISTEN状态。
  8.                 

  9. SYN_收到->FIN_WAIT_1,这个迁移是说,可以不用到ESTABLISHED状态,而可以直接跳转到FIN_WAIT_1状态并等待关闭。
  10.             

            

4.4.2MSL等待状态

            

书中给的图里面,有一个TIME_WAIT等待状态,这个状态又叫做2MSL状态,说的是在TIME_WAIT2发送了最后一个ACK数据报以后,要进入TIME_WAIT状态,这个状态是防止最后一次握手的数据报没有传送到对方那里而准备的(注意这不是四次握手,这是第四次握手的保险状态)。这个状态在很大程度上保证了双方都可以正常结束,但是,问题也来了。

            

由于插口的2MSL状态(插口是IP和端口对的意思,socket),使得应用程序在2MSL时间内是无法再次使用同一个插口的,对于客户程序还好一些,但是对于服务程序,例如httpd,它总是要使用同一个端口来进行服务,而在2MSL时间内,启动httpd就会出现错误(插口被使用)。为了避免这个错误,服务器给出了一个平静时间的概念,这是说在2MSL时间内,虽然可以重新启动服务器,但是这个服务器还是要平静的等待2MSL时间的过去才能进行下一次连接。

            

4.5.FIN_WAIT_2状态

            

这就是著名的半关闭的状态了,这是在关闭连接时,客户端和服务器两次握手之后的状态。在这个状态下,应用程序还有接受数据的能力,但是已经无法发送数据,但是也有一种可能是,客户端一直处于FIN_WAIT_2状态,而服务器则一直处于WAIT_CLOSE状态,而直到应用层来决定关闭这个状态。

            

5.RST,同时打开和同时关闭

            

RST是另一种关闭连接的方式,应用程序应该可以判断RST包的真实性,即是否为异常中止。而同时打开和同时关闭则是两种特殊的TCP状态,发生的概率很小。

            

6.TCP服务器设计

            

前面曾经讲述过UDP的服务器设计,可以发现UDP的服务器完全不需要所谓的并发机制,它只要建立一个数据输入队列就可以。但是TCP不同,TCP服务器对于每一个连接都需要建立一个独立的进程(或者是轻量级的,线程),来保证对话的独立性。所以TCP服务器是并发的。而且TCP还需要配备一个呼入连接请求队列(UDP服务器也同样不需要),来为每一个连接请求建立对话进程,这也就是为什么各种TCP服务器都有一个最大连接数的原因。而根据源主机的IP和端口号码,服务器可以很轻松的区别出不同的会话,来进行数据的分发。

            

            

            

            

            

Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍

作者:北南南北
来自:LinuxSir.Org
提要:Linux 磁盘分区表、文件系统的查看、统计的工具很多,有些工具是多功能的,不仅仅是查看磁盘的分区表,而且也能进行磁盘分区的操作;但在本文,我们只讲磁盘分区的查看,以及分区的使用情况的查看;本文只是给新手上路之用;关于分区工具的操作,我将在以后做专门介绍;

此文目的:主要是向初学者介绍一下入门必备的一点基础知识,有了基础知识才能进阶;如果把所有的磁盘操作工具都放在一个文档里,大家看了也累;基于这种想法,所以我写文档的时候,就想让新手弟兄一目了解,能轻松点就轻松点;生活、工作和学习无不是如此;

操作环境:Fedora core 4.0 i686 & Slackware 10.1


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


一、df 命令;

df 是来自于coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置;

举例:

我们从中可以看到,系统安装在/dev/hda8 ;还有一个56G的磁盘分区/dev/sda1挂载在 /mnt/sda1中;

其它的参数请参考 man df


二、fdsik

fdisk 是一款强大的磁盘操作工具,来自util-linux软件包,我们在这里只说他如何查看磁盘分区表及分区结构;参数 -l ,通过-l 参数,能获得机器中所有的硬盘的分区情况;

[root@localhost beinan]# fdisk -l

Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 7751 39728745 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux

 

在上面Blocks中,表示的是分区的大小,Blocks的单位是byte ,我们可以换算成M,比如第一个分区/dev/hda1的大小如果换算成M,应该是6144831/1024=6000M,也就是6G左右,其实没有这么麻烦,粗略的看一下把小数点向前移动三位,就知道大约的体积有多大了;
System 表示的文件系统,比如/dev/hda1 是NTFS格式的;/dev/hda2 表示是fat32格式的文件系统;.

在此例中,我们要特别注意的是/dev/hda3分区,这是扩展分区;他下面包含着逻辑分区,其实这个分区相当于一个容器;从属于她的有 hda5,hda6,hda7,hda8,hda9 ;

我们还注意到一点,怎么没有hda4呢?为什么hda4没有包含在扩展分区?一个磁盘最多有四个主分区; hda1-4算都是主分区;hda4不可能包含在扩展分区里,另外扩展分区也算主分区;在本例中,没有hda4这个分区,当然我们可以把其中的一个分区设置为主分区,只是我当时分区的时候没有这么做而已;

再仔细统计一下,我们看一看这个磁盘是不是还有空间?hda1+hda2+hda3=实际已经分区的体积,所以我们可以这样算 hda1+hda2+hda3=6144831+16386300+39728745 = 62259876 (b),换算成M单位,小数点向前移三位,所以目前已经划分好的分区大约占用体积是62259.876(M),其实最精确的计算62259876/1024=60800.67(M);而这个磁盘大小是80.0 GB (80026361856byte),其实实际大小也就是78150.744(M);通过我们一系列的计算,我们可以得出这个硬盘目前还有使用的空间;大约还有18G未分区的空间;

fdisk -l 能列出机器中所有磁盘的个数,也能列出所有磁盘分区情况;比如:

 

[root@localhost beinan]# fdisk -l

Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 7751 39728745 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux

Disk /dev/sda: 60.0 GB, 60011642880 bytes
64 heads, 32 sectors/track, 57231 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 57231 58604528 83 Linux

 

通过上面我们可以知道此机器有两块硬盘,我们也可以指定fdisk -l 来查看其中一个硬盘的分区情况;

 

[root@localhost beinan]# fdisk -l /dev/sda

Disk /dev/sda: 60.0 GB, 60011642880 bytes
64 heads, 32 sectors/track, 57231 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 57231 58604528 83 Linux

通过上面情况可以知道,在/dev/sda 这个磁盘中,只有一个分区;使用量差不多是百分百了;

 

我们还可以来查看 /dev/hda的

[root@localhost beinan]# fdisk -l /dev/hda

 

自己试试看?

三、cfdisk 来自于util-linux的软件包;

cfdisk 也是一款不错的分区工具;在有些发行版中,此工具已经从util-linux包中剔除;cfdisk 简单易用是他的特点;和DOS中的fdisk 相似;在本标题中,我们只来解说如何查看机器的中的磁盘分区状况及所用的文件系统等;

查看磁盘分区的用法 cfdisk -Ps 磁盘设备名;
比如

[root@localhost beinan]cfdisk -Ps
[root@localhost beinan]cfdisk -Ps /dev/hda

[root@localhost beinan]cfdisk -Ps
Partition Table for /dev/hda

First Last
# Type Sector Sector Offset Length Filesystem Type (ID) Flag
-- ------- ----------- ----------- ------ ----------- -------------------- ----
1 Primary 0 23438834 63 23438835 Linux (83) Boot
2 Primary 23438835 156296384 0 132857550 Extended (05) None
5 Logical 23438835 155268224 63 131829390 Linux (83) None
6 Logical 155268225 156296384 63 1028160 Linux swap (82) None

 

我们只用的参数 -Ps,就列出了磁盘的分区情况;目前在Slackware Debian Mandrake 等主流发行版中存在cfdisk ,而fedora 4.0把这个小工具剔除了;有点可惜;这是我在Slackware中操作的;

如果您这样操作,就更直观了;

[root@localhost beinan]cfdisk 磁盘设备名

举例:

[root@localhost beinan]cfdisk /dev/hda

 

您所看到的是如下的模式:

 

cfdisk 2.12a

Disk Drive: /dev/hda
Size: 80026361856 bytes, 80.0 GB
Heads: 255 Sectors per Track: 63 Cylinders: 9729

Name Flags Part Type FS Type [Label] Size (MB)
-------------------------------------------------------------------------------------------
hda1 Boot Primary Linux ReiserFS 12000.69
hda5 Logical Linux ReiserFS 67496.65
hda6 Logical Linux swap 526.42

[Bootable] [ Delete ] [ Help ] [Maximize] [ Print ] [ Quit ]
[ Type ] [ Units ] [ Write ]

Toggle bootable flag of the current partition

 

您进入了cfdisk 的操作界面;用键盘移动指针到[Quit]就可以退出;


四、parted 功能不错的分区工具;在Fedora 4.0中有带,可以自己安装上;在此主题中,我们只说如何查看磁盘的分区情况;

调用方法简单,parted 默认是打开的设备是/dev/hda ,也可以自己指定;比如 parted /dev/hda 或/dev/sda 等;退出的方法是 quit

[root@localhost beinan]# parted

使用 /dev/hda
(parted) p
/dev/hda 的磁盘几何结构:0.000-76319.085 兆字节
磁盘标签类型:msdos
Minor 起始点 终止点 类型 文件系统 标志
1 0.031 6000.842 主分区 ntfs 启动
2 6000.842 22003.088 主分区 fat32 lba
3 22003.088 60800.690 扩展分区
5 22003.119 30004.211 逻辑分区 reiserfs
6 30004.242 40005.615 逻辑分区 reiserfs
7 40005.646 40774.350 逻辑分区 linux-swap
8 40774.381 52219.094 逻辑分区 ext3
9 52219.125 60800.690 逻辑分区 reiserfs

 

我们在partd 的操作面上,用p就可以列出当前磁盘的分区情况,如果想要查看其它磁盘,可以用 select 功能,比如 select /dev/sda ;

五、qtparted ,与parted 相关的软件还有qtparted ,也能查看到磁盘的结构和所用的文件系统,是图形化的;

[beinan@localhost ~]# qtparted

图形化的查看,一目了然;



六、sfdisk 也是一个分区工具,功能也多多;我们在这里只说他的列磁盘分区情况的功能;

[root@localhost beinan]# sfdisk -l

自己看看吧;

 

sfdisk 有几个很有用的功能;有兴趣的弟兄不妨看看;


七、partx 也简要的说一说,有些系统自带了这个工具,功能也简单,和fdisk 、parted、cfdisk 来说不值一提;不用也罢;

用法: partx 设备名

 

[root@localhost beinan]# partx /dev/hda
# 1: 63- 12289724 ( 12289662 sectors, 6292 MB)
# 2: 12289725- 45062324 ( 32772600 sectors, 16779 MB)
# 3: 45062325-124519814 ( 79457490 sectors, 40682 MB)
# 4: 0- -1 ( 0 sectors, 0 MB)
# 5: 45062388- 61448624 ( 16386237 sectors, 8389 MB)
# 6: 61448688- 81931499 ( 20482812 sectors, 10487 MB)
# 7: 81931563- 83505869 ( 1574307 sectors, 806 MB)
# 8: 83505933-106944704 ( 23438772 sectors, 12000 MB)
# 9: 106944768-124519814 ( 17575047 sectors, 8998 MB)

 

八、查看目前机器中的所有磁盘及分区情况:

[beinan@localhost ~]$ cat /proc/partitions
major minor #blocks name

3 0 78150744 hda
3 1 6144831 hda1
3 2 16386300 hda2
3 5 8193118 hda5
3 6 10241406 hda6
3 7 787153 hda7
3 8 11719386 hda8
3 9 8787523 hda9
8 0 58605120 sda
8 1 58604528 sda1

Linux下进程的各种状态

PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers
(header “STAT” or “S”) will display to describe the state of a process.

D Uninterruptible sleep (usually IO)  

不可中断的深度睡眠,一般由IO引起,同步IO在做读或写操作时,cpu不能做其它事情,只能等待,这时进程处于这种状态,如果程序采用异步IO,这种状态应该就很少见到了

R Running or runnable (on run queue)  

进程处于运行或就绪状态

S Interruptible sleep (waiting for an event to complete)

可接收信号的睡眠状态,sleep函数可演示这种状态

T Stopped, either by a job control signal or because it is being traced.

  被ctrl+z中断或被trace

W paging (not valid since the 2.6.xx kernel)

X dead (should never be seen)

进程已经完全死掉,不可能看见这种状态的

Z Defunct (“zombie”) process, terminated but not reaped by its parent.

进程已经终止,但是其父进程没有来及处理它,多进程写不好的话,这种状态是常见的

For BSD formats and when the stat keyword is used, additional characters may
be displayed:

< high-priority (not nice to other users)

N low-priority (nice to other users)

L has pages locked into memory (for real-time and custom IO)

s is a session leader

  进程组组长

l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

+ is in the foreground process group