以文本方式查看主题 - 泥客论坛(十几年前的回忆) (http://kesonic.com/bbs/index.asp) -- ☆电脑应用☆ (http://kesonic.com/bbs/list.asp?boardid=5) ---- ping 命令详解 (http://kesonic.com/bbs/dispbbs.asp?boardid=5&id=10106) |
-- 作者:小轲 -- 发布时间:2006/12/17 13:48:29 -- ping 命令详解 ping是一个很常用的小工具,它主要用于确定网络的连通性问题。使用ping命令后,常见的出错信息通常分为3种: 1、Unknown host:不知名主机这种出错信息的意思是,该远程主机的名字不能被域名服务器(DNS)转换成IP地址。故障原因可能是域名服务器有故障,或者其名字不正确,或者网络管理员的系统与远程主机之间的通信线路有故障。 如何用ping命令查找无法上网的原因? 1.Ping命令的语法格式: ping命令看似小小的一个工具,但它带有许多参数,要完全掌握它的使用方法还真不容易,要达到熟练使用则更是难下加难,但不管怎样我们还得来看看它的真面目,首先我们还是从最基本的命令格式入手吧! ping命令的完整格式如下: ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [-j -Host list] | [-k Host-list] [-w timeout] destination-list 从这个命令式中可以看出它的复杂程度,ping命令本身后面都是它的执行参数,现对其参数作一下详细讲解吧! -t—— 有这个参数时,当你ping一个主机时系统就不停的运行ping这个命令,直到你按下Control-C。 -a——解析主机的NETBIOS主机名,如果你想知道你所ping的要机计算机名则要加上这个参数了,一般是在运用ping命令后的第一行就显示出来。 -n count——定义用来测试所发出的测试包的个数,缺省值为4。通过这个命令可以自己定义发送的个数,对衡量网络速度很有帮助,比如我想测试发送20个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过执行带有这个参数的命令获知。 -l length——定义所发送缓冲区的数据包的大小,在默认的情况下windows的ping发送的数据包大小为32byt,也可以自己定义,但有一个限制,就是最大只能发送65500byt,超过这个数时,对方就很有可能因接收的数据包太大而死机,所以微软公司为了解决这一安全漏洞于是限制了ping的数据包大小。 -f—— 在数据包中发送“不要分段”标志,一般你所发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再分段处理。 -i ttl—— 指定TTL值在对方的系统里停留的时间,此参数同样是帮助你检查网络运转情况的。 -v tos—— 将“服务类型”字段设置为 “tos” 指定的值。 -r count—— 在“记录路由”字段中记录传出和返回数据包的路由。一般情况下你发送的数据包是通过一个个路由才到达对方的,但到底是经过了哪些路由呢?通过此参数就可以设定你想探测经过的路由的个数,不过限制在了9个,也就是说你只能跟踪到9个路由。 -s count——指定“count” 指定的跃点数的时间戳,此参数和-r差不多,只是这个参数不记录数据包返回所经过的路由,最多也只记录4个。 -j host-list ——利用“ computer-list” 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔IP 允许的最大数量为 9。 -k host-list ——利用 “computer-list” 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔IP 允许的最大数量为 9。 -w timeout——指定超时间隔,单位为毫秒。 destination-list ——是指要测试的主机名或IP地址 -t参数 -t—— 有这个参数时,当你ping一个主机时系统就不停的运行ping这个命令,直到你按下Control-C。例如: C:\\WINDOWS>ping 192.168.1.188 -t Pinging 192.168.1.188 with 32 bytes of data: Reply from 192.168.1.188: bytes=32 time<10ms TTL=64 Ping statistics for 192.168.1.188: -a参数 -a——解析主机的NETBIOS主机名,如果你想知道你所ping的要机计算机名则要加上这个参数了,一般是在运用ping命令后的第一行就显示出来。 例如: Pinging 000 [192.168.1.100] with 32 bytes of data: Reply from 192.168.1.100: bytes=32 time<10ms TTL=128 Ping statistics for 192.168.1.100: 再如: Pinging 9.localdomain [192.168.0.23] with 32 bytes of data: Reply from 192.168.0.23: bytes=32 time<10ms TTL=128 Ping statistics for 192.168.0.23: -n参数 例如: Pinging 192.168.1.188 with 32 bytes of data: Reply from 192.168.1.188: bytes=32 time<10ms TTL=64 Ping statistics for 192.168.1.188: 向IP为192.168.1.188的计算机,发送10个数据包,发送10个,返回10个,没有丢包。 -l参数 例如: Pinging 192.168.1.188 with 32768 bytes of data: Request timed out. Ping statistics for 192.168.1.188: 向IP为192.168.1.188的计算机,发送大小为32768byt的数据包10个,发送10个,返回9个,丢失1个。返回数据包最短时间为9ms,最长时间为12ms。 |
-- 作者:小轲 -- 发布时间:2006/12/17 13:49:17 -- 2.Ping命令的应用 (1)、测试网络的通畅 C:\\WINDOWS>ping -a 192.168.0.23 Pinging 9.localdomain [192.168.0.23] with 32 bytes of data: Reply from 192.168.0.23: bytes=32 time<10ms TTL=128 Ping statistics for 192.168.0.23: 从上面我们就可以看出目标计算机与服务器连接成功,TCP/IP协议工作正常,因为加了“-a”这个参数所以还可以知道IP为196.168.0.23的计算机的NetBIOS名为9。 下面我们来PING IP为192.168.0.1的计算机,如果网络未连成功则显示如下错误信息: Pinging 192.168.0.1 with 32 bytes of data: Request timed out. Ping statistics for 192.168.0.1: 为什么不管网络是否连通在提示信息中都会有重复四次一样的信息呢(如上的“Reply from 192.168.1.188: bytes=32768 time=12ms TTL=64”和“Request timed out”),那是因为一般系统默认每次用ping测试时是发送四个数据包,这些提示就是告诉你所发送的四个数据包的发送情况。 (2)、获取计算机的IP地址 利用ping这个工具我们可以获取对方计算机的IP地址,特别是在局域网中,我们经常是利用NT或WIN2K的DHCP动态IP地址服务自动为各工作站分配动态IP地址,这时当然我们要知道所要测试的计算机的NETBIOS名,也即我们通常在“网络邻居”中看到的“计算机名”。使用ping命令时我们只要用ping命令加上目标计算机名即可,如果网络连接正常,则会显示所ping的这台机的动态IP地址。其实我们完全可以在互联网使用,以获取对方的动态IP地址,这一点对于黑客来说是比较有用的,当然首先的一点就是你先要知道对方的计算机名。 例如: Pinging www.kesonic.com [218.26.153.214] with 32 bytes of data: Request timed out. Ping statistics for 218.26.153.214: ping www.kesonic.com,得到www.kesonic.com的计算机,IP为218.26.153.214。 ping命令的其他技巧:在一般情况下还可以通过ping对方让对方返回给你的TTL值大小,粗略的判断目标主机的系统类型是Windows系列还是UNIX/Linux系列,一般情况下Windows系列的系统返回的TTL值在100-130之间,而UNIX/Linux系列的系统返回的TTL值在240-255之间,当然TTL的值在对方的主机里是可以修改的,Windows系列的系统可以通过修改注册表以下键值实现。 每个操作系统对TTL值得定义都不同,这个值甚至可以通过修改某些系统的网络参数来修改,例如Win2000默认为128,通过注册表也可以修改。而Linux大多定义为64。不过一般来说,很少有人会去修改自己机器的这个值的,这就给了我们机会可以通过ping的回显TTL来大体判断一台机器是什么操作系统。 以我公司2台机器为例,看如下命令 Pinging 61.152.93.131 with 32 bytes of data: Reply from 61.152.93.131: bytes=32 time=21ms TTL=118 Ping statistics for 61.152.93.131: D:Documents and Settingshx>ping 61.152.104.40 Pinging 61.152.104.40 with 32 bytes of data: Reply from 61.152.104.40: bytes=32 time=28ms TTL=54 Ping statistics for 61.152.104.40: 1,不是说包可能走很多路径吗,为什么我看到的4个包TTL都是一样的,没有出现不同? 这是由于包经过的路径是经过了一些最优选择算法来定下来的,在网络拓扑稳定一段时间后,包的路由路径也会相对稳定在一个最短路径上。具体怎么算出来的要去研究路由算法了,不在讨论之列。 2,对于上面例子第二台机器,为什么不认为它是经过了74个节点的Windows机器?因为128-74=54。 对于这个问题,我们要引入另外一个很好的ICMP协议工具。不过首先要声明的是,一个包经过74个节点这个有些恐怖,这样的路径还是不用为好。 要介绍的这个工具是tracert(*nix下为traceroute),让我们来看对上面的第二台机器用这个命令的结果 Tracing route to 61.152.104.40 over a maximum of 30 hops 1 13 ms 16 ms 9 ms 10.120.32.1 Trace complete. 从这个命令的结果能够看到从我的机器到服务器所走的路由,确实是11个节点(上面说10个好像是我犯了忘了算0的错误了,应该是64-54+1,嘿嘿),而不是128的TTL经过了70多个节点。 Pinging 61.152.104.40 with 32 bytes of data: Reply from 61.152.104.40: bytes=32 time=10ms TTL=54 Ping statistics for 61.152.104.40: D:Documents and Settingshx> Pinging 61.152.104.40 with 32 bytes of data: Reply from 61.152.99.94: TTL expired in transit. Ping statistics for 61.152.104.40: D:Documents and Settingshx> 可以看到,结果不一样了,我定义了TTL为10来发包,结果是TTL expired in transit.就是说在到达服务器之前这个包的生命周期就结束了。注意看这句话前面的ip,这个ip恰好是我们前面tracert结果到服务器之前的最后1个ip,包的TTL就是在这里减少到0了,根据我们前面的讨论,当TTL减为0时设备会丢弃包并发送一个TTL过期的ICMP反馈给源地址,这里的结果就是最好的证明。 想象一下,如果我给目的服务器发送一个TTL为1的包,结果会怎样? 依次类推,我们一个一个的发现,当最终返回的结果不是TTL失效而是ICMP Response的时候,我们的tracert也就结束了,就是这么简单。 顺便补一句ping命令还有个-n的参数指定要发包的数量,指定了这个数字就会按照你的要求来发包了而不是默认的4个包。如果使用-t参数的话,命令会一直发包直到你强行中止它。 |