2007年8月28日星期二

【网络编程】IIS+ASP的安全问题

目前,IIS+ASP+Access是中小型Internet网站的首选方案。但是,该解决方案在为
我们带来便捷的同时,也带来了严峻的安全问题。

一、安全隐患分析

IIS+ASP+Access解决方案的主要安全隐患来自Access数据库的安全性,其次在于
ASP网页设计过程中的安全意识和措施。

1.数据库可能被下载

在IIS+ASP+Access网站中,如果有人通过各种方法获得或者猜到数据库的存储路径
和文件名,则该数据库就可以被下载到本地。例如:对于网上书店数据库,一般命
名为book.mdb、store.mdb等,存储路径一般为"URL/database"或放在根目录
"URL/"下,这样,任何人敲入地址:"URL/database/store.mdb", 数据库就可以
被下载了。

2.数据库可能被解密

由于Access数据库的加密机制比较简单,即使设置了密码,解密也很容易。该数据
库系统通过将用户输入的密码与某一固定密钥(例如: Access 97为86 FB EC 37
5D 44 9C FA C6 5E 28 E6 13)进行"异或"来形成一个加密串,并将其存储在
*.mdb文件从地址"&H42"开始的区域内。我们可以轻松地编制解密程序,一个几十
行的小程序就可以轻松地获得任何Access数据库的密码。因此,只要数据库被下
载,其信息就没有任何安全性可言了。

3.ASP页面的安全性

(1)源代码安全性隐患。由于ASP程序采用非编译性语言,大大降低了程序源代码
的安全性。如果黑客侵入站点,就可以获得ASP源代码;同时对于租用服务器的用
户,因个别服务器出租商的职业道德问题,也会造成ASP应用程序源代码泄露。

(2)程序设计中容易被忽视的安全性问题。ASP代码使用表单实现交互,而相应的
内容会反映在浏览器的地址栏中,如果不采用适当的安全措施,只要记下这些内
容,就可以绕过验证直接进入某一页面。例如在浏览器中敲入"...page.asp?x=
1",即可不经过表单页面直接进入满足"x=1"条件的页面。因此,在验证或注册页
面中,必须采取特殊措施来避免此类问题的产生。

二、提高IIS+ASP网站安全性的方法

1.防止数据库被下载

由于Access数据库加密机制过于简单,有效地防止数据库被下载,就成了提高ASP+
Access解决方案安全性的重中之重。以下两种方法简单、有效。

(1)非常规命名法。为Access数据库文件起一个复杂的非常规名字,并把它放在
几个目录下。例如,对于网上书店的数据库,我们不把它命名为 "book.mdb"或
"Store.mdb",而是起个非常规的名字,例如:faq9jl.mdb,再把它放在如.
/akkt/kj61/acd/av5 的几层目录下,这样黑客想通过猜的方式得到Access数据库
文件名就很难了。

(2)使用ODBC数据源。在ASP程序设计中,如果有条件,应尽量使用ODBC数据源,
不要把数据库名写在程序中,否则,数据库名将随ASP源代码的失密而一同失密,
例如:

DBPath = Server.MapPath("./akkt/kj61/acd/av5/faq9jl.mdb ")

conn.open "driver={Microsoft Access Driver (*.mdb)};dbq="& DBPath

可见,即使数据库名字起得再怪异,隐藏的目录再深,ASP源代码失密后,也很容
易被下载下来。如果使用ODBC数据源,就不会存在这样的问题了:

conn.open "ODBC-DSN名"

2.对ASP页面进行加密

为有效地防止ASP源代码泄露,可以对ASP页面进行加密。我们曾采用两种方法对
ASP页面进行加密。一是使用组件技术将编程逻辑封装入DLL之中;二是使用微软的
Script Encoder对ASP页面进行加密。使用组件技术存在的主要问题是每段代码均
需组件化,操作比较繁琐,工作量较大,而使用Encoder对ASP页面进行加密,操作
简单、收效良好。Script Encoder的运行程序是SCRENC.EXE,使用方法是:

SCRENC [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile
outputfile

其中:/s 是屏蔽屏幕输出;/f 指定输出文件是否覆盖同名输入文件;/xl 指是否
在.asp文件的顶部添加@Language指令;/l defLanguag指定缺省的脚本语言; /e
defExtension 指定待加密文件的扩展名。

3.注册验证

为防止未经注册的用户绕过注册界面直接进入应用系统,我们采用Session对象进
行注册验证。例如,我们制作了下面的注册页面。
设计要求注册成功后系统启动hrmis.asp?page=1页面。假设,不采用Session对象
进行注册验证,则用户在浏览器中敲入 "URL/hrmis.asp?page=1"即可绕过注册界
面,直接进入系统。
在此,利用Session对象进行注册验证:

〈%

'读取使用者所输入的账号和密码

UserID = Request("UserID")

Password = Request("Password")

'检查UserID 及Password 是否正确

If UserID 〈〉"hrmis" Or Password 〈〉"password" Then

Response.Write "账号错误!"

Response.End

End If

'将Session 对象设置为通过验证状态

Session("Passed") = True

%〉

进入应用程序后,首先进行验证:

〈%

'如果未通过验证,返回Login状态

If Not Session("Passed") Then

Response.Redirect "Login.asp"

End If

%〉

通过对IIS+ASP+Access网上应用系统安全性的研究,我们对现有系统进行了改造,
收到了较好的效果。

【网络技巧】常用网络工具命令汇总(共三篇)

Windows内置网络测试工具

如果你是一个网络管理员,相信你肯定会和笔者一样经常受到网络故障的困扰。网
络和单机最大的不同就是其牵一发而动全身的特性,一台单机上的问题很可能映射
到网络中的某个环节,甚至破坏全部的网络运转。那么当网络特别是家庭、企业级
用户的局域网络发生故障时,我们该如何面对,又应该如何处理呢?呵呵,硬有硬
办法,软有软道理,解决方案可能涉及到很多方面,甚至国外已经有了相关的硬件
测试工具,本文仅就目前在国内局域网中广泛应用的 Windows 98/NT/2000操作系
统中内置的网络测试工具和网友诸君探讨一下。

一、Ping

相信玩过网络的人都会对"Ping"这个命令有所了解或耳闻。Ping命令是
Windows9X/NT中集成的一个专用于TCP/IP协议的测试工具, ping命令是用于查看
网络上的主机是否在工作,它是通过向该主机发送ICMP ECHO_REQUEST包进行测试
而达到目的的。一般凡是应用TCP/IP协议的局域或广域网络,不管你是内部只有几
台电脑的家庭、办公室局域网,还是校园网、企业网甚至Internet国际互联网络,
当客户端与客户端之间无法正常进行访问或者网络工作出现各种不稳定的情况时,
建议大家一定要先试试用 Ping这个命令来测试一下网络的通信是否正常,多数时
候是可以一次奏效的。

1.Ping命令的语法格式

ping命令看似小小的一个工具,但它带有许多参数,要完全掌握它的使用方法
还真不容易,要达到熟练使用则更是难下加难,但不管怎样我们还得来看看它的真
面目,首先我们还是从最基本的命令格式入手吧!
ping命令的完整格式如下:

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

ping目的地址[参数1][参数2]……  


从这个命令式中可以看出它的复杂程度,ping命令本身后面都是它的执行参数,现
对其参数作一下详细讲解吧!

-t—有这个参数时,当你ping一个主机时系统就不停的运行ping这个命令,直到你
按下Control-C。
-a—解析主机的NETBIOS主机名,如果你想知道你所ping的要机计算机名则要加上这
个参数了,一般是在运用ping命令后的第一行就显示出来。
-n count—定义用来测试所发出的测试包的个数,缺省值为4。通过这个命令可以自
己定义发送的个数,对衡量网络速度很有帮助,比如我想测试发送20个数据包的返
回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过执行带有这个
参数的命令获知。
-l length—定义所发送缓冲区的数据包的大小,在默认的情况下windows的ping发
送的数据包大小为32byt,也可以自己定义,但有一个限制,就是最大只能发送
65500byt,超过这个数时,对方就很有可能因接收的数据包太大而死机,所以微软
公司为了解决这一安全漏洞于是限制了ping的数据包大小。
-f—在数据包中发送"不要分段"标志,一般你所发送的数据包都会通过路由分段再
发送给对方,加上此参数以后路由就不会再分段处理。
-i ttl—指定TTL值在对方的系统里停留的时间,此参数同样是帮助你检查网络运转
情况的。
-v tos—将"服务类型"字段设置为"tos"指定的值。
-r count—在"记录路由"字段中记录传出和返回数据包的路由。一般情况下你发送
的数据包是通过一个个路由才到达对方的,但到底是经过了哪些路由呢?通过此参
数就可以设定你想探测经过的路由的个数,不过限制在了9个,也就是说你只能跟
踪到9个路由。
-s count—指定"count"指定的跃点数的时间戳,此参数和-r差不多,只是这个参数
不记录数据包返回所经过的路由,最多也只记录4个。
-j host-list —利用"computer-list" 指定的计算机列表路由数据包。连续计算机
可以被中间网关分隔IP 允许的最大数量为 9。
-k host-list —利用"computer-list" 指定的计算机列表路由数据包。连续计算机
不能被中间网关分隔IP 允许的最大数量为 9。
-w timeout—指定超时间隔,单位为毫秒。
destination-list —是指要测试的主机名或IP地址

2.Ping命令的应用

 (1)、测试网络的通畅

 我们知道可以用ping命令来测试一下网络是否通畅,这在局域网的维护中经常用
到,方法很简单,只需要在DOS或Windows的开始菜单下的"运行" 子项中用ping命
令加上所要测试的目标计算机的IP地址或主机名即可(目标计算机要与你所运行
ping命令的计算机在同一网络或通过电话线或其它专线方式已连接成一个网络),
其它参数可全不加。如要测试台IP地址为196.168.1.21的工作站与服务器是否已连
网成功,就可以在服务器上运行: ping -a 196.`68.123.56 即可,如果工作站上
TCP/IP协议工作正常,即会以DOS屏幕方式显示如下所示的信息:
  Pinging cindy[196.168.1.21] with 32 bytes of data:
  Reply from 196.168.1.21: bytes=32 time<10ms TTL=254
  Reply from 196.168.1.21: bytes=32 time<10ms TTL=254
  Reply from 196.168.1.21: bytes=32 time<10ms TTL=254
  Reply from 196.168.1.21: bytes=32 time<10ms TTL=254
  Ping statistics for 196.168.1.21:
  Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate
round trip times in milli-seconds:
  Minimum = 0ms, Maximum = 0ms, Average = 0ms
  从上面我们就可以看出目标计算机与服务器连接成功,TCP/IP协议工作正常,
因为加了"-a"这个参数所以还可以知道IP为 196.168.1.21的计算机的NetBIOS名为
cindy。
  如果网络未连成功则显示如下错误信息:
  Pinging[196.168.1.21 ] with 32 bytes of data
  Request timed out.
  Request timed out.
  Request timed out.
  Request timed out.
  Ping statistice for 196.168.1.21:
  Packets:Sent=4,Received =0,Lost=4(100% loss),
  Approximate round trip times in milli-seconds
  Minimum=0ms,Maximum=0ms,Average=0ms
  为什么不管网络是否连通在提示信息中都会有重复四次一样的信息呢(如上的
"Reply from 196.168.1.21: bytes=32 time<10ms TTL=254 "和"Request timed
out"),那是因为一般系统默认每次用ping测试时是发送四个数据包,这些提示就
是告诉你所发送的四个数据包的发送情况。
  出现以上错误提示的情况时,就要仔细分析一下网络故障出现的原因和可能有
问题的网上结点了,一般首先不要急着检查物理线路,先从以下几个方面来着手检
查:一是看一下被测试计算机是否已安装了TCP/IP协议;二是检查一下被测试计算
机的网卡安装是否正确且是否已经连通;三是看一下被测试计算机的 TCP/IP协议
是否与网卡有效的绑定(具体方法是通过选择"开始→设置→控制面板→网络"来查
看);四是检查一下Windows NT服务器的网络服务功能是否已启动(可通过选择
"开始→设置→控制面板→服务",在出现的对话框中找到"Server"一项,看"状态"下
所显示的是否为"已启动")。如果是TCP/IP协议的问题,建议大家重新安装并设置
一下TCP/IP协议。如果通过以上四个步骤的检查还没有发现问题的症结,这时再查
物理连接了,我们可以借助查看目标计算机所接HUB或交换机端口的批示灯状态来
判断目标计算机现网络的连通情况。

  (2)、获取计算机的IP地址

  利用ping这个工具我们可以获取对方计算机的IP地址,特别是在局域网中,我
们经常是利用NT或WIN2K的DHCP动态IP地址服务自动为各工作站分配动态IP地址,
这时当然我们要知道所要测试的计算机的NETBIOS名,也即我们通常在"网络邻居"
中看到的"计算机名"。使用ping命令时我们只要用ping命令加上目标计算机名即
可,如果网络连接正常,则会显示所ping的这台机的动态IP地址。其实我们完全可
以在互联网使用,以获取对方的动态IP地址,这一点对于黑客来说是比较有用的,
当然首先的一点就是你先要知道对方的计算机名。

  (3)、上述应用技巧其实重点是Ping 命令在局域网中的应用,其实Ping命令不
仅在局域网中广泛使用,在Internet互联网中也经常使用它来探测网络的远程连接
情况。平时,当我们遇到以下两种情况时,需要利用Ping工具对网络的连通性进行
测试。比如当某一网站的网页无法访问时,可使用Ping命令进行检测。如当您无法
访问赛迪网的主页时,可使用"Ping www.ccidnet.com"的命令行进行测试,如果返
回类似于"Pinging ns. ccidnet.com with 32 bytes of data:……"的信息,说明对
方的主机已打开,相反则表明在网络连接的某个环节可能出现了故障,或对方的主
机未打开。另外,我们在发送E- mail之前也可以先测试一下网络的连通性。许多
因特网用户在发送E-mail后经常收到诸如"Returned mail:User unknown"的信息,
这说明您的邮件未发送到目的地。为了避免此类事件再次发生,所以建议大家在发
送E-mail 之前先养成Ping对方邮件服务器地址的习惯。例如,当您给163网站邮件
用户发邮件时,可先键入"ping 163.com"(其实163.com就是网易的其中一台服务
器名)进行测试,如果返回类似于"Bad IP address 163.com"或"Request times
out"或"Unknow host 163.com"等的信息,说明对方邮件服务器的主机未打开或网
络未连通。这时即使将邮件发出去,对方也无法收到。

  按照上述方法,我们还可以用Ping命令来检查任意一台客户湍计算机上TCP/IP
的工作情况。例如我们要检查网络任一客户端"机房01"上的 TCP/IP协议的配置和
工作情况,可直接在该台机器上Ping本机的IP地址,若返回成功的信息,说明IP地
址配置无误,若失败则应检查IP地址的配置。可通过以下步骤进行:首先先检查一
下整个网络,重点看一下该IP地址是否正在被其他用户使用,然后再看一下该工作
站是否已正确连入网络(很多情况下用户没有登陆网络也会出现此种情况,这可是
低级错误啊)。最后检查网卡的I/0地址 IRQ值和DMA值,这些值是否与其他设备
发生了冲突。其中最后一项的检查非常重要,也常被许多用户所忽视,即使是Ping
成功后也要进行此项的检查。因为当Ping本机的IP地址成功后,仅表明本机的IP地
址配置没有问题,但并不能说明网卡的配置完全正确。这时虽然在本机的"网上邻
居"中能够看到本机的计算机名,可就是无法与其他的用户连通,不知问题出在何
处,其实问题往往就出在网卡上。  

  Ping 命令虽然简单,但实际运用起来却是作用非凡,灵活使用相信一定会给
你的网管生涯带来意外的惊喜。


二、Ipconfig/Winipcfg

与Ping 命有所区别,利用Ipconfig和Winipcfg工具可以查看和修改网络中
的TCP/IP协议的有关配置,如IP地址、网关、子网掩码等。这两个工具在Windows
95/98中都能使用,功能基本相同,只是Ipconfig 是以 DOS的字符形式显示,而
Winipcfg则用图形界面显示,也就是其实两个工具是一个工具,只不过一个是DOS
下的版本,另一个为WINDWOS下的版本,但要注意,在Windows NT中只能运行于DOS
方式下的Ipconfig工具。


1.Ipconfig命令的语法格式

  Ipconfig[/all][/batch file][/renew all][/release all][/renew
n][/release n]
  
all--显示与TCP/IP协议相关的所有细节信息,其中包括测试的主机名、IP地址、
子网掩码、节点类型、是否启用IP路由、网卡的物理地址、默认网关等。
Batch file—将测试的结果存入指定的"file"文件名中,以便于逐项查看,如果省
略file文件名,则系统会把这测试的结果保存在系统的 "winipcfg.out"文件中。
renew all—更新全部适配器的通信配置情况,所有测试重新开始。
release all—释放全部适配器的通信配置情况,
renew n—更新第n号适配器的通信配置情况,所有测试重新开始。
release n—释放第n号适配器的通信配置情况,

2.Winipcfg命令

  Winipcfg工具的功能与Ipconfig基本相同,只是Winipcfg是以图形界面的方式
显示。在操作上更加方便,同时能够以WINDOWS 的 32位图形界面方式显示。当用
户需要查看任何一台机器上TCP/IP协议的配置情况时,只需在Windows 95/98上选
择"开始→运行",在出现的对话框中输入命令"winipcfg",将出现测试结果。单击
"详细信息"按钮,在随后出现的对话框中可以查看和改变TCP/IP的有关配置参灵
敏,当一台机器上安装有多个网卡时,可以查找到每个网卡的物理地址和有关协议
的绑定情况,这在某些时候对我们是特别有用的。如果要获取更多的信息,可单击
图中的"详细信息"按钮,在出现的对话框中可以相看到比较全面的信息。

3、ipconfig/winipcfg的应用

上面我讲了一下这两姊妹TCP/IP测试工具的一些用法,下面我就来谈她们的一些用途。
  (1)、查找目标主机的IP地址及其它有关TCP/IP协议的信息,方法如下:按
「开始」菜单执行「运行」菜单项,输入 winipcfg,就会出现一个 IP 组态窗
口,这里会显示有关于你目前网络 IP 的一些详细设置数据。或者,你也可以在
MS-DOS 模式下,输入 ipconfig,也是一样可以显示详细的 IP 信息,只不过此画
面是在 DOS 下而已。

  (2)、 ipconfig/winipcfg应该说是一款网络侦察的利器,尤其当用户的网络
中设置的是DHCP(动态IP地址配置协议)时,利用 Ipconfig/winipcfg可以让用户
很方便地了解到所用IPconfig/winipcfg机的IP地址的实际配置情况。因为它有一
个 "/all"这个参数,所以它可侦查到本机上所有网络适配的IP地址分配情况,比
ping命令更为详细。如果我们在机房winda客户端上运行 "Ipconfig/all/batch
winda.txt"后,打开winda.txt文件,将显示如下所示的内容,非常详细地显示了
所有与TCP/IP协议有关的配置情况。当然与ping相比也有它的不足之处就是它只能
在本机上测试,不能运用网络功能来测试。
 

三、Netstat的技法  

  与上述几个网络检测软件类似,Netstat命令也是可以运行于Windows
95/98/NT的DOS提示符下的工具,利用该工具可以显示有关统计信息和当前TCP/IP
网络连接的情况,用户或网络管理人员可以得到非常详尽的统计结果。当网络中没
有安装特殊的网管软件,但要对网络的整个使用状况作个详细地了解时,就是
Netstat大显身手的时候了。  
  它可以用来获得你的系统网络连接的信息(使用的端口和在使用的协议等),
收到和发出的数据,被连接的远程系统的端口等。

  1、Netstat命令的语法格式

  Nbtstat 格式:netstat [-a] [-e] [-n] [-s] [-p protocol] [-r] [interval]

  参数解释如下:
-a—用来显示在本地机上的外部连接,它也显示我们远程所连接的系统,本地和远
程系统连接时使用和开放的端口,以及本地和远程系统连接的状态。这个参数通常
用于获得你的本地系统开放的端口,用它您可以自己检查你的系统上有没有被安装
木马,如果您在你的机器上运行Netstat,如发現诸如:Port 12345(TCP)
Netbus、Port 31337(UDP) Back Orifice之类的信息,则你的机器上就很有可能感
染了木马。
-n—这个参数基本上是-a参数的数字形式,它是用数字的形式显示以上信息,这个
参数通常用于检查自己的IP时使用,也有些人使用他是因为更喜欢用数字的形式。
-e—显示静态太网统计,该参数可以与 -s 选项结合使用。
-p protocol—用来显示特定的协议配置信息,它的格式为:Netstat -p xxx,xxx
可以是UDP、IP、ICMP或TCP,如要显示机器上的TCP协议配置情况则我们可以用:
Netstat -p tcp。
-s—显示机器的缺省情况下每个协议的配置统计,缺省情况下包括TCP、IP、UDP、
ICMP等协议。 这些协议主要有TCP(Transfer Control Protocol,传输控制协
议)、UDP(User Datagram Protocol ,用户数据报协议)、ICMP(Internet
Control Messages Protocol,网间控制报文协议)和IP(Internet Protocol,网
际协议),其中前三种协议一般平时很少用到,但在进行网络性能评析时却非常有用。
-r—用来显示路由分配表。
  interval—每隔"interval"秒重复显示所选协议的配置情况,直到按"CTRL+C"
中断。

2、netstat的应用

  从以上各参数的功能我们可以看出netstat工具至少有以下向方面的应用:
  (1)、显示本地或与之相连的远程机器的连接状态,包括TCP、IP、UDP、ICMP
协议的使用情况,了解本地机开放的端口情况;
  (2)、检查网络接口是否已正确安装,如果在用netstat这个命令后仍不能显示
某些网络接口的信息,则说明这个网络接口没有正确连接,需要重新查找原因。
  (3)、通过加入"-r"参数查询与本机相连的路由器地址分配情况;
  (4)、还可以检查一些常见的木马等黑客程序,因为任何黑客程序都需要通过
打开一个端口来达到与其服务器进行通信的目的,不过这首先要使你的这台机连入
互联网才行,不然这些端口是不可能打开的,而且这些黑客程序也不会起到入侵的
本来目的。  
 
四、nbtstat

  NBTSTAT命令:用于查看当前基于NETBIOS的TCP/IP连接状态,通过该工具你可
以获得远程或本地机器的组名和机器名。虽然用户使用 ipconfig/winipcfg工具可
以准确地得到主机的网卡地址,但对于一个已建成的比较大型的局域网,要去每台
机器上进行这样的操作就显得过于费事了。网管人员通过在自己上网的机器上使用
DOS命令nbtstat,可以获取另一台上网主机的网卡地址。
如果用户想要统计当前局域网中的详细信息,可通过键入 "netstat-e-s"来查看。

我们还是先来看看它的语法格式吧:

  NBTSTAT [ [-a RemoteName] [-A IP address] [-c] [-n] [-r] [-R] [-RR]
[-s] [-S] [interval] ]

  参数说明:
  -a Remotename—说明使用远程计算机的名称列出其名称表,此参数可以通过远
程计算机的NetBios名来查看他的当前状态。
  -A IP address—说明使用远程计算机的 IP 地址并列出名称表,这个和-a不同
的是就是这个只能使用IP,其实-a就包括了-A的功能了。
  -c—列出远程计算机的NetBIOS 名称的缓存和每个名称的 IP 地址这个参数就
是用来列出在你的NetBIOS里缓存的你连接过的计算机的IP。
  -n—列出本地机的 NetBIOS 名称,此参数与上面所介绍的一个工具软件
"netstat"中加" -a"参数功能类似,只是这个是检查本地的,如果把netstat -a后
面的IP换为自己的就和nbtstat -n的效果是一样的了。
  -r—列出 Windows 网络名称解析的名称解析统计。在配置使用 WINS 的
Windows 2000 计算机上,此选项返回要通过广播或 WINS 来解析和注册的名称数。
  -R—清除 NetBIOS 名称缓存中的所有名称后,重新装入 Lmhosts 文件,这个
参数就是清除nbtstat -c所能看见的缓存里的IP。
  -S—在客户端和服务器会话表中只显示远程计算机的IP地址。
  -s—显示客户端和服务器会话,并将远程计算机 IP 地址转换成NETBIOS名称。
此参数和-S差不多,只是这个会把对方的NetBIOS名给解析出来。
  -RR—释放在 WINS 服务器上注册的 NetBIOS 名称,然后刷新它们的注册。
  interval—每隔interval 秒重新显示所选的统计,直到按"CTRL+C"键停止重新
显示统计。如果省略该参数,nbtstat 将打印一次当前的配置信息。此参数和
netstat的一样,nbtstat中的"interval"参数是配合-s和-S一起使用的。

  好了,关于nbtstat的应用就不多讲了,相信看了它的一些参数功能也就明白
了它的功能了,只是要特别注意这个工具中的一些参数是区分大、小写的,使用时
要特别留心!另外在系统中还人置有许多这方面的工具,如ARP命令是用于显示并
修改Internet到以太网的地址转换表;nslookup命令的功能是查询一台机器的IP地
址和其对应的域名,它通常需要一台域名服务器来提供域名服务,如果用户已经设
置好域名服务器,就可以用这个命令查看不同主机的 IP地址对应的域名……在此就
不多讲了,另外还要说明的一点就是不同的系统中的相应命令参数设置可能有不同
之处,但大体功能是一致的,希望大家在应用时稍加注意,本文所列的这些工具软
件参数用法全是针对Win9xWinMe,在NT和UNIX、LINUX系统中有一些不同之处。
  
/////////////////////////////////////////////////////////////////////////////////////////////////////

常用网络工具命令

windows操作系统中包含了5个TCP/IP实用程序:ping、ipconfig、tracert、
netstat、arp。这些软件虽然不大,但确实可以方便的帮助我们了解网络的状况。

1. Ping命令
Ping 可能是这5个TCP/IP软件中大家最熟悉的一个了,这个软件从Windows 95开始
集成,目前所有微软的操作系统都附带这个软件。Ping的主要作用是检测一帧数据
从当前主机传送到目的主机所需要的时间。它通过发送一些小的数据包,并接收应
答信息来确定两台计算机之间的网络是否连通。当网络出现问题时,可以用这个软
件来预测故障和确定故障源。如果执行ping不成功,则可以预测故障出现在以下几
个方面:网线是否连通,网络适配器配置是否正确,IP地址是否可用等;如果执行
ping成功而网络仍无法使用,那么问题很可能出在网络系统的软件配置方面,不
过,需要注意的是:ping成功只能保证当前主机与目的主机间存在一条连通的物理
路径,并不代表其它东西。

Ping命令的格式如下:(在命令行状态下输入ping即可显示其格式及参数的英文
说明)
ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count]
[-s count] [[-j host-list] | [-k host-list]] [-w timeout] destination-list
其中的参数说明如下:
-t 使当前主机不断地向目的主机发送数据,直到使用Ctrl-C中断;
-a 以IP地址格式显示网络地址;
-n count 指定要做多少次ping,其中count为正整数值,默认为4;
-l size 发送的数据包的大小;
-f 设置回应不会由中间网关分组;
-i TTL 指定ping分组时限域,TTL是指在停止到达的地址前应经过多少个网关;
-v TOS 服务的类型;
-r count 指出要记录路由的轮数(去和回);
-s count 指定当使用-r参数时,用于每一轮路由的时间;
-j host-list 指定希望分组的路由;
-k host-list 与-j参数基本相同,只是不能使用额外的主机;
-w timeout 指定超时时间间隔(单位为毫秒),缺省为1000;
一般我们使用得较多的参数为-t、-n、-w。

例:如果ping某一网络地址,如:www.sina.com.cn,出现:"Reply from
61.132.187.134: bytes=32 time=541ms TTL=239"则表示本地与该网络地址之间的
线路是畅通的;如果出现"Request timed out",则表示此时发送的数据包不能到
达目的地,此时可能有两种情况,一种是网络不通,还有一种是网络连通状况不
佳。此时还可以使用带参数的Ping来确定是哪一种情况。 例:ping

www.sina.com.cn -t -w 3000 不断地向目的主机发送数据,并且响应时间增大到
3000ms,此时如果都是显示"Reply timed out",则表示网络之间确实不通,如果
不是全部显示"Reply times out"则表示此网站还是通的,只是响应时间长或通讯
状况不佳。这样我们检查网络状态就很容易了。当然Ping的作用还不止这些,比如
我们可以用Ping 来判断目前机器的IP地址配置是否正常(这主要是在局域网的问
题),这样我们可以直接在该台机器上Ping本机的IP地址,若返回成功的信息,说
明IP地址配置无误,若失败则应检查IP地址的配置。另外,我们在发送E-mail之前
也可以先测试一下网络的连通性。许多因特网用户在发送E-mail后经常收到诸如
"Returned mail:User unknown"的信息,这说明您的邮件未发送到目的地。为了避
免此类事件再次发生,所以建议大家在发送E-mail 之前先养成Ping对方邮件服务
器地址的习惯。例如,当您给aa@163.net发邮件时,可先键入"ping 163.net"进行
测试,如果返回类似于"Bad IP address cniti.com"或"Request times out"的信
息,说明对方的主机未打开或网络未连通。这时即使将邮件发出去,对方也无法收到。

2、Ipconfig命令
利用Ipconfig工具可以查看和修改网络中的TCP/IP协议的有关配置,如IP地址、网
关、子网掩码等。如:

ipconfig的命令格式如下:
ipconfig [/? | /all | /release [adapter] | /renew [adapter]]
其中的参数说明如下:
/? 显示ipconfig的格式和参数的英文说明;
/all 显示所有的配置信息;
/release 为指定的适配器(或全部适配器)释放IP地址(只适用于DHCP);
/renew 为指定的适配器(或全部适配器)更新IP地址(只适用于DHCP)。
/batch[文本文件名]:将测试的结果存入指定的文本文件名中,以便于逐项查看。
使用不带参数的ipconfig命令可以得到以下信息:IP地址、子网掩码、默认网关。
而使用ipconfig /all,则可以得到更多的信息:主机名、DNS服务器、节点类型、
网络适配器的物理地址、主机的IP地址、子网掩码以及默认网关等。
Ipconfig 应该说是一款网络侦察的利器,尤其当用户的网络中设置的是DHCP(动
态IP地址配置协议)时,利用Ipconfig可以让用户很方便地了解到IP地址的实际配
置情况。如果我们在机房01客户端上运行"Ipconfig/all/batch net.txt"后,打开
net.txt文件,将显示如下所示的内容,非常详细地显示了TCP/IP协议的有关配置
情况 。

以上就是运行ipconfig /all后显示目前本机的网络配置,网卡和详细网关、DNS服
务器都一览无余。
3. Tracert命令
Tracert命令的功能是判定数据包到达目的主机所经过的路径、显示数据包经过的
中继节点清单和到达时间。
tracert命令的格式如下:
tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name
其中的参数说明如下:
-d 不解析主机名;
-h maximum_hops 指定搜索到目的地址的最大轮数;
-j host-list 沿着主机列表释放源路由; -w timeout 指定超时时间间隔(单位
毫秒)。
通过tracert我们很容易知道目前我们到达这台机器需要通过多少台服务器,这个
功能在局域网中特别有用。

比如,我们依旧以去www.sina.com.cn网站为例,我的这台机器需要通过17个服务
器才能达到新浪网站。

4. Netstat命令
这个程序有助于我们了解网络的整体使用情况。它可以显示当前正在活动的网络连
接的详细信息,如采用的协议类型、当前主机与远端相连主机(一个或多个)的
IP 地址以及它们之间的连接状态等。用户或网络管理人员可以得到非常详尽的网
络统计结果。当网络中没有安装特殊的网管软件,但要对网络的整个使用状况作个
详细地了解时,就是Netstat大显身手的时候了。

使用netstat /?可以显示它的命令格式和参数说明。
netstat的命令格式如下:
netstat [-a] [-e] [-n] [-s] [-p proto] [-r] [interval] 其中的参数说明如下:
-a 显示所有主机的端口号;
-e 显示以太网统计信息;
-n 以数字表格形式显示地址和端口;
-p proto 显示特定的协议的具体使用信息;
-r 显示本机路由表的内容;
-s 显示每个协议的使用状态,这些协议主要有TCP(Transfer Control
Protocol,传输控制协议)、UDP (User Datagram Protocol ,用户数据报协
议)、ICMP (Internet Control Messages Protocol,网间控制报文协议)和IP
(Internet Protocol,网际协议),其中前三种协议一般平时很少用到,但在进
行网络性能评析时却非常有用。
interval 重新显示所选的状态,每次显示之间的间隔数(单位秒),按Ctrl+C中
止重新显示。
另外,在Windows 95/98/NT/2000下还集成了一个名为Nbtstat的工具,此工具的功
能与Netstat基本相同,如需要用户可通过键入"nbtstat -?"来查看它的主要参数
和使用方法。使用时,如果用户想要统计当前局域网中的详细信息,可通过键入
"netstat-e-s"来查看。

5、arp命令
arp命令主要用来显示及修改特定IP地址的网卡地址。
使用arp /?可以显示它的命令格式和参数说明。
arp的命令格式如下:
arp -s inet_addr eth_addr [if_addr]
arp -d inet_addr [if_addr]
arp -a [inet_addr] [-N if_addr]
其中的参数说明如下:
inet_addr IP地址;
eth_addr 网卡地址;
-a 显示某个IP地址的网卡地址(不加IP地址,显示所有已激活的IP地址的网卡地
址)(使用该参数前应该先ping通某一个IP地址);
-d 删除指定IP地址的主机;
-s 增加主机和与IP地址相对应的网卡地址。

运行后,系统显示,目前本机IP地址为:192.168.0.15,而服务器IP地址则为:
192.168.0.1,当然其中也会显示目前我网卡的真实物理地址:00-e0-5e-39-1e-24
要运行以上这些程序,只要在DOS方式或Windows开始菜单的运行栏中以命令行的形
式键入程序名即可。灵活使用这几个程序不仅可以使你大体了解自己主机对网络的
使用情况,还可以进行相应的网络管理或检查工作,例检测网络线路是否畅通,局
域网中是否有人盗用IP地址等。
特别注意:在使用这几个命令中,除winipcfg(ipconfig)和netstat命令后面不接
主机地址(IP地址或主机名)外,其余3个命令(ping,tracert,arp)后面都要接
主机地址。
既然,网络大潮已经真正的到来了,掌握一些简单的网络检测几乎是必须的,希望
大家通过此文可以给我们在网络使用中得到更好的环境。


////////////////////////////////////////////////////////////////////////////////////////////////

未公开的Windows网络工具


作为网络时代的桌面操作系统,Windows 98较之其前几代产品增加的不仅仅是用户
能够直接感受到的对TCP/IP等各种网络协议的支持和内嵌的免费浏览器IE,在
Windows 98操作系统中,还集成了完备齐全、功能强大的网络实用工具,能够对网
络应用的各个层次、不同方面进行监测、分析、维护、管理。
由于不能直接在"开始"菜单中选择,加之大多数工具是传统的命令行界面,因此,
这些工具被大多数普通用户所忽略。而作为操作系统集成的网络工具,其质量和可
靠性与网上的各种免费共享软件相比,当然更加令人放心。用户既能够免除复杂的
安装设置过程,方便快捷地调用,又可以避免网上搜寻、下载花费的时间和精力,
防止病毒感染的可能。
运行这些工具的方法与运行一个程序的方法类似:既可以在DOS提示符后输入相应的
程序名,也可以在"开始"中的"运行"菜单中输入同样的命令。
一、检测分析工具
1. IP探测工具Ping
Ping 的命名起源于潜艇声纳探测目标时发出的脉冲,该脉冲遇到目标后会反射回
来,这也恰当地揭示了Ping的功能。如果在浏览某个网页时迟迟得不到回应,用户
可以通过向该主机发出一个试探性的IP检测包(相当于声纳脉冲),来测试该主机
是否可以到达。同时Ping返回了丰富的资料,用户借此可以了解从本机到达对方主
机的速度和该主机的IP地址等信息。
格式:Ping 目的地址 [参数1] [参数2] [参数3]
其中目的地址是指被探测主机的地址,既可以是域名,也可以是IP地址。
参数:
-t : 继续Ping直到用户终止。
-a: 解析主机地址。
-n数值: 发出的探测包的数目,默认值为4。
-l数值: 发送缓冲区大小。
-f: 设置禁止分割包标志。
-I数值: 包生存时间,该数值决定了IP包在网上传播的距离。
-v: 服务类型。
实例: 为了节约上网费用,作为练习,可以在脱机时输入本机地址localhost作为
探测目标。
Ping localhost 或者Ping 127.0.0.1
得到的统计结果如下:
Pinging any [127.0.0.1] with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Reply 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
以上为发出和回收包数目、包丢失率、平均路由时间等统计。发出的四个探测包都
成功返回,说明对方主机可以访问,并且得到了对方域名为Localhost的 IP地址:
127.0.0.1。
2. 系统监视器
系统监视器可以对本机的网络、内存、磁盘、处理器等关键资源进行监视,并将统
计结果动态显示出来。
点击附件中系统工具下的系统监视器。
选择"添加项目"菜单添加被监视的项目,对于互联网,应该添加"拨号网络适配
器",然后选择其中的"CRC错误"等关键项目进行监视。网络资源项目非常详细,有
CRC错误、超时错误、超限错误、传送的总字节数、对齐方式错误、缓冲区超限、
接受的总字节数、连接速度、每秒传送的帧、每秒传送的字节、每秒接受的帧、每
秒接受的字节、未完成帧、帧错误等。为了监视互联网连接质量,通常选择"CRC错
误"、"帧错误"等关键项目以判断是用户电话线故障或ISP线路故障。
3. 网络统计工具NetStat
功能: 显示协议统计和当前TCP/IP网络连接,用户可以得到非常详尽的统计。
格式: Netstat [参数1] [参数2] [参数3]
参数:
-a: 显示所有网络连接和监听端口。
-e: 显示以太网统计资料。
-n: 以数字格式显示地址和端口。
-p: 显示指定的TCP或者UDP协议的连接。
-r: 显示路由表。
-s: 显示每一个协议的统计。协议可以是TCP、UDP、IP。
interval: 按照指定间隔(interval)反复显示统计信息。
实例: 作为练习,可以输入命令:Netstat -s,则显示所有协议的统计信息如下:
IP Statistics:
Packets Received = 104
Received Header Errors = 0
Received Address Errors = 0
Datagrams Forwarded = 0
Unknown Protocols Received = 0
Received Packets Discarded = 0
Received Packets Delivered = 104
Output Requests = 104
Routing Discards = 0
Discarded Output Packets = 0
Output Packet No Route = 0
Reassembly Required = 0
Reassembly Successful = 0
Reassembly Failures = 0
Datagrams Successfully Fragmented = 0
Datagrams Failing Fragmentation = 0
Fragments Created = 0
ICMP Statistics:
Received Sent
Messages 104 104
Errors 0 0
Destination Unreachable 0 0
Time Exceeded 0 0
Parameter Problems 0 0
Source Quenchs 0 0
Redirects 0 0
Echos 52 52
Echo Replies 52 52
Timestamps 0 0
Timestamp Replies 0 0
Address Masks 0 0
Address Mask Replies 0 0
4. 跟踪路由工具TraceRT(Trace Route)
功能: 查看从本地主机到目标主机的路由。这是一个了解网络原理和工作过程的好
工具,通过显示从本地主机到目标主机所经过的每一个主机地址及来回时间,你既
可以了解一个数据包是如何在网络上经过迂回路由传送到目标主机,又可以分析阻
塞发生在网络的哪一个环节。
在IP 数据包中有一个字段TTL(Time To Live)决定该数据包能够在网络上传送的
距离,发出数据包时,通常预置了初始值。每当该数据包遇到一个主机(经过一次
路由),该字段值减一,然后向邻近的下一个主机发送,直到其值为零就停止传
送,若在TTL值的范围内到达目的地,则发送成功,否则必须重发。这样可以防止
一个数据包无限制地在网上传递,造成网络阻塞。TraceRT工具通过发送探测包,
来获得所经过的每一个主机的地址和往返时间。
格式:TraceRT [参数1][参数2] 目标主机
参数:
-d: 不解析目标主机地址。
-h: 指定跟踪的最大路由数,即经过的最多主机数。
-j: 指定松散的源路由表。
-w: 以毫秒为单位指定每个应答的超时时间。

2007年8月27日星期一

【网络使用技巧】各种操作系统下清空dns缓存方法/命令

How to Flush DNS in Microsoft Windows

微软windows下如何清空dns

In Microsoft Windows, you can use the command ipconfig /flushdns to flush the DNS resolver cache.

在微软windows下,你可以用命令 ipconfig /flushdns 来清空dns 缓存内容。

You can also use the command ipconfig /displaydns to view the DNS resolver cache.

你也可以用命令 ipconfig /displaydns 来查看dns 缓存内容。

C:\>ipconfig /flushdns

Windows IP Configuration

Successfully flushed the DNS Resolver Cache.

How to Flush DNS in Mac OSX

Mac OSX下如何清空dns缓存

In Mac OSX, you can use the command lookupd -flushcache to flush the DNS resolver cache.

Mac OSX中,你可以用这个命令lookupd -flushcache来清空保留的缓存。

bash-2.05a$ lookupd -flushcache

How to Flush DNS in Linux

Linux 下如何清空dns缓存

In Linux, the nscd daemon manages the DNS cache.

linux中,nscd进程负责管理DNS缓存。

To flush the DNS cache, restart the nscd daemon.

要清空DNS缓存,重启nscd 守护进程就行了。

To restart the nscd daemon, use the command `/etc/rc.d/init.d/nscd restart`.

要重启nscd 进程,使用命令(不带引号)'/etc/rc.d/init.d/nscd restart'

2007年8月25日星期六

【C#】C#基础语法--转载

此为别人的学习笔记,最新版本在wiki.deepcast.net中发布。


一,注释语句
  
/*注释语句包含在"反斜杠* "和" *反斜杠"中,
  或者两个反斜杠和换行符之中,
  或者三个反斜杠和换行符之中(可以被VS自动识别为文件注释以提取)
  要注意注释中的\,该续行符会把下一行连上来一起注释掉出错。
*/

  
static void Main(string[] args)
    {
//语句块包含在{}中
      int MyInterger;//语句以;结束
      string MyString;///忽略空白字符(空格/回车/TAB)
      MyInterger = 17;
    }
  
//要注意防止注释嵌套出错,可用#if,#endif预处理语句。

二,数据类型
  
,基本型/内置型 用户自定义型
  A,内置类型:CS使用.net FrameWork库中的数据类型
  
sbyte = System.SByte,...
类型 字节数 解释
byte 1 无符号字节型
sbyte 1 有符号字节型
short 2 有符号短字节型
ushort 2 无符号短字节型
int 4 有符号整型
uint 4 无符号整型
long 8 有符号长整型
ulong 8 无符号长整型
float 4 浮点数
double 8 双精度数
decimal 8 固定精度数
string unicode字串型
char unicode字符型
bool 真假布尔型//只接受true和false两种值。不接受任何整数类型。

  B,用户定义类型包括:
类类型(
class)
结构类型(
struct)
接口类型(
interface)


  
,值类型(Value Types)和引用类型(Reference Types)

  A,值类型:内存顺序分配在栈中。他们包括:所有基本或内置类型(不包括string类型)、结构类型、枚举类型(
enum type)
  B,引用类型:内存非线性分配在堆中,当它们不再被使用时CS通过垃圾收集器自动释放内存(C
++用delete)。它们使用new运算符来创建。
  引用类型包括:类类型、接口类型、象数组这样的集合类型类型、字串类型、枚举类型
  结构型适于快速访问和拥有少量成员的数据类型。如果涉及量较多,你应该创建一个类来实现他。

  
,数据类型转换
  隐式转换:从低精度的转换到高精度的,所以不可能转换到char;另外可以把0隐式转换成枚举型,其他整数不行。
  显式转换
static void Main(string[] args)

short shortResult, shortVal = 4;
int integerVal = 67;
long longResult;
float floatVal = 10.5F;
double doubleResult, doubleVal = 99.999;
string stringResult, stringVal = "17";
bool boolVal = true;

Console.WriteLine(
"Variable Conversion Examples\n数据类型转换范例\n");
doubleResult
= floatVal * shortVal;
Console.WriteLine(
"Implicit,->double:{0}*{1}->{2}", floatVal, shortVal, doubleResult);
shortResult
=short)floatVal;
Console.WriteLine(
"Implicit,->short:{0}->{1}", floatVal, shortResult);
stringResult
= Convert.ToString(boolVal) + Convert.ToString(doubleVal);
Console.WriteLine(
"Explicit,->string:\"{0}\"+\"{1}\"->{2}", boolVal, doubleVal, stringResult);
longResult
= integerVal + Convert.ToInt64(stringVal);
Console.WriteLine(
"Mixed,->long {0}+{1}->{2}", integerVal, stringVal, longResult);


三,变量:
  
,普通变量:
  (
1),命名规则:字母或_或@ + 字母或_或数字 (/用于转义,@用于逐个转义指定,@常用于保留关键字前以保持与其他语言兼容)
  (
2),声明变量: 变量类型 变量名
  变量赋值:变量
= 要赋的值
  C#变量被访问之前必须被初始化;否则编译时会报错。因此,不可能访问一个未初始化变量(如不确定的指针、超出数组边界的表达式)。变量在使用前最好习惯是要先声明和初始化。
  (
3)C#中没有全局的的变量或全局函数,全局方式的操作是通过静态函数和静态变量来实现的。
int i;
string text;//在循环外未初始化
for (i = 0;i<10;I++)
{
text
= "Line" + Convert.ToString(i);//在循环中未初始化,在退出循环的时候会丢失值,再引用就出错。
Console.WriteLine("{0},text);
}

Console.WriteLine(
"Last txet output in loop:{0},text);//出错。改正方法是在循环外初始化:string text="";

  (
4)命名约定:简单的用camelCase,复杂的用PascalCase
  (
5)变量的七种类型:
class A
{
public static int x;//静态变量,存在期从类装载直到该程序结束。
int y;//非静态变量,或实例变量,从类实例创建到实例空间释放。

/*v[0]是数组元素,a是值参数,b是引用参数,c是输出参数 */
void F(int[] v,int a,ref int b,out int c){
int i = 1;//局部变量,不会被初始化
c = a + b++;//
}

}

  
,枚举
    
enum 枚举名:枚举值类型(默认是int,默认赋值0,1,2...)
    {
     枚举值1
=...,
     枚举值2
=...,
     枚举值3,
//不赋值的话,默认为最后一个明确具体值的值+1
     ...
    }
    枚举名 变量名=枚举名.枚举值

namespace Ch05Ex02
{
enum orientation:byte
{
north
=1,
south
=2,
east
=3,
west
=4
}

///Class1's Desciption
class Class1
{
static void Main(string[] args)
{
byte directionByte;
string directionString;
orientation myDirection
= orientation.north;
Console.WriteLine(
"mydirection = {0}", myDirection);
directionByte
= (byte)myDirection;//因为enum存得下byte,所以理论上可以正确地反过来转换,但逻辑上不一定正确。myDirection = (orientation)myByte;
directionString = Convert.ToString(myDirection);//等价命令是directionString = myDirection.ToString();
//因为不单是把枚举变量值转存到string变量中,所以不能用string(mydirection);
//反 向转换命令是orientation myDirection = (orientation)Enum.Parse(typeof(orientation),myString);但由于enum不一定存得下 string,所以可能出错。如myString赋值为North,就不能映射到orientation中的north,出错。
Console.WriteLine("byte equivalent = {0}", directionByte);
Console.WriteLine(
"string equivalent = {0}", directionString);
}

}

}


     
  
,结构
    
struct 结构名:
    {
     访问方式1 变量类型1 变量名1;
//访问方式public/private
     访问方式2 变量类型2 变量名2;  
     ...
    }
    结构名 结构变量名;
    结构变量名.枚举值
=...;

  
,一维数组
    变量类型[] 数组名
= new 变量类型[元素个数]{元素0,元素1,元素2...}//元素个数必须是整数或者整数常量,而且必须与后面的元素列值个数相同,否则出错。元素个数的new声明和后面的元素列值可以只选一个,就能声明并初始化数组。
    遍历方法
A,For循环到.Length
for(i=0,i<friendNames.Length,i++)
{
Console.WriteLine(friendNames[i]);
}

B,Foreach进行只读访问
foreach(string listName in friendNames)
{
Console.WriteLine(listName);
}


  
,二维数组(多维)
    变量类型[,] 数组名
= new 变量类型[一维元素个数,二维元素个数]{{元素00,元素01,元素02...},{元素10,元素11,元素12...}...}


  
,直角数组(交错数组,数组中的数组)
  
,字符串操作:

string myString = "I have a dream.";
char myChar = myString[2];//把string变量当作只读的char数组使用,不能改写myString[2]
char[] myChars = myString.ToCharArray();

char[]separator =' '};//设定分隔符
string[] myWords =myString.Split(separator);//分隔成数组
Console.WriteLine("myString have {0} chars",myString.Length);
myString
=myString.ToLower();//转小写
myString=myString.ToUpper();//转大写
myString=myString.Trim();//删前后空格
myString=myString.TrimStart();//删前空格
myString=myString.TrimEnd();//删后空格
myString=myString.PadLeft(位数);//前补空格到指定位数
myString=myString.PadRight(位数);//后补空格到指定位数
myString=myString.PadLeft(位数,字符);//前补指定字符到指定位数


char[] trimChars ="e","#","*"};
myString
= myString.trim(trimChars);//删指定字符


四,常量:
   Const
int intTwo = 2 (必须声明的同时赋值)

五,运算符:按优先级顺序排列
  
  算术运算符:前缀的
++-- ,前缀一元的+-*/ 求余 %+-
  位移运算符:
<<,>>
  比较运算符:小于
< 大于 > 小于等于 <= 大于等于 >=
  比较运算符:
==,!=
  逻辑运算符:
&
  逻辑运算符:
^
  逻辑运算符:
|
  逻辑运算符:
&&
  逻辑运算符:
||
  比较运算符:等于
= *= /= %= += -= <<= >>= &= ^= |=
  后缀的
++--

六,名称空间

  
using system; //system是.net FrameWork应用程序根命名空间,之后就能在全局名称空间引用system中的代码。
  namespace 空间名称
   
{
      
using 空间名称2.代码2;//之后就能在代码1处直接引用代码2
      代码1;
      
namespace 空间名称2
      
{
      代码2;
      }

   }


七,条件语句
  A,If语句:通用判断
    If (条件1)
      代码1;
    Else
      代码2;

    If (条件1)
    {}
    Else
    {}

  B,Switch语句:用于同条件多结果判断
    Switch (条件)
     
{
      Case 结果1:
      代码1;
      
break;
      Case 结果2:
      代码2;
      
break;
      Case 结果3:
      代码3;
      
goto Case 结果2;//此时Case..相当于一个Label
      Case 结果4:
      代码4;
      Return;
      Case 结果5:
      Case 结果6:
      Case 结果7:
      代码567;
//只要满足上面三个Case之一就执行。
      break;
      ...
      Default:
      代码;
      
break;
     }

  C,三元运算语句:(条件)
?True结果:False结果
    常用于简单赋值语句:
string myString = (myInteger<10)?"Less than 10":"Great than or equal to";
    或者用于简单格式化文本语句:Console.WriteLine(
"I am {0} year{1} old.",myinteger,myinteger==1?"":"s");


八,循环语句:
  A,Do...While: 当条件为True时循环。
    Do
    
{...}
    While(条件);
//分号不可少
  B,While...: 当条件为True 时循环。
    While(条件)
    
{...}
    
  C,For...: 使用计数器循环。
    For (变量;条件;操作)
//可以在此时声明变量,但作用域就仅限于循环内了。
    {...
    Break;
//跳出整个循环
    Return;
    Continue;
//中止当前循环,继续下一个循环
    Goto 标签;//禁止从循环外部用goto跳入循环内部
    }


九,函数

A,函数定义:
static 返回值类型/void 函数名(参数类型1 参数1,参数类型2 参数2,...)
{
...
return 返回值;//return必须在函数结束前被处理,不能跳过
//return ;//当用于void时用不带返回值的return来中止函数。
}


B,参数数组:
static int sumVals(params int[] vals)
{
int sum = 0;
foreach(int val in vals)
{
sum
+=val;
}

return sum;
}


static void Main(string[] args)
{
int sum = sumVals(1,5,2,9,8);
Console.WriteLine(
"Summed Values = {0}",sum);
}


C,值传递参数
/引用传递参数/out输出参数

static void showDouble(ref int val)//引用传递参数
{
val
*=2;
Console.WriteLie(
"val doubled = {0}",val);
}

static void showDouble2(int val)//值传递参数
{
val
*=2;
Console.WriteLine(
"val doubled = {0}",val);
}

static void showDouble3(int val,out int valIndex)//out输出参数
{
val
*=2;
valIndex
++;
Console.WriteLine(
"val doubled = {0}",val);
}


int myNmuber = 5;
showDouble(
ref myNumber);//引用传递参数,会改变myNumber值,所以要求myNumber必须不是常量或者未初始化的变量。
showDouble2(myNumber);//值传递参数,不会改变myNumber值

int valindex;//out输出参数,不用初始化,初始化了也会在函数开始执行时丢失值。
showDouble3(myNumber,out valIndex);

D,全局变量
static/const 变量名//const定义的全局变量是只读的
当全局变量与局部变量同名时,局部变量优先,要用类似class1.myString来引用全局变量。

E,Main()函数;
static void Main()
static void Main(string[] args)//args是函数命令行参数
static int Main()//返回一个表示函数终止状态的int值
static int Main(string[] args)//返回一个表示函数终止状态的int值

F,结构中的函数
G,同名函数的重载:同名,签名不同,系统自动识别使用哪个函数
H,委托:用于把引用存储为函数以灵活调用函数

十,面向对象基础

十一,类

1,类的定义
class 类名
{
//类成员
}

internal/public

sealed/abstract

十和,接口
interface IMyInterface
{
//接口成员
}