这个应该大家都会用的吧,最主要的就是检测目标主机是不是可连通。Ping程序实际就是发送一个ICMP回显请求报文给目的主机,并等待回显的ICMP应答。然后打印出回显的报文。Ping不通一个地址,并不一定表示这个IP不存在或者没有连接在网络上,因为对方主机可能做了限制,比如安装了防火墙,因此Ping不通并不表示不能使用FTP或者TELNET连接。PING得到的结果包括字节数、反应时间、以及生存时间。Ping程序通过在ICMP报文数据中存放发送请求的时间来计算返回时间。当应答返回时,根据现在时间减去报文中存放的发送时间就得到反应时间了。生存时间(TTL),本来就存放在IP数据报的头部,直接就能够获取。上次和Dancefire说天网防火墙的时候,现在不是天网能识别哪些程序在进行网络连接么,结果试验用Ping的时候,天网就不知道了,呵呵,反正是没有警告。那ICMP木马天网能防么?
一个探测路由的程序,可以让我们看见IP数据报到达目的地经过的路由。Tracert利用ICMP数据报和IP数据报头部中的TTL值。TTL(Time To Live)是一个IP数据报的生存时间,当每个IP数据报经过路由器的时候都回把TTL值减去1或者减去在路由器中停留的时间,但是大多数数据报在路由器中停留的时间都小于1秒种,因此实际上就是在TTL值减去了1。这样,TTL值就相当于一个路由器的计数器。当路由器接收到一个TTL为0或者1的IP数据报的时候,路由器就不再转发这个数据了,而直接丢弃,并且发送一个ICMP“超时”信息给源主机。Tracert程序的关键就是这个回显的ICMP报文的IP报头的信源地址就是这个路由器的IP地址。同时,如果到达了目的主机,我们并不能知道,于是,Tracert还同时发送一个UDP信息给目的主机,并且选择一个很大的值作为UDP的端口,使主机的任何一个应用程序都不使用这个端口。所以,当达到目的主机的时候,UDP模块就产生一个“端口不可到达”的错误,这样就能判断是否是到达目的地了。有说法是利用ping得到的TTL值来判断主机类型,这种办法可以大概地用来判断,有人问为什么一般得到的都不是标准的TTL值。这个就是因为ICMP数据包走的路由器线路的原因,所以,用ping 和 tracert 一起来用更容易判断主机类型(不过并不一定两次走的路线都一样,所以,还是个大概值,不过更接近点,而且主机的默认TTL值是可以改变的)。
C:/>ping 211.99.199.204Pinging 211.99.199.204 with 32 bytes of data:Reply from 211.99.199.204: bytes=32 time=20ms TTL=248Reply from 211.99.199.204: bytes=32 time〈10ms TTL=248Reply from 211.99.199.204: bytes=32 time=10ms TTL=248Reply from 211.99.199.204: bytes=32 time=10ms TTL=248Ping statistics for 211.99.199.204:Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds:Minimum = 0ms, Maximum = 20ms, Average = 10ms
C:/>tracert 211.99.199.204Tracing route to 211.99.199.204 over a maximum of 30 hops1 10 ms 10 ms 20 ms 211.99.57.1212 10 ms 10 ms 10 ms 202.96.13.13 〈10 ms 10 ms 20 ms 202.96.13.624 20 ms 10 ms 10 ms 210.77.139.1865 〈10 ms 10 ms 20 ms 210.77.139.1706 〈10 ms 〈10 ms 10 ms 211.99.193.1547 〈10 ms 10 ms 〈10 ms 211.99.199.204Trace complete.
Ping得到的TTL=248,经过了7个路由器,减少了7,所以主机的TTL值是255。这样来判断吧。下面是一些主机的默认TTL值。LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64FreeBSD 4.1, 4.0, 3.4;Sun Solaris 2.5.1, 2.6, 2.7, 2.8;OpenBSD 2.6, 2.7,NetBSDHP UX 10.20ICMP 回显应答的 TTL 字段值为 255Windows 95/98/98SEWindows MEICMP 回显应答的 TTL 字段值为 32Windows NTWindows 2000ICMP 回显应答的 TTL 字段值为 12803/3/12 23:03 oniontangping和tracert命令详解ping只有在安装了TCP/IP协议以后才可以使用:ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [-j computer-list] | [-k computer-list] [-w timeout] destination-listOptions:-t Ping the specified host until stopped.To see statistics and continue - type Control-Break;To stop - type Control-C.不停的ping地方主机,直到你按下Control-C。此功能没有什么特别的技巧,不过可以配合其他参数使用,将在下面提到。-a Resolve addresses to hostnames.解析计算机NetBios名。示例:
C:/>ping -a 192.168.1.21Pinging iceblood.yofor.com [192.168.1.21] with 32 bytes of data:Reply from 192.168.1.21: bytes=32 time<10ms TTL=254Reply from 192.168.1.21: bytes=32 time<10ms TTL=254Reply from 192.168.1.21: bytes=32 time<10ms TTL=254Reply from 192.168.1.21: bytes=32 time<10ms TTL=254Ping statistics for 192.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
从上面就可以知道IP为192.168.1.21的计算机NetBios名为iceblood.yofor.com。-n count Number of echo requests to send.发送count指定的Echo数据包数。在默认情况下,一般都只发送四个数据包,通过这个命令可以自己定义发送的个数,对衡量网络速度很有帮助,比如我想测试发送50个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以下获知:
C:\>ping -n 50 202.103.96.68Pinging 202.103.96.68 with 32 bytes of data:Reply from 202.103.96.68: bytes=32 time=50ms TTL=241Reply from 202.103.96.68: bytes=32 time=50ms TTL=241Reply from 202.103.96.68: bytes=32 time=50ms TTL=241Request timed out.………………Reply from 202.103.96.68: bytes=32 time=50ms TTL=241Reply from 202.103.96.68: bytes=32 time=50ms TTL=241Ping statistics for 202.103.96.68:Packets: Sent = 50, Received = 48, Lost = 2 (4% loss),Approximate round trip times in milli-seconds:Minimum = 40ms, Maximum = 51ms, Average = 46ms
从以上我就可以知道在给202.103.96.68发送50个数据包的过程当中,返回了48个,其中有两个由于未知原因丢失,这48个数据包当中返回速度最快为40ms,最慢为51ms,平均速度为46ms。-l size Send buffer size.定义echo数据包大小。在默认的情况下windows的ping发送的数据包大小为32byt,我们也可以自己定义它的大小,但有一个大小的限制,就是最大只能发送65500byt,也许有人会问为什么要限制到65500byt,因为Windows系列的系统都有一个安全漏洞(也许还包括其他系统)就是当向对方一次发送的数据包大于或等于65532时,对方就很有可能挡机,所以微软公司为了解决这一安全漏洞于是限制了ping的数据包大小。虽然微软公司已经做了此限制,但这个参数配合其他参数以后危害依然非常强大,比如我们就可以通过配合-t参数来实现一个带有攻击性的命令:(以下介绍带有危险性,仅用于试验,请勿轻易施于别人机器上,否则后果自负)
C:/>ping -l 65500 -t 192.168.1.21Pinging 192.168.1.21 with 65500 bytes of data:Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254………………
这样它就会不停的向192.168.1.21计算机发送大小为65500byt的数据包,如果你只有一台计算机也许没有什么效果,但如果有很多计算机那么就可以使对方完全瘫痪,我曾经就做过这样的试验,当我同时使用10台以上计算机ping一台Win2000Pro系统的计算机时,不到5分钟对方的网络就已经完全瘫痪,网络严重堵塞,HTTP和FTP服务完全停止,由此可见威力非同小可。-f Set Don<|>t Fragment flag in packet.在数据包中发送“不要分段”标志。在一般你所发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再分段处理。
-i TTL Time To Live.指定TTL值在对方的系统里停留的时间。此参数同样是帮助你检查网络运转情况的。
-v TOS Type Of Service.将“服务类型”字段设置为 tos 指定的值。-r count Record route for count hops.在“记录路由”字段中记录传出和返回数据包的路由。在一般情况下你发送的数据包是通过一个个路由才到达对方的,但到底是经过了哪些路由呢?通过此参数就可以设定你想探测经过的路由的个数,不过限制在了9个,也就是说你只能跟踪到9个路由,如果想探测更多,可以通过其他命令实现,我将在以后的文章中给大家讲解。以下为示例:
C:/>ping -n 1 -r 9 202.96.105.101 (发送一个数据包,最多记录9个路由)Pinging 202.96.105.101 with 32 bytes of data:Reply from 202.96.105.101: bytes=32 time=10ms TTL=249Route: 202.107.208.187 ->202.107.210.214 ->61.153.112.70 ->61.153.112.89 ->202.96.105.149 ->202.96.105.97 ->202.96.105.101 ->202.96.105.150 ->61.153.112.90Ping statistics for 202.96.105.101:Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),Approximate round trip times in milli-seconds:Minimum = 10ms, Maximum = 10ms, Average = 10ms
从上面我就可以知道从我的计算机到202.96.105.101一共通过了202.107.208.187 ,202.107.210.214 , 61.153.112.70 , 61.153.112.89 , 202.96.105.149 , 202.96.105.97这几个路由。-s count Timestamp for count hops.指定 count 指定的跃点数的时间戳。此参数和-r差不多,只是这个参数不记录数据包返回所经过的路由,最多也只记录4个。-j host-list Loose source route along host-list.利用 computer-list 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP 允许的最大数量为 9。-k host-list Strict source route along host-list.利用 computer-list 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP 允许的最大数量为 9。-w timeout Timeout in milliseconds to wait for each reply.指定超时间隔,单位为毫秒。此参数没有什么其他技巧。ping命令的其他技巧:在一般情况下还可以通过ping对方让对方返回给你的TTL值大小,粗略的判断目标主机的系统类型是Windows系列还是UNIX/Linux系列,一般情况下Windows系列的系统返回的TTL值在100-130之间,而UNIX/Linux系列的系统返回的TTL值在240-255之间,当然TTL的值在对方的主机里是可以修改的,Windows系列的系统可以通过修改注册表以下键值实现:[HKEY_LOCAL_MACHINE\sys tem\CurrentControlSet\Services\Tcpip\Parameters]"DefaultTTL"=dword:000000ff255---FF 128---80 64----40 32----20在路由器上-c可以指定发送的包数.例如:ping -c 10000 x.x.x.x就会ping 10000个数据包.并统计丢包率.
Tracert命令详解
该诊断实用程序将包含不同生存时间 (TTL) 值的 Internet 控制消息协议 (ICMP) 回显数据包发送到目标,以决定到达目标采用的路由。要在转发数据包上的 TTL 之前至少递减 1,必需路径上的每个路由器,所以 TTL 是有效的跃点计数。数据包上的 TTL 到达 0 时,路由器应该将“ICMP 已超时”的消息发送回源系统。Tracert 先发送 TTL 为 1 的回显数据包,并在随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。路由通过检查中级路由器发送回的“ICMP 已超时”的消息来确定路由。不过,有些路由器悄悄地下传包含过期 TTL 值的数据包,而 tracert 看不到。tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name使用 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 -dTracing route to 172.16.0.99 over a maximum of 30 hops1 2s 3s 2s 10,0.0,12 75 ms 83 ms 88 ms 192.168.0.13 73 ms 79 ms 93 ms 172.16.0.99Trace complete.
用 tracert 解决问题可以使用 tracert 命令确定数据包在网络上的停止位置。下例中,默认网关确定 192.168.10.99 主机没有有效路径。这可能是路由器配置的问题,或者是 192.168.10.0 网络不存在(错误的 IP 地址)。
C:/>tracert 192.168.10.99Tracing route to 192.168.10.99 over a maximum of 30 hops1 10.0.0.1 reports:Destination 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 命令跟踪路径打开 命令提示符,然后键入:tracert host_name或者键入 tracert ip_address其中 host_name 或 ip_address 分别是远程计算机的主机名或 IP 地址。例如,要跟踪从该计算机到 www.21andy.com 的连接路由,请在命令提示行键入:
tracert www.21andy.com
注意要打开“命令提示符”,请单击“开始”,指向“程序”、“附件”,然后单击“命令提示符”。tracert 命令跟踪 TCP/IP 数据包从该计算机到其它远程计算机所采用的路径。tracert 命令使用 ICMP 响应请求并答复消息(和 ping 命令类似),产生关于经过的每个路由器及每个跃点的往返时间 (RTT) 的命令行报告输出。如果 tracert 失败,可以使用命令输出来帮助确定哪个中介路由器转发失败或耗时太多。参数/d指定不将地址解析为计算机名。-h maximum_hops指定搜索目标的最大跃点数。-j computer-list指定沿 computer-list 的稀疏源路由。-w timeout每次应答等待 timeout 指定的微秒数。target_name目标计算机的名称
Tags: ping, tracert, 命令, 教程, 详解
本文地址: http://www.21andy.com/blog/20090427/1168.html
