发新话题
打印

菜鸟升级一号专题(已完成)

通通透透讲溢出攻击, 基础知识.

缓冲区溢出技术基础
为了提高大家的技术水平,为了更了解我们讨论的这种技术,为了把这个论坛建成一个更更好的论坛,下面我
为大家推出一系列完整的有关溢出,溢出攻击的文章。让大家更能了解到这个天天说但又不太清楚怎么回事的
东西。我想,看了这个以后大家也不再会问,为什么我用了这个工具,怎么没有用呀什么的问题?
在这里强调一下,想完全看的懂这篇文章,至少需要具备一定的汇编语言,C语言和LINUX的基础。
缓冲区溢出”在英文中可以解释为:buffer overflow,buffer overrun,smash the
stack,trash the stack,scribble the stack, mangle the stack, memory
leak,overrun screw;
我们通常所说的“溢出”指的是缓冲区溢出,(废话,不然要从那里溢出呀!)先解释一下什么是缓冲区——
缓冲区是内存中存放数据的地方,是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。问
题随着动态分配变量而出现。为了不用太多的内存,一个有动态分配变量的程序在程序运行时才决定给他们分
配多少内存。当程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。另一种
说法,就是说程序在动态分配缓冲区放入太多的数据会有什么现象?它会溢出,会漏到了别的地方。
一个缓冲区溢出应用程序使用这个溢出的数据将汇编语言代码放到计算机的内存中,通常是产生root权限的地
方。单单的缓冲区溢出,并不会产生安全问题。只有将溢出送到能够以root权限运行命令的区域才行。这样,
一个缓冲区利用程序将能运行的指令放在了有root权限的内存中,从而一旦运行这些指令,就是以root权限控
制了计算机。
所以我们更多的时候把缓冲区溢出指的是一种系统攻击的手段,通过往程序的缓冲区写超出其长度的内容,造
成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。据统计,通过缓冲区
溢出进行的攻击占所有系统攻击总数的80%以上。

世界上第一个缓冲区溢出攻击——著名的Morris蠕虫,发生在十年前,它曾造成了全世界6000多台网络服务器
瘫痪。我这是我所知的最早的缓冲区溢出攻击程序。

记住,造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数!!!
下面举一个最为常见的,也是最简单的溢出。
void function(char *str){
char buffer[16];
strcpy(buffer,str);
}
在这个例子中上面的buffer的长度被限制在16,而strcpy()将直接把str中的内容copy到buffer中。这样只
要str的长度大于16,就会造成buffer的溢出,使程序运行出错。So,我们说这个程序溢出了。

在C语言中,静态变量是分配在数据段中的,动态变量是分配在堆栈段的。缓冲区溢出是利用堆栈段的溢出
的。一个正常的程序在内存中通常分为程序段,数据端和堆栈三部分。程序段里放着程序的机器码和只读数
据,这个段通常是只读,对它的写操作是非法的。数据段放的是程序中的静态数据。动态数据则通过堆栈来存
放。在内存中,它们的位置如下:

  
  /――――――――\  内存低端
  程序段
  ―――――――――
  数据段
  ―――――――――
  堆栈
  \―――――――――/内存高端
堆栈是内存中的一个连续的块。一个叫堆栈指针的寄存器(SP)指向堆栈的栈顶。堆栈的底部是一个固定地
址。堆栈有一个特点就是,后进先出。也就是说,后放入的数据第一个取出。它支持两个操作,PUSH和POP。
PUSH是将数据放到栈的顶端,POP是将栈顶的数据取出。

在高级语言中,程序函数调用和函数中的临时变量都用到堆栈。为什么呢?因为在调用一个函数时,我们需要
对当前的操作进行保护,也为了函数执行后,程序可以正确的找到地方继续执行,所以参数的传递和返回值也
用到了堆栈。通常对局部变量的引用是通过给出它们对SP的偏移量来实现的。另外还有一个基址指针(FP,在
Intel芯片中是BP),许多编译器实际上是用它来引用本地变量和参数的。通常,参数的相对FP的偏移是正
的,局部变量是负的。

当程序中发生函数调用时,计算机做如下操作:首先把参数压入堆栈;然后保存指令寄存器(IP)中的内容,做
为返回地址(RET);第三个放入堆栈的是基址寄存器(FP);然后把当前的栈指针(SP)拷贝到FP,做为新的基地
址;最后为本地变量留出一定空间,把SP减去适当的数值。

比如说下面这个程序:
void function(int a, int b, int c){
char buffer1[10];
char buffer2[15];
}
void main(){
function(1,2,3);
}
假设我们在Linux下,用gcc对这段源码进行编译,产生汇编代码输出:
  $ gcc -S -o example1.s example1.c
  看看输出文件中调用函数的那部分:
  pushl $3
  pushl $2
  pushl $1
  call function
  这就将3个参数推入堆栈里了,并调用function()。指令call会将指令指针IP压入堆栈。在返回时,RET
要用到这个保存的IP。在函数中,第一要做的事是进行一些必要的处理。每个函数都必须有这些过程(为了保
护呀,不然就找不到了。):

  
  pushl %ebp
  movl %esp,%ebp
  subl $20,%esp
这几条指令将EBP,基址指针放入堆栈。然后将当前SP拷贝到EBP。然后,为本地变量分配空间,并将它们的大
小从SP里减掉。由于内存分配是以字为单位的,因此,这里的buffer1用了8字节(2个字,一个字4字节)。
Buffer2用了12字节(3个字)。所以这里将ESP减了20。这样,现在,堆栈看起来应该是这样的。


  低端内存 高端内存
   buffer2 buffer1 sfp ret a b c
  < ------ [ ] [ ] [ ] [ ] [ ] [ ] [ ]
  栈顶 栈底
  那是什么导致了溢出呢?缓冲区溢出就是在一个缓冲区里写入过多的数据。要怎么样利用呢?看下面这个
程序:
void function(char *str) {
  char buffer[16];
  
  strcpy(buffer,str);
  }

   void main() {
  char large_string[256];
  int i;
  
  for( i = 0; i < 255; i++)
  large_string = 'A';
  
  function(large_string);
  }

  这个程序是一个经典的缓冲区溢出编码错误。函数将一个字符串不经过边界检查,拷贝到另一内存区域。
当调用函数function()时,堆栈如下:

  
  低内存端 高内存端
buffer sfp ret *str
  < ------ [ ] [ ] [ ] [ ]
  栈顶 栈底
很明显,程序执行的结果是"Segmentation fault (core
dumped)"或类似的出错信息。因为从buffer开始的256个字节都将被*str的内容'A'覆盖,包括sfp,
ret,甚至*str。'A'的十六进值为0x41,所以函数的返回地址变成了0x41414141,
这超出了程序的地址空间,所以出现段错误。可见,缓冲区溢出允许我们改变一个函数的返回地址,在这个例
子中,我们可以通过修改0x41414141来改变程序返回后的入口地址。同样通过这种方式,就可以改变程序的执
行顺序了。

存在象strcpy这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf(),以及在循环内
的getc(),fgetc(),getchar()等。

 


缓冲区溢出技术基础
为了提高大家的技术水平,为了更了解我们讨论的这种技术,为了把这个论坛建成一个更更好的论坛,下面我
为大家推出一系列完整的有关溢出,溢出攻击的文章。让大家更能了解到这个天天说但又不太清楚怎么回事的
东西。我想,看了这个以后大家也不再会问,为什么我用了这个工具,怎么没有用呀什么的问题?
在这里强调一下,想完全看的懂这篇文章,至少需要具备一定的汇编语言,C语言和LINUX的基础。
缓冲区溢出”在英文中可以解释为:buffer overflow,buffer overrun,smash the
stack,trash the stack,scribble the stack, mangle the stack, memory
leak,overrun screw;
我们通常所说的“溢出”指的是缓冲区溢出,(废话,不然要从那里溢出呀!)先解释一下什么是缓冲区——
缓冲区是内存中存放数据的地方,是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。问
题随着动态分配变量而出现。为了不用太多的内存,一个有动态分配变量的程序在程序运行时才决定给他们分
配多少内存。当程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。另一种
说法,就是说程序在动态分配缓冲区放入太多的数据会有什么现象?它会溢出,会漏到了别的地方。

一个缓冲区溢出应用程序使用这个溢出的数据将汇编语言代码放到计算机的内存中,通常是产生root权限的地
方。单单的缓冲区溢出,并不会产生安全问题。只有将溢出送到能够以root权限运行命令的区域才行。这样,
一个缓冲区利用程序将能运行的指令放在了有root权限的内存中,从而一旦运行这些指令,就是以root权限控
制了计算机。

所以我们更多的时候把缓冲区溢出指的是一种系统攻击的手段,通过往程序的缓冲区写超出其长度的内容,造
成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。据统计,通过缓冲区
溢出进行的攻击占所有系统攻击总数的80%以上。

世界上第一个缓冲区溢出攻击——著名的Morris蠕虫,发生在十年前,它曾造成了全世界6000多台网络服务器
瘫痪。我这是我所知的最早的缓冲区溢出攻击程序。

记住,造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数!!!
下面举一个最为常见的,也是最简单的溢出。
void function(char *str){
char buffer[16];
strcpy(buffer,str);
}
在这个例子中上面的buffer的长度被限制在16,而strcpy()将直接把str中的内容copy到buffer中。这样只
要str的长度大于16,就会造成buffer的溢出,使程序运行出错。So,我们说这个程序溢出了。

在C语言中,静态变量是分配在数据段中的,动态变量是分配在堆栈段的。缓冲区溢出是利用堆栈段的溢出
的。一个正常的程序在内存中通常分为程序段,数据端和堆栈三部分。程序段里放着程序的机器码和只读数
据,这个段通常是只读,对它的写操作是非法的。数据段放的是程序中的静态数据。动态数据则通过堆栈来存
放。在内存中,它们的位置如下:

  
  /――――――――\  内存低端
  程序段
  ―――――――――
  数据段
  ―――――――――
  堆栈
  \―――――――――/内存高端
堆栈是内存中的一个连续的块。一个叫堆栈指针的寄存器(SP)指向堆栈的栈顶。堆栈的底部是一个固定地
址。堆栈有一个特点就是,后进先出。也就是说,后放入的数据第一个取出。它支持两个操作,PUSH和POP。
PUSH是将数据放到栈的顶端,POP是将栈顶的数据取出。

在高级语言中,程序函数调用和函数中的临时变量都用到堆栈。为什么呢?因为在调用一个函数时,我们需要
对当前的操作进行保护,也为了函数执行后,程序可以正确的找到地方继续执行,所以参数的传递和返回值也
用到了堆栈。通常对局部变量的引用是通过给出它们对SP的偏移量来实现的。另外还有一个基址指针(FP,在
Intel芯片中是BP),许多编译器实际上是用它来引用本地变量和参数的。通常,参数的相对FP的偏移是正
的,局部变量是负的。

当程序中发生函数调用时,计算机做如下操作:首先把参数压入堆栈;然后保存指令寄存器(IP)中的内容,做
为返回地址(RET);第三个放入堆栈的是基址寄存器(FP);然后把当前的栈指针(SP)拷贝到FP,做为新的基地
址;最后为本地变量留出一定空间,把SP减去适当的数值。

比如说下面这个程序:
void function(int a, int b, int c){
char buffer1[10];
char buffer2[15];
}
void main(){
function(1,2,3);
}
假设我们在Linux下,用gcc对这段源码进行编译,产生汇编代码输出:
  $ gcc -S -o example1.s example1.c
  看看输出文件中调用函数的那部分:
  pushl $3
  pushl $2
  pushl $1
  call function
  这就将3个参数推入堆栈里了,并调用function()。指令call会将指令指针IP压入堆栈。在返回时,RET
要用到这个保存的IP。在函数中,第一要做的事是进行一些必要的处理。每个函数都必须有这些过程(为了保
护呀,不然就找不到了。):

  
  pushl %ebp
  movl %esp,%ebp
  subl $20,%esp
这几条指令将EBP,基址指针放入堆栈。然后将当前SP拷贝到EBP。然后,为本地变量分配空间,并将它们的大
小从SP里减掉。由于内存分配是以字为单位的,因此,这里的buffer1用了8字节(2个字,一个字4字节)。
Buffer2用了12字节(3个字)。所以这里将ESP减了20。这样,现在,堆栈看起来应该是这样的。


  低端内存 高端内存
   buffer2 buffer1 sfp ret a b c
  < ------ [ ] [ ] [ ] [ ] [ ] [ ] [ ]
  栈顶 栈底
  那是什么导致了溢出呢?缓冲区溢出就是在一个缓冲区里写入过多的数据。要怎么样利用呢?看下面这个
程序:
void function(char *str) {
  char buffer[16];
  
  strcpy(buffer,str);
  }

   void main() {
  char large_string[256];
  int i;
  
  for( i = 0; i < 255; i++)
  large_string = 'A';
  
  function(large_string);
  }

  这个程序是一个经典的缓冲区溢出编码错误。函数将一个字符串不经过边界检查,拷贝到另一内存区域。
当调用函数function()时,堆栈如下:

  
  低内存端 高内存端
buffer sfp ret *str
  < ------ [ ] [ ] [ ] [ ]
  栈顶 栈底
很明显,程序执行的结果是"Segmentation fault (core
dumped)"或类似的出错信息。因为从buffer开始的256个字节都将被*str的内容'A'覆盖,包括sfp,
ret,甚至*str。'A'的十六进值为0x41,所以函数的返回地址变成了0x41414141,
这超出了程序的地址空间,所以出现段错误。可见,缓冲区溢出允许我们改变一个函数的返回地址,在这个例
子中,我们可以通过修改0x41414141来改变程序返回后的入口地址。同样通过这种方式,就可以改变程序的执
行顺序了。

存在象strcpy这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf(),以及在循环内
的getc(),fgetc(),getchar()等。

TOP

网管常用的网络命令

如果你玩过路由器的话,就知道路由器里面那些很好玩的命令缩写。
例如,"sh int" 的意思是 "show interface"。
现在 Windows 2000 也有了类似界面的工具,叫做 netsh。

我们在 Windows 2000 的 cmd shell 下,输入 netsh
就出来:netsh> 提示符,
输入 int ip 就显示:
interface ip>
然后输入 dump ,我们就可以看到当前系统的网络配置:

# ----------------------------------
# Interface IP Configuration
# ----------------------------------
pushd interface ip


# Interface IP Configuration for "Local Area Connection"

set address name = "Local Area Connection" source = static addr = 192.168.1.168
mask = 255.255.255.0
add address name = "Local Area Connection" addr = 192.1.1.111 mask = 255.255.255.0
set address name = "Local Area Connection" gateway = 192.168.1.100 gwmetric = 1
set dns name = "Local Area Connection" source = static addr = 202.96.209.5
set wins name = "Local Area Connection" source = static addr = none


popd
# End of interface IP configuration

上面介绍的是通过交互方式操作的一种办法。
我们可以直接输入命令:
"netsh interface ip add address "Local Area Connection" 10.0.0.2
255.0.0.0"
来添加 IP 地址。

如果不知道语法,不要紧的哦!
在提示符下,输入 ? 就可以找到答案了。方便不方便啊?
原来微软的东西里面,也有那么一些让人喜欢的玩意儿。可惜,之至者甚少啊!


Windows网络命令行程序
这部分包括:

使用 ipconfig /all 查看配置
使用 ipconfig /renew 刷新配置
使用 ipconfig 管理 DNS 和 DHCP 类别 ID
使用 Ping 测试连接
使用 Arp 解决硬件地址问题
使用 nbtstat 解决 NetBIOS 名称问题
使用 netstat 显示连接统计
使用 tracert 跟踪网络连接
使用 pathping 测试路由器
使用 ipconfig /all 查看配置
发现和解决 TCP/IP 网络问题时,先检查出现问题的计算机上的 TCP/IP 配置。可以
使用 ipconfig 命令获得主机配置信息,包括 IP 地址、子网掩码和默认网关。

注意

对于 Windows 95 和 Windows 98 的客户机,请使用 winipcfg 命令而不是 ipconfi
g 命令。
使用带 /all 选项的 ipconfig 命令时,将给出所有接口的详细配置报告,包括任何
已配置的串行端口。使用 ipconfig /all,可以将命令输出重定向到某个文件,并将
输出粘贴到其他文档中。也可以用该输出确认网络上每台计算机的 TCP/IP 配置,或
者进一步调查 TCP/IP 网络问题。

例如,如果计算机配置的 IP 地址与现有的 IP 地址重复,则子网掩码显示为 0.0.0
.0。

下面的范例是 ipconfig /all 命令输出,该计算机配置成使用 DHCP 服务器动态配置
TCP/IP,并使用 WINS 和 DNS 服务器解析名称。

Windows 2000 IP Configuration

Node Type.. . . . . . . . : Hybrid
IP Routing Enabled.. . . . : No
WINS Proxy Enabled.. . . . : No

Ethernet adapter Local Area Connection:

Host Name.. . . . . . . . : corp1.microsoft.com
DNS Servers . . . . . . . : 10.1.0.200
Description. . . . . . . : 3Com 3C90x Ethernet Adapter
Physical Address. . . . . : 00-60-08-3E-46-07
DHCP Enabled.. . . . . . . : Yes
Autoconfiguration Enabled.: Yes
IP Address. . . . . . . . . : 192.168.0.112
Subnet Mask. . . . . . . . : 255.255.0.0
Default Gateway. . . . . . : 192.168.0.1
DHCP Server. . . . . . . . : 10.1.0.50
Primary WINS Server. . . . : 10.1.0.101
Secondary WINS Server. . . : 10.1.0.102
Lease Obtained.. . . . . . : Wednesday, September 02, 1998 10:32:13 AM
Lease Expires.. . . . . . : Friday, September 18, 1998 10:32:13 AM


如果 TCP/IP 配置没有问题,下一步测试能够连接到 TCP/IP 网络上的其他主机。

使用 ipconfig /renew 刷新配置
解决 TCP/IP 网络问题时,先检查遇到问题的计算机上的 TCP/IP 配置。如果计算机
启用 DHCP 并使用 DHCP 服务器获得配置,请使用 ipconfig /renew 命令开始刷新租
约。

使用 ipconfig /renew 时,使用 DHCP 的计算机上的所有网卡(除了那些手动配置的
适配器)都尽量连接到 DHCP 服务器,更新现有配置或者获得新配置。

也可以使用带 /release 选项的 ipconfig 命令立即释放主机的当前 DHCP 配置。有
关 DHCP 和租用过程的详细信息,请参阅客户机如何获得配置。

注意

对于启用 DHCP 的 Windows 95 和 Windows 98 客户,请使用 winipcfg 命令的 rel
ease 和 renew 选项,而不是 ipconfig /release 和 ipconfig /renew 命令,手动
释放或更新客户的 IP 配置租约。
使用 ipconfig 管理 DNS 和 DHCP 类别 ID
也可以使用 ipconfig 命令:

显示或重置 DNS 缓存。
详细信息,请参阅使用 ipconfig 查看或重置客户解析程序缓存。

刷新已注册的 DNS 名称。
详细信息,请参阅使用 ipconfig 更新 DNS 客户注册。

显示适配器的 DHCP 类别 ID。
详细信息,请参阅显示客户机上的 DHCP 类别 ID 信息。

设置适配器的 DHCP 类别 ID。
详细信息,请参阅设置客户机上的 DHCP 类别 ID 信息。

使用 Ping 测试连接
Ping 命令有助于验证 IP 级的连通性。发现和解决问题时,可以使用 Ping 向目标主
机名或 IP 地址发送 ICMP 回应请求。需要验证主机能否连接到 TCP/IP 网络和网络
资源时,请使用 Ping。也可以使用 Ping 隔离网络硬件问题和不兼容配置。

通常最好先用 Ping 命令验证本地计算机和网络主机之间的路由是否存在,以及要连
接的网络主机的 IP 地址。Ping 目标主机的 IP 地址看它是否响应,如下:

ping IP_address

使用 Ping 时应该执行以下步骤:

Ping 环回地址验证是否在本地计算机上安装 TCP/IP 以及配置是否正确。
ping 127.0.0.1

Ping 本地计算机的 IP 地址验证是否正确地添加到网络。
ping IP_address_of_local_host

Ping 默认网关的 IP 地址验证默认网关是否运行以及能否与本地网络上的本地主机通
讯。
ping IP_address_of_default_gateway

Ping 远程主机的 IP 地址验证能否通过路由器通讯。
ping IP_address_of_remote_host

Ping 命令用 Windows 套接字样式的名称解析将计算机名解析成 IP 地址,所以如果
用地址成功,但是用名称 Ping 失败,则问题出在地址或名称解析上,而不是网络连
通性的问题。详细信息,请参阅使用 Arp 解决硬件地址问题。

如果在任何点上都无法成功地使用 Ping,请确认:

安装和配置 TCP/IP 之后重新启动计算机。
“Internet 协议 (TCP/IP) 属性”对话框“常规”选项卡上的本地计算机的 IP 地址
有效而且正确。
启用 IP 路由,并且路由器之间的链路是可用的。
您可以使用 Ping 命令的不同选项来指定要使用的数据包大小、要发送多少数据包、
是否记录用过的路由、要使用的生存时间 (TTL) 值以及是否设置“不分段”标志。可
以键入 ping -? 查看这些选项。

下例说明如何向 IP 地址 172.16.48.10 发送两个 Ping,每个都是 1,450 字节:

C:\>ping -n 2 -l 1450 172.16.48.10
Pinging 172.16.48.10 with 1450 bytes of data:

Reply from 172.16.48.10:bytes=1450 time<10ms TTL=32
Reply from 172.16.48.10:bytes=1450 time<10ms TTL=32

Ping statistics for 157.59.8.1:
Packets:Sent = 2, Received = 2, Lost = 0 (0% loss),
Approximate roundtrip times in milli-seconds:
Minimum = 0ms, Maximum = 10ms, Average = 2ms
默认情况下,在显示“请求超时”之前,Ping 等待 1,000 毫秒(1 秒)的时间让每个响应返回。如果通过 Ping 探测的远程系统经过长时间延迟的链路,如卫星链路,则响应可能会花更长的时间才能返回。可以使用 -w (等待)选项指定更长时间的超时。

使用 Arp 解决硬件地址问题
“地址解析协议 (ARP)”允许主机查找同一物理网络上的主机的媒体访问控制地址,如果给出后者的 IP 地址。为使 ARP 更加有效,每个计算机缓存 IP 到媒体访问控制地址映射消除重复的 ARP 广播请求。

可以使用 arp 命令查看和修改本地计算机上的 ARP 表项。arp 命令对于查看 ARP 缓存和解决地址解析问题非常有用。

详细信息,请参阅查看“地址解析协议 (ARP)”缓存和添加静态 ARP 缓存项目。

使用 nbtstat 解决 NetBIOS 名称问题
TCP/IP 上的 NetBIOS (NetBT) 将 NetBIOS 名称解析成 IP 地址。TCP/IP 为 NetBIOS 名称解析提供了很多选项,包括本地缓存搜索、WINS 服务器查询、广播、DNS 服务器查询以及 Lmhosts 和主机文件搜索。

Nbtstat 是解决 NetBIOS 名称解析问题的有用工具。可以使用nbtstat 命令删除或更正预加载的项目:

nbtstat -n 显示由服务器或重定向器之类的程序在系统上本地注册的名称。
nbtstat -c 显示 NetBIOS 名称缓存,包含其他计算机的名称对地址映射。
nbtstat -R 清除名称缓存,然后从 Lmhosts 文件重新加载。
nbtstat -RR 释放在 WINS 服务器上注册的 NetBIOS 名称,然后刷新它们的注册。
nbtstat -a name 对 name 指定的计算机执行 NetBIOS 适配器状态命令。适配器状态命令将返回计算机的本地 NetBIOS 名称表,以及适配器的媒体访问控制地址。
nbtstat -S 列出当前的 NetBIOS 会话及其状态(包括统计),如下例所示:
NetBIOS connection table

Local name State In/out Remote Host Input Output
------------------------------------------------------------------
CORP1 <00> Connected Out CORPSUP1<20> 6MB 5MB
CORP1 <00> Connected Out CORPPRINT<20> 108KB 116KB
CORP1 <00> Connected Out CORPSRC1<20> 299KB 19KB
CORP1 <00> Connected Out CORPEMAIL1<20> 324KB 19KB
CORP1 <03> Listening
使用 netstat 显示连接统计
可以使用 netstat 命令显示协议统计信息和当前的 TCP/IP 连接。netstat -a 命令将显示所有连接,而 netstat -r 显示路由表和活动连接。netstat -e 命令将显示Ethernet 统计信息,而 netstat -s 显示每个协议的统计信息。如果使用 netstat -n,则不能将地址和端口号转换成名称。下面是 netstat 的输出示例:

C:\>netstat -e
Interface Statistics

Received Sent
Bytes 3995837940 47224622
Unicast packets 120099 131015
Non-unicast packets 7579544 3823
Discards 0 0
Errors 0 0
Unknown protocols 363054211

C:\>netstat -a

Active Connections

Proto Local Address Foreign Address State
TCP CORP1:1572 172.16.48.10:nbsession ESTABLISHED
TCP CORP1:1589 172.16.48.10:nbsession ESTABLISHED
TCP CORP1:1606 172.16.105.245:nbsession ESTABLISHED
TCP CORP1:1632 172.16.48.213:nbsession ESTABLISHED
TCP CORP1:1659 172.16.48.169:nbsession ESTABLISHED
TCP CORP1:1714 172.16.48.203:nbsession ESTABLISHED
TCP CORP1:1719 172.16.48.36:nbsession ESTABLISHED
TCP CORP1:1241 172.16.48.101:nbsession ESTABLISHED
UDP CORP1:1025 *:*
UDP CORP1:snmp *:*
UDP CORP1:nbname *:*
UDP CORP1:nbdatagram *:*
UDP CORP1:nbname *:*
UDP CORP1:nbdatagram *:*

C:\>netstat -s
IP Statistics

Packets Received = 5378528
Received Header Errors = 738854
Received Address Errors = 23150
Datagrams Forwarded = 0
Unknown Protocols Received = 0
Received Packets Discarded = 0
Received Packets Delivered = 4616524
Output Requests = 132702
Routing Discards = 157
Discarded Output Packets = 0
Output Packet No Route = 0
Reassembly Required = 0
Reassembly Successful = 0
Reassembly Failures =
Datagrams Successfully Fragmented = 0
Datagrams Failing Fragmentation = 0
Fragments Created = 0

ICMP Statistics
Received Sent
Messages 693 4
Errors 0 0
Destination Unreachable 685 0
Time Exceeded 0 0
Parameter Problems 0 0
Source Quenches 0 0
Redirects 0 0
Echoes 4 0
Echo Replies 0 4
Timestamps 0 0
Timestamp Replies 0 0
Address Masks 0 0
Address Mask Replies 0 0

TCP Statistics

Active Opens = 597
Passive Opens = 135
Failed Connection Attempts = 107
Reset Connections = 91
Current Connections = 8
Segments Received = 106770
Segments Sent = 118431
Segments Retransmitted = 461

UDP Statistics

Datagrams Received = 4157136
No Ports = 351928
Receive Errors = 2
Datagrams Sent = 13809

使用 tracert 跟踪网络连接
Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。

Tracert 工作原理
通过向目标发送不同 IP 生存时间 (TTL) 值的“Internet 控制消息协议 (ICMP)”回应数据包,Tracert 诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP 已超时”的消息发回源系统。

Tracert 先发送 TTL 为 1 的回应数据包,并在随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL 过期的数据包,这在Tracert 实用程序中看不到。

Tracert 命令按顺序打印出返回“ICMP 已超时”消息的路径中的近端路由器接口列表。如果使用 -d 选项,则 Tracert 实用程序不在每个 IP 地址上查询 DNS。

在下例中,数据包必须通过两个路由器(10.0.0.1 和 192.168.0.1)才能到达主机
172.16.0.99。主机的默认网关是 10.0.0.1,192.168.0.0 网络上的路由器的 IP 地
址是 192.168.0.1。

C:\>tracert 172.16.0.99 -d
Tracing route to 172.16.0.99 over a maximum of 30 hops
1 2s 3s 2s 10,0.0,1
2 75 ms 83 ms 88 ms 192.168.0.1
3 73 ms 79 ms 93 ms 172.16.0.99
Trace complete.
用 tracert 解决问题
可以使用 tracert 命令确定数据包在网络上的停止位置。下例中,默认网关确定 19
2.168.10.99 主机没有有效路径。这可能是路由器配置的问题,或者是 192.168.10.
0 网络不存在(错误的 IP 地址)。

C:\>tracert 192.168.10.99

Tracing route to 192.168.10.99 over a maximum of 30 hops

1 10.0.0.1 reportsestination net unreachable.

Trace complete.

Tracert 实用程序对于解决大网络问题非常有用,此时可以采取几条路径到达同一个
点。

Tracert 命令行选项
Tracert 命令支持多种选项,如下表所示。

tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name

选项 描述
-d 指定不将 IP 地址解析到主机名称。
-h maximum_hops 指定跃点数以跟踪到称为 target_name 的主机的路由。
-j host-list 指定 Tracert 实用程序数据包所采用路径中的路由器接口列表。
-w timeout 等待 timeout 为每次回复所指定的毫秒数。
target_name 目标主机的名称或 IP 地址。

详细信息,请参阅使用 tracert 命令跟踪路径。

使用 pathping 测试路由器
pathping 命令是一个路由跟踪工具,它将 ping 和 tracert 命令的功能和这两个工具所不提供的其他信息结合起来。pathping 命令在一段时间内将数据包发送到到达最终目标的路径上的每个路由器,然后基于数据包的计算机结果从每个跃点返回。由于命令显示数据包在任何给定路由器或链接上丢失的程度,因此可以很容易地确定可能导致网络问题的路由器或链接。某些选项是可用的,如下表所示。

选项 名称 功能
-n Hostnames 不将地址解析成主机名。
-h Maximum hops 搜索目标的最大跃点数。
-g Host-list 沿着路由列表释放源路由。
-p Period 在 ping 之间等待的毫秒数。
-q Num_queries 每个跃点的查询数。
-w Time-out 为每次回复所等待的毫秒数。
-T Layer 2 tag 将第 2 层优先级标记(例如,对于 IEEE 802.1p)连接到数据包并将它发送到路径中的每个网络设备。这有助于标识没有正确配置第 2 层优先级的网络设备。-T 开关用于测试服务质量 (QoS) 连通性。
-R RSVP isbase Che检查以确定路径中的每个路由器是否支持“资源保留协议 (RSVP)”,此协议允许主机为数据流保留一定量的带宽。 -R 开关用于测试服务质量 (QoS) 连通性。

默认的跃点数是 30,并且超时前的默认等待时间是 3 秒。默认时间是 250 毫秒,并且沿着路径对每个路由器进行查询的次数是 100。

以下是典型的 pathping 报告。跃点列表后所编辑的统计信息表明在每个独立路由器上数据包丢失的情况。


D:\>pathping -n msw

Tracing route to msw [7.54.1.196]
over a maximum of 30 hops:
0 172.16.87.35
1 172.16.87.218
2 192.68.52.1
3 192.68.80.1
4 7.54.247.14
5 7.54.1.196

Computing statistics for 125 seconds...
Source to Here This Node/Link
Hop RTT Lost/Sent = Pct Lost/Sent = Pct Address
0 172.16.87.35
0/ 100 = 0% |
1 41ms 0/ 100 = 0% 0/ 100 = 0% 172.16.87.218
13/ 100 = 13% |
2 22ms 16/ 100 = 16% 3/ 100 = 3% 192.68.52.1
0/ 100 = 0% |
3 24ms 13/ 100 = 13% 0/ 100 = 0% 192.68.80.1
0/ 100 = 0% |
4 21ms 14/ 100 = 14% 1/ 100 = 1% 10.54.247.14
0/ 100 = 0% |
5 24ms 13/ 100 = 13% 0/ 100 = 0% 10.54.1.196

Trace complete.

当运行 pathping 时,在测试问题时首先查看路由的结果。此路径与 tracert 命令所显示的路径相同。然后 pathping 命令对下一个 125 毫秒显示忙消息(此时间根据跃点计数变化)。在此期间,pathping 从以前列出的所有路由器和它们之间的链接之间收集信息。在此期间结束时,它显示测试结果。

最右边的两栏 This Node/Link Lost/Sent=Pct 和 Address 包含的信息最有用。172.16.87.218(跃点 1)和 192.68.52.1(跃点 2)丢失 13% 的数据包。 所有其他链接工作正常。在跃点 2 和 4 中的路由器也丢失寻址到它们的数据包(如 This Node /Link 栏中所示),但是该丢失不会影响转发的路径。

对链接显示的丢失率(在最右边的栏中标记为 |)表明沿路径转发丢失的数据包。该丢失表明链接阻塞。对路由器显示的丢失率(通过最右边栏中的 IP 地址显示)表明这些路由器的 CPU 可能超负荷运行。这些阻塞的路由器可能也是端对端问题的一个因素,尤其是在软件路由器转发数据包时。

TOP

网络里的常用dos命令详细介绍

网络命令之:netstat命令

这是一个观察网络连接状态的实用工具。

它能检验IP的当前连接状态,在断定你的基本级通信正在进行后,就要验证系统上的服务。这个服务包括检查正在收听输入的通信量和/或验证你正在创建一个与远程站点的会话,它可以很轻松地做到这一点。网上也可以看到很多如X-netstat之类的工具,是WIN界面的,更加直观而已,并没有多什么功能,这个命令的具体用法如下:

NETSTAT [-a] [-e] [-n] [-s] [-p proto] [-r] [interval]

-A 显示任何关联的协议控制块的地址。主要用于调试
-a 显示所有套接字的状态。在一般情况下不显示与服务器进程相关联的套接字
-i 显示自动配置接口的状态。那些在系统初始引导后配置的接口状态不在输出之列
-m 打印网络存储器的使用情况
-n 打印实际地址,而不是对地址的解释或者显示主机,网络名之类的符号
-r 打印路由选择表
-f address -family对于给出名字的地址簇打印统计数字和控制块信息。到目前为止,唯一支持的地址簇是inet
-I interface 只打印给出名字的接口状态
-p protocol-name 只打印给出名字的协议的统计数字和协议控制块信息
-s 打印每个协议的统计数字
-t 在输出显示中用时间信息代替队列长度信息。

网络命令之:PING命令



这是TCP/IP协议中最有用的命令之一
它给另一个系统发送一系列的数据包,该系统本身又发回一个响应,这条实用程序对查找远程主机很有用,它返回的结果表示是否能到达主机,宿主机发送一个返回数据包需要多长时间。
Usage: 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

Options:
-t Ping the specifed host until interrupted.(除非人为中止,否则一直ping下去)
-a Resolve addresses to hostnames.(把IP转为主机名)
-n count Number of echo requests to send.(响应请求的数量)
-l size Send buffer size.(封包的大小)
-f Set Don't Fragment flag in packet.(信息包中无碎片)
-i TTL Time To Live.(时间)
-v TOS Type Of Service.(服务类型)
-r count Record route for count hops.
-s count Timestamp for count hops.
-j host-list Loose source route along host-list.
-k host-list Strict source route along host-list.(较严格的……唉,怎么译好……算了,放着吧)
-w timeout Timeout in milliseconds to wait for each reply.(timeout的时间)
比如大家可能都知道的一个命令 # ping -f -s 65000 ***.***.***.***或者前阶段大家所谓ping死霉国佬时所用的命令(当然这样只会造成我方自己的网络阻塞)。
其实这个命令主要是用来看对方应答的速度,如果怎么ping 得到的结果都是request time out。那恐怕你根本就不用你去找这台主机了,它不在你的射程之内。


网络命令之:net命令

转自INTERNET

许多 Windows NT 网络命令以 net 开始。这些 net 命令有一些公共属性:
通过键入 net /? 可查阅所有可用的 net 命令。
通过键入 net help 命令可在命令行中获得 net 命令的语法帮助。例如,要得到 net acco
unts 命令的帮助,请键入 net help accounts。
所有 net 命令接受选项 / yes 和 /no(可缩写为 / y 和 /n )。/ y 对命令产生的任何交
互提示自动回答“是”,/n 回答“否”。例如,net stop server 通常提示确认是否根据服
务器服务结束所有服务,net stop server /y 自动回答“是”并关闭服务器服务。

Net Accounts

更新用户帐号数据库、更改密码及所有帐号的登录要求。必须要在更改帐号参数的计算机上
运行网络登录服务。
net accounts [/forcelogoff:{minutes | no}] [/minpwlen:length] [/maxpwage:{days |
unlimited}] [/minpwage:days] [/uniquepw:number] [/domain]
net accounts [/sync] [/domain]
参数

键入不带参数的 net accounts,将显示当前密码设置、登录时限及域信息。
/forcelogoff:{minutes | no}
设置当用户帐号或有效登录时间过期时,结束用户和服务器会话前的等待时间。no 选项禁止
强行注销。该参数的默认设置为 no。
指定 /forcelogoff:minutes 之后,Windows NT 在其强制用户退出网络 minutes 分钟之前
,将给用户发出警报。如果还有打开的文件,Windows NT 将警告用户。如果 minutes 小于
两分钟,Windows NT 警告用户立即从网络注销。
/minpwlen:length
设置用户帐号密码的最少字符数。允许范围是 0-14,默认值为 6。
/maxpwage:{days | unlimited}
设置用户帐号密码有效的最大天数。unlimited 不设置最大天数。/maxpwage 选项的天数必
须大于 /minpwage。允许范围是 1-49,710 天 (unlimited)。默认值为 90 天。
/minpwage:days
设置用户必须保持原密码的最小天数。 0 值不设置最小时间。允许范围是 0-49,710 天,默
认值为 0 天。
/uniquepw:number
要求用户更改密码时,必须在经过 number 次后,才能重复使用与之相同的密码。允许范围
是 0-8。默认值为 5。
/domain
在当前域的主域控制器上执行该操作。否则只在本地计算机执行操作。
该参数仅用于 Windows NT Server 域中的 Windows NT Workstation 计算机,Windows NT
Server 计算机默认为在主域控制器执行操作。
/sync
当用于主域控制器时,该命令使域中所有备份域控制器同步;当用于备份域控制器时,该命
令仅使该备份域控制器与主域控制器同步。该命令仅适用于 Windows NT Server 域成员的计
算机。

Net Computer

从域数据库中添加或删除计算机。该命令仅在运行 Windows NT Server 的计算机上可用。
net computer \computername {/add | /del}
参数
\computername
指定要添加到域或从域中删除的计算机。
/add
将指定计算机添加到域。
/del
将指定计算机从域中删除。

Net Config

显示当前运行的可配置服务,或显示并更改某项服务的设置。
net config [service [options]]
参数

键入不带参数的 net config 将显示可配置服务的列表。
service
通过 net config 命令进行配置的服务(server 或 workstation)。
options
服务的特定选项。完整语法请参阅 net config server 或 net config workstation。

Net Config Server

运行服务时显示或更改服务器的服务设置。
net config server [/autodisconnect:time] [/srvcomment:"text "] [/hidden:{yes | n
o}]
参数

键入不带参数的 net config server,将显示服务器服务的当前配置。
/autodisconnect:time
设置断开前用户会话闲置的最大时间值。可以指定 -1,表示永不断开连接。允许范围是 -1
-65535 分钟,默认值是 15 分钟。
/srvcomment:"text "
为服务器添加注释,可以通过 net view 命令在屏幕上显示所加注释。注释最多可达 48 个
字符,文字要用引号引住。
/hidden:{yes | no}
指定服务器的计算机名是否出现在服务器列表中。请注意隐含某个服务器并不改变该服务器
的权限。默认为 no。

Net Config Workstation

服务运行时,显示或更改工作站各项服务的设置。
net config workstation [/charcount:bytes] [/chartime:msec] [/charwaitc]
参数

键入不带参数的 net config workstation 将显示本地计算机的当前配置。
/charcount:bytes
指定 Windows NT 在将数据发送到通讯设备之前收集的数据量。如果同时设置 /chartime:m
sec 参数,Windows NT 按首先满足条件的选项运行。允许范围是 0-65535 字节,默认值是
16 字节。
/chartime:msec
指定 Windows NT 在将数据发送到通讯设备之前收集数据的时间。如果同时设置 /charcoun
t:bytes 参数,Windows NT 按首先满足条件的选项运行。允许范围是 0-65535000 毫秒,默
认值是 250 毫秒。
/charwaitc
设置 Windows NT 等待通讯设备变为可用的时间。允许的范围是 0-65535 秒,默认值是 36
00 秒。

Net Continue

重新激活挂起的服务。
net continue service
参数
service
能够继续运行的服务,包括: file server for macintosh(该服务仅限于 Windows NT Se
rver), ftp publishing service, lpdsvc, net logon, network dde,network dde dsdm
,nt lm security support provider,remoteboot(该服务仅限于 Windows NT Server),
remote access server, schedule,server,simple tcp/ip services 及 workstation 。


Net File

显示某服务器上所有打开的共享文件名及锁定文件数。该命令也可以关闭个别文件并取消文
件锁定。
net file [id [/close]]
参数

键入不带参数的 net file 可获得服务器上打开文件的列表。
id
文件标识号。
/close
关闭打开的文件并释放锁定记录。请从共享文件的服务器中键入该命令。

Net Group

在 Windows NT Server 域中添加、显示或更改全局组。该命令仅在 Windows NT Server 域
中可用。
net group [groupname [/comment:"text "]] [/domain]
net group groupname {/add [/comment:"text "] | /delete} [/domain]
net group groupname username [ ...] {/add | /delete} [/domain]
参数

键入不带参数的 net group 可以显示服务器名称及服务器的组名称。
groupname
要添加、扩展或删除的组。仅提供某个组名便可查看组中的用户列表。
/comment:"text "
为新建组或现有组添加注释。注释最多可以是 48 个字符,并用引号将注释文字引住。
/domain
在当前域的主域控制器中执行该操作,否则在本地计算机上执行操作。
该参数仅用于作为 Windows NT Server 域成员的 Windows NT Workstation 计算机。Windo
ws NT Server 计算机默认为在主域控制器中操作。
username[ ...]
列表显示要添加到组或从组中删除的一个或多个用户。使用空格分隔多个用户名称项。
/add
添加组或在组中添加用户名。必须使用该命令为添加到组中的用户建立帐号。
/delete
删除组或从组中删除用户名。

Net Help

提供网络命令列表及帮助主题,或提供指定命令或主题的帮助。可用网络命令列于 N 下面的
“命令参考”中“命令”窗口内。
net help [command]
net command {/help | /?}
参数

键入不带参数的 net help 显示能够获得帮助的命令列表和帮助主题。
command
需要其帮助的命令,不要将 net 作为 command 的一部分。
/help
提供显示帮助文本方式选择。
/?
显示命令的正确语法。

Net Helpmsg

提供 Windows NT 错误信息的帮助。
net helpmsg message#
参数
message#
需要其帮助的 Windows NT 消息的四位代码。

Net Localgroup

添加、显示或更改本地组。
net localgroup [groupname [/comment:"text "]] [/domain]
net localgroup groupname {/add [/comment:"text "] | /delete} [/domain]
net localgroup groupname name [ ...] {/add | /delete} [/domain]
参数

键入不带参数的 net localgroup 将显示服务器名称和计算机的本地组名称。
groupname
要添加、扩充或删除的本地组名称。只提供 groupname 即可查看用户列表或本地组中的全局
组。
/comment: "text "
为新建或现有组添加注释。注释文字的最大长度是 48 个字符,并用引号引住。
/domain
在当前域的主域控制器中执行操作,否则仅在本地计算机上执行操作。
该参数仅应用于 Windows NT Server 域中的 Windows NT Workstation 计算机。Windows N
T Server 计算机默认为在主域控制器中操作。
name [ ...]
列出要添加到本地组或从本地组中删除的一个或多个用户名或组名,多个用户名或组名之间
以空格分隔。可以是本地用户、其他域用户或全局组,但不能是其他本地组。如果是其他域
的用户,要在用户名前加域名(例如,SALESRALPHR)。
/add
将全局组名或用户名添加到本地组中。在使用该命令将用户或全局组添加到本地组之前,必
须为其建立帐号。
/delete
从本地组中删除组名或用户名。

Net Name

添加或删除消息名(有时也称别名),或显示计算机接收消息的名称列表。要使用 net nam
e 命令,计算机中必须运行信使服务。
net name [name [/add | /delete]]
参数

键入不带参数的 net name 将列出当前使用的名称。
name
指定接收消息的名称。名称最多为 15 个字符。
/add
将名称添加到计算机中。 /add 是可选项,键入 net name name 与键入 net name name /a
dd 相同。
/delete
从计算机中删除名称。

Net Pause

暂停正在运行的服务。
net pause service
参数
service
指下列服务: file server for macintosh(仅限于 Windows NT Server)、ftp publishi
ng service、lpdsvc、net logon、network dde、network dde dsdm、nt lm security sup
port provider、remoteboot(仅限于 Windows NT Server)、remote access server、sch
edule、server、simple tcp/ip services 或 workstation 。

Net Print

显示或控制打印作业及打印队列。
net print \computername sharename
net print [\computername ] job# [/hold | /release | /delete]
参数
computername
共享打印机队列的计算机名。
sharename
打印队列名称。当包含 computername 与 sharename 时,使用反斜杠 () 将它们分开。
job#
在打印机队列中分配给打印作业的标识号。有一个或多个打印机队列的计算机为每个打印作
业分配唯一标识号。如果某个作业号用于共享打印机队列中,则不能指定给其他作业,也不
能分配给其他打印机队列中的作业。
/hold
使用 job# 时,在打印机队列中使打印作业等待。打印作业停留在打印机队列中,并且其他
打印作业只能等到释放该作业之后才能进入。
/release
释放保留的打印作业。
/delete
从打印机队列中删除打印作业。

Net Send

向网络的其他用户、计算机或通信名发送消息。要接收消息必须运行信使服务。
net send {name | * | /domain[:name] | /users} message
参数
name
要接收发送消息的用户名、计算机名或通信名。如果计算机名包含空字符,则要将其用引号
(" ") 引住。
*
将消息发送到组中所有名称。
/domain[:name]
将消息发送到计算机域中的所有名称。如果指定 name,则消息将发送到指定域或组中的所有
名称。
/users
将消息发送到与服务器连接的所有用户。
message
作为消息发送的文本。

Net Session

列出或断开本地计算机和与之连接的客户端的会话。
net session [\computername] [/delete]
参数

键入不带参数的 net session 可以显示所有与本地计算机的会话的信息。
\computername
标识要列出或断开会话的计算机。
/delete
结束与 \computername 计算机会话并关闭本次会话期间计算机的所有打开文件。如果省略
\computername 参数,将取消与本地计算机的所有会话。

Net Share

创建、删除或显示共享资源。
net share sharename
net share sharename=drive:path [/users:number | /unlimited] [/remark:"text"]
net share sharename [/users:number | unlimited] [/remark:"text"]
net share {sharename | drive:path} /delete
参数

键入不带参数的 net share 将显示本地计算机上所有共享资源的信息。
sharename
是共享资源的网络名称。键入带 sharename 的 net share 命令,只显示该共享信息。
drive:path
指定共享目录的绝对路径。
/users:number
设置可同时访问共享资源的最大用户数。
/unlimited
不限制同时访问共享资源的用户数。
/remark:"text "
添加关于资源的注释,注释文字用引号引住。
/delete
停止共享资源。

Net Start

启动服务,或显示已启动服务的列表。如果服务名是两个或两个以上的词,如 Net Logon 或
Computer Browser,则必须用引号 (") 引住。.
net start [service]
参数

键入不带参数的 net start 则显示运行服务的列表。
service
包括下列服务: alerter、client service for netware、clipbook server、computer br
owser、dhcp client 、directory replicator 、eventlog 、ftp publishing service 、
lpdsvc、messenger 、net logon 、network dde 、network dde dsdm 、network monitor
ing agent 、nt lm security support provider 、ole 、remote access connection man
ager 、remote access isnsap service 、remote access server 、remote procedure ca
ll (rpc) locator 、remote procedure call (rpc) service 、schedule 、server 、sim
ple tcp/ip services 、snmp、spooler 、tcp/ip netbios helper 、ups 及 workstation

下列服务仅在 Windows NT Server 下可用:file server for macintosh、gateway servic
e for netware、microsoft dhcp server、print server for macintosh、remoteboot、wi
ndows internet name service 。

Net Statistics

显示本地工作站或服务器服务的统计记录。
net statistics [workstation | server]
参数

键入不带参数的 net statistics 将列出其统计信息可用的运行服务。
workstation
显示本地工作站服务的统计信息。
server
显示本地服务器服务的统计信息。

Net Stop

停止 Windows NT 网络服务。
net stop service
参数
service
包括下列服务: alerter(警报)、client service for netware(Netware 客户端服务)
、clipbook server(剪贴簿服务器)、computer browser(计算机浏览器)、directory r
eplicator(目录复制器)、ftp publishing service (ftp )(ftp 发行服务)、lpdsvc、
messenger(信使)、net logon(网络登录)、network dde(网络 dde)、network dde d
sdm(网络 dde dsdm)、network monitor agent(网络监控代理)、nt lm security supp
ort provider(NT LM 安全性支持提供)、ole(对象链接与嵌入)、remote access conne
ction manager(远程访问连接管理器)、remote access isnsap service(远程访问 isns
ap 服务)、remote access server(远程访问服务器)、remote procedure call (rpc) l
ocator(远程过程调用定位器)、remote procedure call (rpc) service(远程过程调用服
务)、schedule(调度)、server(服务器)、simple tcp/ip services(简单 TCP/IP 服
务)、snmp、spooler(后台打印程序)、tcp/ip netbios helper(TCP/IP NETBIOS 辅助工
具)、ups 及 workstation(工作站)。
下列服务仅在 Windows NT Server 中可用: file server for macintosh、gateway servi
ce for netware、microsoft dhcp server、print server for macintosh、remoteboot、w
indows internet name service。

Net Time

使计算机的时钟与另一台计算机或域的时间同步。不带 /set 参数使用时,将显示另一台计
算机或域的时间。
net time [\computername | /domain[:name]] [/set]
参数
\computername
要检查或同步的服务器名。
/domain[:name]
指定要与其时间同步的域。
/set
使本计算机时钟与指定计算机或域的时钟同步。

Net Use

连接计算机或断开计算机与共享资源的连接,或显示计算机的连接信息。该命令也控制永久
网络连接。
net use [devicename | *] [\computernamesharename[volume]] [password | *]] [/user
:[domainname]username] [[/delete] | [/persistent:{yes | no}]]
net use devicename [/home[password | *]] [/delete:{yes | no}]
net use [/persistent:{yes | no}]
参数

键入不带参数的 net use 将列出网络连接。
devicename
指定要连接到的资源名称或要断开的设备名称。有两类设备名:磁盘驱动器(D: 到 Z:)和
打印机(LPT1: 到 LPT3)。若键入星号而不是指定设备名将分配下一个可用设备名。
\computernamesharename
服务器及共享资源的名称。如果计算机名包含空白字符,要用引号 (" ") 将双反斜线及计算
机名引住。计算机名长度可以是 1-15 个字符。
volume
指定服务器上的 NetWare 卷。要连接到 NetWare 服务器,必须安装并运行 NetWare 客户机
服务 (Windows NT Workstation) 或 NetWare 网关服务 (Windows NT Server)。
password
访问共享资源的密码。
*
提示键入密码。在密码提示行中键入密码时,将不显示该密码。
/user
指定进行连接的另外一个用户。
domainname
指定另一个域。例如 net use d: \servershare /user:adminmariel 连接用户 mariel,如
同从 admin 域连接一样。如果省略域,将使用当前登录域。
username
指定登录的用户名。
/home
将用户连接到其宿主目录。
/delete
取消指定网络连接。如果用户以星号指定连接,则取消所有网络连接。
/persistent
控制永久网络连接的使用。默认为上次使用的设置。无设备的连接不是永久的。
yes
保存建立的所有连接,并在下次登录时还原。
no
不保存建立的连接和继发连接,并在下次登录时还原现有连接。使用 /delete 开关项取消永
久连接。

Net User

添加或更改用户帐号或显示用户帐号信息。
net user [username [password | *] [options]] [/domain]
net user username {password | *} /add [options] [/domain]
net user username [/delete] [/domain]
参数

键入不带参数的 net user 将查看计算机上的用户帐号列表。
username
添加、删除、更改或查看用户帐号名。用户帐号名最多可以有 20 个字符。
password
为用户帐号分配或更改密码。密码必须满足在 net accounts 命令 /minpwlen 选项中设置的
最小参数。最多是 14 个字符。
*
提示输入密码。在密码提示行中键入密码时,将不显示该密码。
/domain
在计算机主域的主域控制器中执行操作。
该参数仅在 Windows NT Server 域成员的 Windows NT Workstation 计算机上可用。默认情
况下,Windows NT Server 计算机在主域控制器中执行操作。
注意:在计算机主域的主域控制器发生该动作。它可能不是登录域。
/add
将用户帐号添加到用户帐号数据库。
/delete
从用户帐号数据库中删除用户帐号。
选项如下所示:
/active:{no | yes}
启用或禁止用户帐号。如果不激活用户帐号,用户就不能访问计算机上的资源。默认值是 y
es (激活)。
/comment:"text"
提供用户帐号的注释。该注释最多可以有 48 个字符,文字用引号引住。
/countrycode:nnn
使用操作系统的国家代码以便为用户帮助和错误信息文件提供指定语言文件。0 值表示默认
国家代码。
/expires:{date | never}
如果设置 date,将导致用户帐号过期,never 不对用户帐号设置时间限制。过期日期根据
/countrycode 值可以是下列格式: mm/dd/yy、dd/mm/yy 或 mmm, dd, yy。注意帐号在指定
日期开始时过期。月份可以是数字、全名或三个字母的简拼。年可以是两位或四位数,使用
逗号或斜线(不要用空格) 区分日期的各部分。如果省略 yy ,则使用该日期下一次到来的
年份(根据计算机的时钟)。例如如果在 1994 年 1 月 10 日到 1995 年 1 月 8 日之间输
入下列日期项,那它们相同:jan,9
1/9/95
january,9,1995
1/9
/fullname:"name"
指定用户全名而不是用户名。用引号将名字引住。
/homedir:path
设置用户宿主目录的路径。该路径必须存在。
/homedirreq:{yes | no}
设置是否需要宿主目录。
/passwordchg:{yes | no}
指定用户是否能改变自己的密码。默认值是 yes。
/passwordreq:{yes | no}
指定用户帐号是否需要密码,默认值是 yes。
/profilepath:[path]
设置用户登录配置文件的路径。该路径名指向注册表配置文件。
/scriptpath:path
为用户登录脚本设置路径。Path 不能是绝对路径;
path 是相对于 %systemroot%SYSTEM32REPLIMPORTSCRIPTS 的相对路径:。
/times:{times | all}
指定允许用户使用计算机的时间。times 值表示为 day[-day][, day[-day]] , time[-time
][, time[-time]], 增量限制为一小时。Days 可以是全名或简写(M、T、W、Th、F、Sa、S
u)。Hours 可以是 12 小时制或 24 小时制。对于 12 小时值,使用 AM、PM 或 A.M、P.M
。all 表示用户总可以登录。空值表示用户永远不能登录。用逗号分隔日期和时间,分隔时
间和日期的单位用分号(例如 M,4AM-5PM; T,1PM-3PM)。指定 /times 时不要使用空格。
/usercomment:"text "
让管理员添加或更改帐号的“用户注释”。用引号引住文字。
/workstations:{computername[,...] | *}
列出最多八个用户可以登录到网络的工作站。用逗号分隔列表中的多个项。如果 /workstat
ions 没有列表,或如果列表是星号“*”,则用户可以从任何一台计算机登录。

Net View

显示域列表、计算机列表或指定计算机的共享资源列表。
net view [\computername | /domain[:domainname]]
net view /network:nw [\computername]
参数

键入不带参数的 net view 将显示当前域的计算机列表。
\computername
指定要查看其共享资源的计算机。
/domain[:domainname]
指定要查看其可用计算机的域。如果省略 domainname ,则显示网络的所有域。
/network:nw
显示 NetWare 网络中所有可用的服务器。如果指定计算机名,则显示 NetWare 网络中该计
算机的可用资源。也可以用此开关指定添加到系统中的其他网络。

网络命令之:Telnet命令简介
Telnet用于Internet的远程登录.它可以使用户坐在已上网的电脑键盘前通过网络进入的另一台电脑已上网的电脑,使它们互相连通.这种连通可以发生在同一房间里面的电脑或是在世界各范围内已上网的电脑.习惯上来说,被连通计算机,并且为网络上所有用户提供服务的计算机称之为服务器(Servers),而自己在使用的机器称之为客户机(Customer).一旦连通后,客户机可以享有服务器所提供的一切服务.用户可以运行通常的交互过程(注册进入,执行命令),也可以进入很多的特殊的服务器如寻找图书索引.网上不同的主机提供的各种服务都可以被使用.

使用Telnet的最简单的方法是在命令行键入:
%telnet remote-computer-name(or IP)
这里使用的是UNIX系统的C shell,因为命令的选择是百分号"%".如果使用的是其他的计算机系统(比如:Dos,VAX/VMS,Macintosh)命令,只在细节上有些差异,而在本质上是大同小异的,下面举一个基本的Telnet使用例子:

telnet porky.math.ukans.edu
Trying 129.237.128.11...
Connected to porky.math.ukans.edu.
Escape character is '^]'.
SunOS UNIX(porky)
login:wl
password:xxxxxxx
Last Login: Tue Mar 28 05:35 from ns.bta.net.cn
SunOS Release 4.1.3_U1(SLIPPERY1) #3: Sun Nov 20 23:47:23 CST 1999
No match.
if:Expression syntax.
porky/serv/wl%ls
hello
porky/serv/wl%
porky/serv/wl%cd/
porky/%ls
Mail/ dev/ home/ mnt/ sbin/
usr/
News/ domain/ home1/ net/ serv/
var/
Record/ etc/ kadb* pcfs/ sys@
vmunix*
bin@ export/ lib@ print tmp/
boot gofer/ lost+found/ record tmp_mnt/
porky/%

上述的例子是用Telnet寻找一个叫做porky.math.ukans.edu的远程计算机.在找到这台计算机以后,已上网的拥护的计算机就成为它的一个终端.这时屏幕出现的对话与用户在host上连接的终端一样。用户必须注册进入(login)和注销推出(logout).在login后,可给出任何适合远程系统的命令,因为"porky.math.ukans.edu"面向的是UNIX系统,所有标准的UNIX命令(想ls和pwd)都可以使用.当用户从远程系统退出时,也就从Telnet退出,便可以运行自己的本地系统.实际上,Telnet是一个可以注册进入远程计算机系统的工具.

TOP

网络命令

当你打开浏览器,自由地游弋于浩如烟海的互联网世界之时,是否也沉迷于下载各种实用软件?
其中也许有很大一部分就是网络工具吧!但请你不要忽视你的面前——Windows(包括Win98和NT)
作系统中本来就带有不少的网络实用工具,虽然比较简单,却并不简陋。本着“简单就是美”的原则,
下面就为你展现Windows网络实用工具的丰采……
Ping

??Ping是个使用频率极高的实用程序,用于确定本地主机是否能与另一台主机交换(发送与接收)数据报。
根据返回的信息,你就可以推断TCP/IP参数是否设置得正确以及运行是否正常。
需要注意的是:成功地与另一台主机进行一次或两次数据报交换并不表示TCP/IP配置就是正确的,
你必须执行大量的本地主机与远程主机的数据报交换,才能确信TCP/IP的正确性。

??简单的说,Ping就是一个测试程序,如果Ping运行正确,
你大体上就可以排除网络访问层、网卡、MODEM的输入输出线路、电缆和路由器等存在的故障,
从而减小了问题的范围。但由于可以自定义所发数据报的大小及无休止的高速发送,
Ping也被某些别有用心的人作为DDOS(拒绝服务攻击)的工具,
前段时间Yahoo就是被黑客利用数百台可以高速接入互联网的电脑连续发送大量Ping数据报而瘫痪的。

??按照缺省设置,Windows上运行的Ping命令发送4个ICMP(网间控制报文协议)回送请求,
每个32字节数据,如果一切正常,你应能得到4个回送应答。

??Ping能够以毫秒为单位显示发送回送请求到返回回送应答之间的时间量。如果应答时间短,
表示数据报不必通过太多的路由器或网络连接速度比较快。Ping还能显示TTL(Time To Live存在时间)值,
你可以通过TTL值推算一下数据包已经通过了多少个路由器:
源地点TTL起始值(就是比返回TTL略大的一个2的乘方数)-返回时TTL值。
例如,返回TTL值为119,那么可以推算数据报离开源地址的TTL起始值为128,
而源地点到目标地点要通过9个路由器网段(128-119);如果返回TTL值为246,TTL起始值就是256,
源地点到目标地点要通过9个路由器网段。

通过Ping检测网络故障的典型次序

??正常情况下,当你使用Ping命令来查找问题所在或检验网络运行情况时,你需要使用许多Ping命令,
如果所有都运行正确,你就可以相信基本的连通性和配置参数没有问题;如果某些Ping命令出现运行故障,
它也可以指明到何处去查找问题。下面就给出一个典型的检测次序及对应的可能故障:

ping 127.0.0.1——这个Ping命令被送到本地计算机的IP软件,该命令永不退出该计算机。
如果没有做到这一点,就表示TCP/IP的安装或运行存在某些最基本的问题。

ping 本机IP——这个命令被送到你计算机所配置的IP地址,你的计算机始终都应该对该Ping命令作出应答,
如果没有,则表示本地配置或安装存在问题。出现此问题时,局域网用户请断开网络电缆,
然后重新发送该命令。如果网线断开后本命令正确,则表示另一台计算机可能配置了相同的IP地址。

ping 局域网内其他IP——这个命令应该离开你的计算机,经过网卡及网络电缆到达其他计算机,再返回。
收到回送应答表明本地网络中的网卡和载体运行正确。但如果收到0个回送应答,
那么表示子网掩码(进行子网分割时,将IP地址的网络部分与主机部分分开的代码)
不正确或网卡配置错误或电缆系统有问题。

ping 网关IP——这个命令如果应答正确,表示局域网中的网关路由器正在运行并能够作出应答。

ping 远程IP——如果收到4个应答,表示成功的使用了缺省网关。
对于拨号上网用户则表示能够成功的访问Internet(但不排除ISP的DNS会有问题)。

ping localhost——localhost是个作系统的网络保留名,它是127.0.0.1的别名,
每太计算机都应该能够将该名字转换成该地址。如果没有做到这一带内,
则表示主机文件(/Windows/host)中存在问题。

ping www.yahoo.com——对这个域名执行Ping命令,你的计算机必须先将域名转换成IP地址,
通常是通过DNS服务器 如果这里出现故障,则表示DNS服务器的IP地址配置不正确或DNS服务器有故障
(对于拨号上网用户,某些ISP已经不需要设置DNS服务器了)。
顺便说一句:你也可以利用该命令实现域名对IP地址的转换功能。

??如果上面所列出的所有Ping命令都能正常运行,
那么你对你的计算机进行本地和远程通信的功能基本上就可以放心了。
但是,这些命令的成功并不表示你所有的网络配置都没有问题,例如,
某些子网掩码错误就可能无法用这些方法检测到。

Ping命令的常用参数选项

ping IP -t——连续对IP地址执行Ping命令,直到被用户以Ctrl+C中断。

ping IP -l 2000——指定Ping命令中的数据长度为2000字节,而不是缺省的32字节。

ping IP -n——执行特定次数的Ping命令。

Netstat

??Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,
一般用于检验本机各端口的网络连接情况。

如果你的计算机有时候接受到的数据报会导致出错数据删除或故障,你不必感到奇怪,
TCP/IP可以容许这些类型的错误,并能够自动重发数据报。
但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,
那么你就应该使用Netstat查一查为什么会出现这些情况了。

Netstat的一些常用选项:

netstat -s——本选项能够按照各个协议分别显示其统计数据。如果你的应用程序(如Web浏览器)
运行速度比较慢,或者不能显示Web页之类的数据,那么你就可以用本选项来查看一下所显示的信息。
你需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。

netstat -e——本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、
错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,
也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量)。

netstat -r——本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的 信息。
除了显示有效路由外,还显示当前有效的连接。

netstat -a——本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),
也包括监听连接请求(LISTENING)的那些连接。

netstat -n——显示所有已建立的有效连接。

Netstat的妙用

??经常上网的人一般都使用ICQ的,不知道你有没有被一些讨厌的人骚扰得不敢上线,
想投诉却又不知从和下手?其实,你只要知道对方的IP,就可以向他所属的ISP投诉了。
但怎样才能通过ICQ知道对方的IP呢?如果对方在设置ICQ时选择了不显示IP地址,
那你是无法在信息栏中看到的。其实,你只需要通过Netstat就可以很方便的做到这一点:
当他通过ICQ或其他的工具与你相连时(例如你给他发一条ICQ信息或他给你发一条信息),
你立刻在DOS Prompt下输入netstat -n或netstat -a就可以看到对方上网时所用的IP或ISP域名了。
甚至连所用Port都完全暴露了,如果你想给他一些教训,这些信息已经足够……

IPConfig

??IPConfig实用程序和它的等价图形用户界面——
Windows 95/98中的WinIPCfg可用于显示当前的TCP/IP配置的设置值。
这些信息一般用来检验人工配置的TCP/IP设置是否正确。
但是,如果你的计算机和所在的局域网使用了动态主机配置协议
(Dynamic Host Configuration Protocol,
DHCP——Windows NT下的一种把较少的IP地址分配给较多主机使用的协议,类似于拨号上网的动态IP分配),
这个程序所显示的信息也许更加实用。这时,
IPConfig可以让你了解你的计算机是否成功的租用到一个IP地址,
如果租用到则可以了解它目前分配到的是什么地址。了解计算机当前的IP地址、
子网掩码和缺省网关实际上是进行测试和故障分析的必要项目。

最常用的选项:

ipconfig——当使用IPConfig时不带任何参数选项,那么它为每个已经配置了的接口显示IP地址、
子网掩码和缺省网关值

ipconfig /all——当使用all选项时,IPConfig能为DNS和WINS服务器显示它已配置且所要使用的附加信息
(如IP地址等),并且显示内置于本地网卡中的物理地址(MAC)。如果IP地址是从DHCP服务器租用的,
IPConfig将显示DHCP服务器的IP地址和租用地址预计失效的日期
(有关DHCP服务器的相关内容请详见其他有关NT服务器的书籍或询问你的网管),
其输出信息见图6的下半部分。

ipconfig /release和ipconfig /renew——这是两个附加选项,
只能在向DHCP服务器租用其IP地址的计算机上起作用。如果你输入ipconfig /release,
那么所有接口的租用IP地址便重新交付给DHCP服务器(归还IP地址)。如果你输入ipconfig /renew,
那么本地计算机便设法与DHCP服务器取得联系,并租用一个IP地址。
请注意,大多数情况下网卡将被重新赋予和以前所赋予的相同的IP地址。

??如果你使用的是Windows 95/98,那么你应该更习惯使用winipcfg而不是ipconfig,
因为它是一个图形用户界面,而且所显示的信息与ipconfig相同,
并且也提供发布和更新动态IP地址的选项 如果你购买了Windows NT Resource Kit(NT资源包),
那么Windows NT也包含了一个图形替代界面,该实用程序的名字是wntipcfg,
和Windows 95/98的winipcfg类似。

ARP(地址转换协议)

??ARP是一个重要的TCP/IP协议,并且用于确定对应IP地址的网卡物理地址。实用arp命令,
你能够查看本地计算机或另一台计算机的ARP高速缓存中的当前内容。此外,使用arp命令,
也可以用人工方式输入静态的网卡物理/IP地址对,
你可能会使用这种方式为缺省网关和本地服务器等常用主机进行这项作,有助于减少网络上的信息量。

??按照缺省设置,ARP高速缓存中的项目是动态的,
每当发送一个指定地点的数据报且高速缓存中不存在当前项目时,ARP便会自动添加该项目。
一旦高速缓存的项目被输入,它们就已经开始走向失效状态。例如,在Windows NT网络中,
如果输入项目后不进一步使用,物理/IP地址对就会在2至10分钟内失效。因此,
如果ARP高速缓存中项目很少或根本没有时,请不要奇怪,通过另一台计算机或路由器的ping命令即可添加。
所以,需要通过arp命令查看高速缓存中的内容时,请最好先ping 此台计算机(不能是本机发送ping命令)。

常用命令选项:

arp -a或arp -g——用于查看高速缓存中的所有项目。-a和-g参数的结果是一样的,
多年来-g一直是UNIX平台上用来显示ARP高速缓存中所有项目的选项,
而Windows用的是arp -a(-a可被视为all,即全部的意思),但它也可以接受比较传统的-g选项。

arp -a IP——如果你有多个网卡,那么使用arp -a加上接口的IP地址,
就可以只显示与该接口相关的ARP缓存项目。

arp -s IP 物理地址——你可以向ARP高速缓存中人工输入一个静态项目。
该项目在计算机引导过程中将保持有效状态,或者在出现错误时,
人工配置的物理地址将自动更新该项目。

arp -d IP——使用本命令能够人工删除一个静态项目。

??


??看到这里,你也许已经有些累了……其实对于一般用户来说也已经足够——
你可以用ipconfig和ping命令来查看自己的网络配置并判断是否正确、
可以用netstat查看别人与你所建立的连接并找出ICQ使用者所隐藏的IP信息、
可以用arp查看网卡的MAC地址——这些已足已让你丢掉菜鸟的头衔。如果你并不满足,
那就“硬着头皮”(下面的内容可能有些枯燥)继续Follow me……

Tracert

??当数据报从你的计算机经过多个网关传送到目的地时,Tracert命令可以用来跟踪数据报使用的路由
(路径)。该实用程序跟踪的路径是源计算机到目的地的一条路径,不能保证或认为数据报总遵循这个路径。
如果你的配置使用DNS,那么你常常会从所产生的应答中得到城市、地址和常见通信公司的名字。
Tracert是一个运行得比较慢的命令(如果你指定的目标地址比较远),每个路由器你大约需要给它15秒钟
??Tracert的使用很简单,只需要在tracert后面跟一个IP地址或URL,Tracert会进行相应的域名转换的。
Tracert一般用来检测故障的位置,你可以用tracert IP在哪个环节上出了问题,
虽然还是没有确定是什么问题,但它已经告诉了我们问题所在的地方,
你也就可以很有把握的告诉别人——某某出了问题。

Route

??大多数主机一般都是驻留在只连接一台路由器的网段上。由于只有一台路由器,
因此不存在使用哪一台路由器将数据报发表到远程计算机上去的问题,
该路由器的IP地址可作为该网段上所有计算机的缺省网关来输入。

??但是,当网络上拥有两个或多个路由器时,你就不一定想只依赖缺省网关了。
实际上你可能想让你的某些远程IP地址通过某个特定的路由器来传递,
而其他的远程IP则通过另一个路由器来传递。

??在这种情况下,你需要相应的路由信息,这些信息储存在路由表中,
每个主机和每个路由器都配有自己独一无二的路由表。
大多数路由器使用专门的路由协议来交换和动态更新路由器之间的路由表。但在有些情况下,
必须人工将项目添加到路由器和主机上的路由表中。Route就是用来显示、人工添加和修改路由表项目的。

一般使用选项:

route print——本命令用于显示路由表中的当前项目,在单路由器网段上的输出结果如图12,
由于用IP地址配置了网卡,因此所有的这些项目都是自动添加的。

route add——使用本命令,可以将信路由项目添加给路由表。例如,
如果要设定一个到目的网络209.98.32.33的路由,其间要经过5个路由器网段,
首先要经过本地网络上的一个路由器,器IP为202.96.123.5,子网掩码为255.255.255.224,
那么你应该输入以下命令:

route add 209.98.32.33 mask 255.255.255.224 202.96.123.5 metric 5

route change——你可以使用本命令来修改数据的传输路由,不过,你不能使用本命令来改变数据的目的地。
下面这个例子可以将数据的路由改到另一个路由器,它采用一条包含3个网段的更直的路径:

route add 209.98.32.33 mask 255.255.255.224 202.96.123.250 metric 3

route delete——使用本命令可以从路由表中删除路由。例如:route delete 209.98.32.33


NBTStat

??NBTStat(TCP/IP上的NetBIOS统计数据)实用程序用于提供关于关于NetBIOS的统计数据。
运用NetBIOS,你可以查看本地计算机或远程计算机上的NetBIOS名字表格。

常用选项:

nbtstat -n——显示寄存在本地的名字和服务程序

nbtstat -c——本命令用于显示NetBIOS名字高速缓存的内容。
NetBIOS名字高速缓存用于寸放与本计算机最近进行通信的其他计算机的NetBIOS名字和IP地址对。

nbtstat -r——本命令用于清除和重新加载NetBIOS名字高速缓存。

nbtstat -a IP——通过IP显示另一台计算机的物理地址和名字列表,
你所显示的内容就像对方计算机自己运行nbtstat -n一样

nbtstat -s IP——显示实用其IP地址的另一台计算机的NetBIOS连接表。

Net

??Net命令有很多函数用于实用和核查计算机之间的NetBIOS连接。
这里我只介绍最常用的两个:net view和net use。

net view UNC——运用此命令,你可以查看目标服务器上的共享点名字。
任何局域网里的人都可以发出此命令,而且不需要提供用户ID或口令。UNC名字总是以\\开头,
后面跟随目标计算机的名字。例如,net view \\lx就是查看主机名为lx的计算机的共享点(见图15)。

net use 本地盘符 目标计算机共享点——本命令用于建立或取消到达特定共享点的映像驱动器的连接
(如果需要,你必须提供用户ID或口令)。
例如,你输入net use f: \\lx\mp3就是将映像驱动器F:连接到\\lx\mp3共享点上,
今后你直接访问F:就可以访问\\lx\mp3共享点,这和你右击“我的电脑”选择映射网络驱动器类似。

TOP

网站标准效验

前言

  网络上的变革每天都在发生,当我们觉得网站设计技术已经非常简单和熟悉的时候。国外网站设计标准化的概念早已悄悄的形成和迅速“蔓延”,自2000年起,大部分新发行的浏览器版本都开始支持网站标准。主流的网页编辑工具也开始全面支持网站标准,甚至一些软件几乎完全由XML文件组成,例如Dreamweaver MX。一些著名的大型商业网站开始采用网站标准来重新构建(例如体育资讯www.espn.com),另外一些则拒绝非标准浏览器浏览它们的网站(例如连线杂志www.wired.com)。众多的设计网站(例如:www.k10k.net) 和个人网站更是标准推广的先行者,纷纷转向采用XHTML+CSS来建立。2004年2月4日XML1.1推荐标准正式发布,标志着网站设计的标准时代已经到来。

  国外网站标准的声势汹涌,但国内业界显得有些后知后觉或者毫无兴趣,让我们来看看国内三大门户网站首页对网站标准的遵循情况:

校验项目
校验目标网站
校验结果

代码校验(XHTML)
(校验地址:http://validator.w3.org/
(htmlhelp)
www.sina.com.cn
失败,混杂的HTML,未达到XHTML1。黄色警报:字符集错误。(定义了GB2312,但页内使用了非GB2312字符)。非标准代码43处。

www.163.com
失败,混杂的HTML,未达到XHTML1。红色警报:未定义DOCTYPE。非标准代码41处。

www.sohu.com
失败,混杂的HTML,未达到XHTML1。黄色警报:字符集错误。非标准代码38处。

CSS2校验
(校验地址)
www.sina.com.cn
25处错误。

www.163.com
1处警告,10处错误。

www.sohu.com
1处警告,15处错误。

  校验结果显示所有门户网站都没有符合网站标准,甚至连HTML4.0标准都没有遵循。举例来说:<FONT>标签,早在1998年4月HTML4.0标准中就已经被W3C列为“不建议使用(deprecated)”标签。但我们的三大门户网站首页上都有不少类似<font color=red>的代码。这里的简单列表,目的不是批评这些网站做得不好(事实上大部分的大型商业站点都通不过W3C严格的正确性校验),有很多的原因造成这种状况,例如采用老的信息发布系统,网页设计人员的技术和意识不够等等。我们只是想说明一点:连比较规范的上市公司的网站都没有意识到遵循标准,其他规模教小的商业网站就更不用说,国内对网站标准没有足够的重视。

  让我们赶紧跟上新时代的步伐,一起来了解一下网站标准吧。

一.为什么要建立网站标准

  我们大部分人都有深刻体验,每当主流浏览器版本的升级,我们刚建立的网站就可能变得过时,我们就需要升级或者重新建造一遍网站。例如1996-1999年典型的“浏览器大战”,为了兼容Netscape和IE,网站不得不为这两种浏览器写不同的代码。同样的,每当新的网络技术和交互设备的出现,我们也需要制作一个新版本来支持这种新技术或新设备,例如支持手机上网的WAP技术。类似的问题举不胜举:网站代码臃肿、繁杂浪费了我们大量的带宽;针对某种浏览器的DHTML特效,屏蔽了部分潜在的客户;不易用的代码,残障人士无法浏览网站等等。这是一种恶性循环,是一种巨大的浪费。

  如何解决这些问题呢?有识之士早已开始思考,需要建立一种普遍认同的标准来结束这种无序和混乱。商业公司(Netscape、Microsoft等)也终于认识到统一标准的好处,因此在W3C(W3C.org)的组织下,网站标准开始被建立(1998年2月10日发布XML1.0为标志),并在网站标准组织(webstandards.org)的督促下推广执行。

简单说,网站标准的目的就是:

提供最多利益给最多的网站用户
确保任何网站文挡都能够长期有效
简化代码、降低建设成本
让网站更容易使用,能适应更多不同用户和更多网路设备
当浏览器版本更新,或者出现新的网络交互设备时,确保所有应用能够继续正确执行。
  对于网站设计和开发人员来说,遵循网站标准就是使用标准;对于你的网站用户来说,网站标准就是最佳体验。

  访问量排名世界第4,中国第1的新浪网站,也遭遇非标准DHTML的问题。在最新发布的Netscape7和Mozila1.6浏览器中,新浪首页的漂浮广告全部失效,层叠挤在页面左下角。也许那些广告主认为损失这些潜在的用户无所谓。(截图日期2004年4月12日)




二.什么是网站标准

  网站标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。这些标准大部分由W3C起草和发布,也有一些是其他标准组织制订的标准,比如ECMA(European Computer Manufacturers Association)的ECMAScript标准。我们来简单了解一下这些标准:

1.结构标准语言

(1)XML

  XML是The Extensible Markup Language(可扩展标识语言)的简写。目前推荐遵循的是W3C于2000年10月6日发布的XML1.0,参考(www.w3.org/TR/2000/REC-XML-20001006 )。和HTML一样,XML同样来源于SGML,但XML是一种能定义其他语言的语。XML最初设计的目的是弥补HTML的不足,以强大的扩展性满足网络信息发布的需要,后来逐渐用于网络数据的转换和描述。关于XML的好处和技术规范细节这里就不多说了,网上有很多资料,也有很多书籍可以参考。

(2)XHTML

  XHTML是The Extensible HyperText Markup Language可扩展标识语言的缩写。目前推荐遵循的是W3C于2000年1月26日推荐XML1.0(参考http://www.w3.org/TR/xhtml1)。XML虽然数据转换能力强大,完全可以替代HTML,但面对成千上万已有的站点,直接采用XML还为时过早。因此,我们在HTML4.0的基础上,用XML的规则对其进行扩展,得到了XHTML。简单的说,建立XHTML的目的就是实现HTML向XML的过渡。

2. 表现标准语言

  CSS是Cascading Style Sheets层叠样式表的缩写。目前推荐遵循的是W3C于1998年5月12日推荐CSS2(参考http://www.w3.org/TR/CSS2/)。W3C创建CSS标准的目的是以CSS取代HTML表格式布局、帧和其他表现的语言。纯CSS布局与结构式XHTML相结合能帮助设计师分离外观与结构,使站点的访问及维护更加容易。

3.行为标准

(1)DOM

  DOM是Document Object Model文档对象模型的缩写。根据W3C DOM规范(http://www.w3.org/DOM/default.htm),DOM是一种与浏览器,平台,语言的接口,使得你可以访问页面其他的标准组件。简单理解,DOM解决了Netscaped的Javascript和Microsoft的Jscript之间的冲突,给予web设计师和开发者一个标准的方法,让他们来访问他们站点中的数据、脚本和表现层对像。

(2) ECMAScript

  ECMAScript是ECMA(European Computer Manufacturers Association)制定的标准脚本语言(JAVAScript)。目前推荐遵循的是ECMAScript 262(http://www.ecma.ch/ecma1/STAND/ECMA-262.HTM)。

三.遵循标准的网站与传统网站的区别

  传统网站只是印刷媒体的延伸,设计目标是保证在4-6个主流浏览器版本中看起来一致。通常的特征是:

以表格为基础的布局。
内容与表现方式混杂在一起。典型的例子是<font>标签。
垃圾代码(非标准代码)。
不易用的代码。
语义不正确的代码。比如<b>不解释的话,你根本不明白这是字体加粗的意思。
  而采用网站标准建立的网站是一个能够接受各种用户和各种设备的广泛的交流沟通工具。一般特征是:

语义正确的标识。即使用能够表达含义的标签。保证代码可以在文本浏览器、PDAs、搜索引擎中被正确理解。
正确有效的代码。通过W3C代码校验(http://validator.w3.org/)的就是正确代码。
对人、机都易用的代码。能够接受广泛的用户和设备的访问,
用CSS分离表现层和内容。使代码更简洁、下载速度更快,批量修改和定制表现形式更容易。
四.采用网站标准的好处和缺点

1.好处

对网站浏览者的好处:

文件下载与页面显示速度更快;
内容能被更多的用户所访问(包括失明、视弱、色盲等残障人士);
内容能被更广泛的设备所访问(包括屏幕阅读机、手持设备、搜索机器人、打印机、电冰箱等等)
用户能够通过样式选择定制自己的表现界面
所有页面都能提供适于打印的版本
对网站所有者的好处:

更少的代码和组件,容易维护
带宽要求降低(代码更简洁),成本降低。举个例子:当 ESPN.com 使用 CSS改版后,每天节约超过两兆字节(terabytes)的带宽。
更容易被搜寻引擎搜索到
改版方便,不需要变动页面内容
提供打印版本而不需要复制内容
提高网站易用性。在美国,有严格的法律条款(Section 508)来约束政府网站必须达到一定的易用性,其他国家也有类似的要求。
2.缺点

需要花费更多时间来学习标准
依然需要注意浏览器的兼容问题
用 CSS 来实现某些表现反而比表格更为麻烦
五.怎么改善现有网站

  我们大部分的设计师依旧在采用传统的表格布局、表现与结构混杂在一起的方式来建立网站。学习使用XHTML+CSS的方法需要一个过程,使现有网站符合网站标准也不可能一步到位。最好的方法是循序渐进,分阶段来逐步达到完全符合网站标准的目标。如果你是新手,或者对代码不是很熟悉,也可以采用遵循标准的编辑工具,例如Dreamweaver MX 2004,它是目前支持CSS标准最完善的工具。

1.初级改善

为页面添加正确的DOCTYPE
  很多设计师和开发者都不知道什么是DOCTYPE,DOCTYPE有什么用。DOCTYPE

  是document type的简写。主要用来说明你用的XHTML或者HTML是什么版本。浏览器根据你DOCTYPE定义的DTD(文档类型定义)来解释页面代码。所以,如果你不注意设置了错误的DOCTYPE,结果会让你大吃一惊。XHTML1.0提供了三种DOCTYPE可选择:

过渡型(Transitional )

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

严格型(Strict )

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


框架型(Frameset )

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">


  对于我们初级改善来说,只要选用过渡型的声明就可以了。它依然可以兼容你的表格布局、表现标识等,不至于让你觉得变化太大,难以掌握。

  Tip:你懒得输入上面过渡型代码的话,可以访问http://www.macromedia.com/网站的首页,然后查看源代码,把head区同样的代码拷贝粘贴就可以了。

设定一个名字空间(Namespace)
  直接在DOCTYPE声明后面添加如下代码:

<html XMLns="http://www.w3.org/1999/xhtml" >

  一个namespace是收集元素类型和属性名字的一个详细的DTD,namespace声明允许你通过一个在线地址指向来识别你的namespace。只要照样输入代码就可以。

声明你的编码语言
  为了被浏览器正确解释和通过标识校验,所有的XHTML文档都必须声明它们所使用的编码语言。代码如下:

<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />

  这里声明的编码语言是简体中文GB2312,你如果需要制作繁体内容,可以定义为BIG5。

用小写字母书写所有的标签
  XML对大小写是敏感的,所以,XHTML也是大小写有区别的。所有的XHTML元素和属性的名字都必须使用小写。否则你的文档将被W3C校验认为是无效的。例如下面的代码是不正确的:

<TITLE>公司简介</TITLE>

正确的写法是:

<title>公司简介</title>

  同样的,<P>改成<p>,<B>改成<b>等等。这步转换很简单。

为图片添加 alt 属性
  为所有图片添加alt属性。alt属性指定了当图片不能显示的时候就显示供替换文本,这样做对正常用户可有可无,但对纯文本浏览器和使用屏幕阅读机的用户来说是至关重要的。只有添加了alt属性,代码才会被W3C正确性校验通过。注意的是我们要添加有意义的alt属性,象下面这样的写法毫无意义:

<img src="logo_unc_120x30.gif" alt="logo_unc_120x30.gif">

正确的写法:

<img src="logo_unc_120x30.gif" alt="UNC公司标志,点击返回首页" />

给所有属性值加引号
  在HTML中,你可以不需要给属性值加引号,但是在XHTML中,它们必须被加引号。

例:height="100",而不能是height=100。

关闭所有的标签
  在XHTML中,每一个打开的标签都必须关闭。就象这样:

<p>每一个打开的标签都必须关闭。</p>

<b>HTML可以接受不关闭的标,XHTML就不可以。</b>

  这个规则可以避免HTML的混乱和麻烦。举例来说:如果你不关闭图像标签,在一些浏览器中就可能出现CSS显示问题。用这种方法能确保页面和你设计的一样显示。需要说明的是:空标签也要关闭,在标签尾部使用一个正斜杠“/”来关闭它们自己。例如:

<br />
<img src="webstandards.gif" />


  经过上述七个规则处理后,页面就基本符合XHTML1.0的要求。但我们还需要校验一下是否真的符合标准了。我们可以利用W3C提供免费校验服务(http://validator.w3.org/)。发现错误后逐个修改。在后面的资源列表中我们也提供了其他校验服务和对校验进行指导的网址,可以作为W3C校验的补充。当最后通过了XHTML验证,恭喜你已经向网站标准迈出了一大步。不是想象中的那么难吧!




2.中级改善

  接下来我们的改善主要在结构和表现相分离上,这一步不象第一步那么容易实现,我们需要观念上的转变,以及对CSS2技术的学习和运用。但学习任何新知识都需要花点时间的,不是吗?诀窍在于边做边学。假如你一直采用表格布局,根本没用过 CSS,也不必急于跟表格布局说再见,你可以先用样式表代替 font 标签。随着你学到的越多,你能做的就越多。好,一起来看看我们需要做哪些事:

用CSS定义元素外观
  我们在写标识时已经养成习惯,当希望字体大点就用<h1>,希望在前面加个点符号就用<li>。我们总是想<h1>的意思是大的,<li>的意思是圆点,<b>的意思是“加粗文本”。而实际上, <h1>能变成你想要的任何样子,通过CSS,<h1>能变成小的字体,<p>文本能够变成巨大的、粗体的,<li>能够变成一张图片等等。我们不能强迫用结构元素实现表现效果,我们应该使用CSS来确定那些元素的外观。例如,我们可以使原来默认的6级标题可以看起来大小一样:

h1, h2, h3, h4, h5, h6{
    font-family: 宋体, serif;
    font-size: 12px;
}


用结构化元素代替无意义的垃圾
  许多人可能从来都不知道HTML和XHTML元素设计本意是用来表达结构的。我们很多人已经习惯用元素来控制表现,而不是结构。例如,一段列表内容可能会使用下面这样的标识:

句子一<br />
句子二<br />
句子三<br />


如果我们采用一个无序列表代替会更好:

<ul>
  <li>句子一</li>
  <li>句子二</li>
  <li>句子三</li>
</ul>


  你或许会说“但是<li>显示的是一个圆点,我不想用圆点”。事实上,CSS没有设定元素看起来是什么样子,你完全可以用CSS关掉圆点。

给每个表格和表单加上id
  给表格或表单赋予一个唯一的、结构的标记,例如

<table id="menu">

  接下来,在书写样式表的时候,你就可以创建一个“menu”的选择器,并且关联一个CSS规则,用来告诉表格单元、文本标签和所有其他元素怎么去显示。这样,不需要对每个<td>标签附带一些多余的、占用带宽的表现层的高、宽、对齐和背景颜色等等属性。只需要一个附着的标记(标记“menu”的id标记),你就可以在一个分离的样式表内为干净的、紧凑的代码标记进行特别的表现层处理。

  中级改善我们这里先列主要的三点,但其中包含的内容和知识点非常多,需要我们逐步学习和掌握,直到最后实现完全采用CSS而不才用任何表格实现布局。限于本文是引导推广之意,不展开详述。

  最后我们特别需要补充介绍的是网站的易用性(Accessibility)和交互设计改善,易用性与网站标准有着标准联系紧密,和网站标准一样,都是为了使我们的网站接受更多的用户访问。1990年W3C建立了Web Accessibility Initiative(WAI),给网站建造者提供实现可访问性的方法和策略(http://www.w3.org/WAI/GL/)。提高易用性和研究交互设计(推荐VB之父Alan Cooper的About Face2.0一书)的策略能提高你的开发技术,开阔视野。提高你作为专业网页设计师的价值,使你更具竞争力。这正是每个网站所有者和每个设计师或开发者要努力达到的目标。

六.网站标准的资源

1.网站标准

http://www.zeldman.com/
http://webstandards.org/
http://webstandardsgroup.org/
http://www.nypl.org/styleguide/


2.有语义代码

http://brainstormsandraves.com/articles/semantics/structure/

3.校验(Validation )

http://validator.w3.org/
http://www.htmlhelp.com/tools/validator/
http://webboy.net/presentation/validation.cfm


4.易用性(Accessibility )

http://www.joeclark.org/
http://www.accessify.com/
http://www.juicystudio.com/


5.样式表CSS

http://webboy.net/presentation/ict2004/01.htm
http://webboy.net/presentation/ict2004/02.htm
http://webboy.net/presentation/ict2004/03.htm
http://westciv.com/style_master/academy/css_tutorial/
http://css.maxdesign.com.au
http://www.thenoodleincident.com/tutorials/css/


6.实例站点(XHTML+CSS)

http://www.macromedia.com/
http://www.k10k.net
http://www.fyrebase.com/
http://www.onetruefit.com/
http://pixeltable.com/
http://www.fishmarketing.net/

TOP

忘记Windows XP登录密码的解决方案

者一朋友的计算机安装的是Windows XP操作系统,不慎忘记了系统登录用户“zhangbq”的密码,而且在安装时也没有做相应的应急盘,于是找到笔者希望能解决这个问题,经过多种方法进行尝试,最后我终于成功地找到两种方法解决了问题,现把这两种方法介绍如下:

  一、利用NET命令

  我们知道在Windows XP中提供了“net user”命令,该命令可以添加、修改用户账户信息,其语法格式为:

  net user [UserName [Password | *] [options> [/domain]

  net user [UserName {Password | *} /add [options] [/domain]

  net user [UserName [/delete] [/domain>

  每个参数的具体含义在Windows XP帮助中已做了详细的说明,在此笔者就不多阐述了。好了,我们现在以恢复本地用户“zhangbq”口令为例,来说明解决忘记登录密码的步骤:

  1、重新启动计算机,在启动画面出现后马上按下F8键,选择“带命令行的安全模式”。

  2、运行过程结束时,系统列出了系统超级用户“administrator”和本地用户“zhangbq”的选择菜单,鼠标单击“administrator”,进入命令行模式。

  3、键入命令:“net user zhangbq 123456 /add”,强制将“zhangbq”用户的口令更改为“123456”。若想在此添加一新用户(如:用户名为abcdef,口令为123456)的话,请键入“net user abcdef 123456 /add”,添加后可用“net localgroup administrators abcdef /add”命令将用户提升为系统管理组“administrators”的用户,并使其具有超级权限。

  4、重新启动计算机,选择正常模式下运行,就可以用更改后的口令“123456”登录“zhangbq”用户了。

  二、利用“administrator”

  我们知道在安装Windows XP过程中,首先是以“administrator”默认登录,然后会要求创建一个新账户,以便进入Windows XP时使用此新建账户登录,而且在Windows XP的登录界面中也只会出现创建的这个用户账号,不会出现“administrator”,但实际上该“administrator”账号还是存在的,并且密码为空。

  当我们了解了这一点以后,假如忘记了登录密码的话,在登录界面上,按住Ctrl+Alt键,再按住Del键二次,即可出现经典的登录画面,此时在用户名处键入“administrator”,密码为空进入,然后再修改“zhangbp”的口令即可。

  怎么样,忘记Windows XP登录密码的用户还不赶快动手试一试。

TOP

微软ping命令的源代码.

/******************************************************************************\
* ping.c - Simple ping utility using SOCK_RAW
*
* This is a part of the Microsoft Source Code Samples.
* Copyright 1996-1997 Microsoft Corporation.
* All rights reserved.
* This source code is only intended as a supplement to
* Microsoft Development Tools and/or WinHelp documentation.
* See these sources for detailed information regarding the
* Microsoft samples programs.
\******************************************************************************/

#pragma pack(4)

#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>

#define ICMP_ECHO 8
#define ICMP_ECHOREPLY 0

#define ICMP_MIN 8 // minimum 8 byte icmp packet (just header)

/* The IP header */
typedef struct iphdr {
unsigned int h_len:4; // length of the header
unsigned int version:4; // Version of IP
unsigned char tos; // Type of service
unsigned short total_len; // total length of the packet
unsigned short ident; // unique identifier
unsigned short frag_and_flags; // flags
unsigned char ttl;
unsigned char proto; // protocol (TCP, UDP etc)
unsigned short checksum; // IP checksum

unsigned int sourceIP;
unsigned int destIP;

}