常用网络测试命令之ping
未完(待续……)
ping 命令是我在排除网络故障中使用得最频繁的一个命令之一。
该命令只有在安装了 tcp/ip 协议后才可以使用,它是用来检查网络是否通畅或者网络连接速度的命令。它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步甚至还可以判断目标主机的操作系统等。
这个命令在win和*nix平台下都有。
先介绍在win平台下的吧:
一、win平台下的ping命令
DOS窗口中键入:ping /? 回车
可看到如下信息 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | C:\Documents and Settings\ihacklog.com>ping /? 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] target_name Options: -t Ping the specified host until stopped. To see statistics and continue - type Control-Break; To stop - type Control-C. -a Resolve addresses to hostnames. -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. |
这个使用说明是英文的,对于习惯中文的人来说还是看中文的舒服些:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 参数 -t ping 指定的计算机直到中断。ctrl+c停止 -a 将地址解析为计算机名。例:c:\> (huangyewudeng就是他的为本地计算机名) C:\Documents and Settings\ihacklog.com>ping -a 127.0.0.1 Pinging huangyewudeng [127.0.0.1] with 32 bytes of data: Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Ping statistics for 127.0.0.1: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms -n count 发送 count 指定的 echo 数据包数。默认值为 4。 -l length 发送包含由 length 指定的数据量的 echo 数据包。默认为 32 字节;最大值是 65,527。 -f 在数据包中发送“不要分段”标志。数据包就不会被路由上的网关分段。 -i ttl 将“生存时间”字段设置为 ttl 指定的值。 -v tos 将“服务类型”字段设置为 tos 指定的值。 -r count 在“记录路由”字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 9 台计算机。 -s count 指定 count 指定的跃点数的时间戳。 -j computer-list 利用 computer-list 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)ip 允许的最大数量为 9。 -k computer-list 利用 computer-list 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)ip 允许的最大数量为 9。 -w timeout 指定超时间隔,单位为毫秒。 destination-list 指定要 ping 的远程计算机。 |
Tips:
TTL英文全称为Time to Live,意思就是生存周期。
TTL是IP协议包中的一个值,它告诉网络,数据包(例如ICMP包)在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。例如,不正确的路由表可能导致包的无限循环。一个解决方法就是在一段时间后丢弃这个包,然后给发送者一个报文,由发送者决定是否要重发。TTL的初值通常是系统缺省值,是包头中的8位的域。TTL的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把TTL域减一,TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。
TTL:(Time To Live ) 生存时间
指定数据包被路由器丢弃之前允许通过的网段数量。
TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
使用PING时涉及到的 ICMP 报文类型
一个为ICMP请求回显(ICMP Echo Request)
一个为ICMP回显应答(ICMP Echo Reply)
TTL 字段值可以帮助我们识别操作系统类型。
UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255
Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64
微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128
微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32
当然,返回的TTL值是相同的
但有些情况下有所特殊
LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64
FreeBSD 4.1, 4.0, 3.4; 、 Sun Solaris 2.5.1, 2.6, 2.7, 2.8; 、 OpenBSD 2.6, 2.7, NetBSD 、 HP UX 10.20 ICMP 回显应答的 TTL 字段值为 255
Windows 95/98/98SE 、 Windows ME ICMP 回显应答的 TTL 字段值为 32
Windows NT4 WRKS 、 Windows NT4 Server 、 Windows 2000 、 Windows XP ICMP 回显应答的 TTL 字段值为 128
这样,我们就可以通过这种方法来辨别操作系统
TTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255
个人用得比较多的参数有这几个:
a:解析主机地址。
n:数据:发出的测试包的个数,缺省值为4。
l:数值:所发送缓冲区的大小。
t:继续执行Ping命令,直到用户按Ctrl+C终上。
常见的出错信息:
1、Unknown host:不知名主机这种出错信息的意思是,该远程主机的名字不能被域名服务器(DNS)转换成IP地址。
故障原因可能是域名服务器有故障,或者其名字不正确,或者网络管理员的系统与远程主机之间的通信线路有故障。
2、Noanswer:无响应这种故障说明本地系统有一条通向中心主机的路由,但却接收不到它发给该中心主机的任何信息。故障原因可能是下列之一:中心主机没有工作;本地或中心主机网络配置不正确:本地或中心的路由器没有;通信线路有故障;中心主机存在路由选择问题。
3、Request timbd out:超时工作站与中心主机的连接超时,数据包全部丢失的原因:可能是到路由器的连接出现问题,或路由器不能通过,也可能是中心主机已经关机或死机。
要想让Ping命令有效发挥作用,我们首先需 要掌握使用该命令排查故障的一些测试顺序,只要依照顺序依次排查,再难解决的网络故障也能被很快解决掉,下面就是使用Ping命令测试故障原因的具体操作顺序:
(ps:先保证机器网线是插上的-_-)
1.首先对本地工作站的循环地址127.0.0.1进行 ping测试。
当遇到一些无法直接找到故障原因的特殊网络故障时,我们首先需要使用Ping命令测试一下本地工作站的循环地址127.0.0.1能否被正常Ping通,倘若该地址无法被正常Ping通的话,那么说明本地工作站的TCP/IP协议程序受到了破坏,或者网卡设备发生了损坏。
此时,我们不妨打开本地工作站系统的设备管理器窗口,从中找到网卡设备选项,并用鼠标右键单击该选项,从弹出的快捷菜单中执行“属性”命令,打开网卡设备的属性设置窗口,在该窗口的“常规”标签页面中我们就能看到当前的网卡工作状态是否正常了(如下图所示)。
当发现网卡工作状态正常的话,那很有可能是本地工作站的TCP/IP协议程序受到了破坏,此时我们不妨打开本地连接属性设置窗口,选中并删除该设置窗口 中的TCP/IP协议选项,之后再重新安装一下TCP/IP协议程序,相信这么一来本地工作站的循环地址127.0.0.1就能被正常Ping通了。
2.对本地工作站的IP地址进行ping测试。
在确认127.0.0.1地址能够被Ping通的情况下,我们继续使用Ping命令测试一下本地工作站的静态IP地址是否能被正常Ping通,倘若该地址不能被正常Ping通的话,那么说明本地工作站的网卡参数没有设置正确,或者网卡驱动程序不正确,也有可能是本地的路由表受到了破坏。此时我们可以重新检查一下本地工作站的网络参数是否设置正确(ipconfig /all),如果在网络参数设置正确的情况下仍然无法Ping通本地IP地址的话,我们最好重新安装一下网卡设备的原装驱动程序,相信这 么一来我们就能正确Ping通本地工作站的静态IP地址了。一旦本地工作站的静态IP地址被顺利Ping通的话,那就表明本地工作站已经能够加入到局域网 网络中了。
3.对本地局域网的默认网关地址进行ping测试。
由于本地工作站是通过网关与局域网中的其他工作站进行相互通信的,只有本地工作站与默认网关之间连接正常,才能确保本地工作站与其他工作站通信正常。(注,在有些情况没有没有经过拨号认证前是无法ping通网关的,比如很多大学里采用的锐捷,在没有经过认证连网时是无法ping通网关的。)倘若网关地址能被正常Ping通的话,那就表明本地工作站可以与局域网中的其他工作站进行正常通信。
要是Ping命令操作不成功的话,那很有可能是网关设备自身存在问题,或者是本地工作站与网关之间的线路连接不正常,也有可能是本地工作站与网关没有设 置成同一个子网中。此时,我们可以先用专业的线缆测试工具测试一下网络线缆的连通性,在线缆连通性正常的情况下,再检查本地工作站的网络参数是否与网关的参数设置成同一个子网中。
倘若网络参数设置正确的话,我们再从其他工作站Ping一下网关地址,以便确认网关自身是否存在原因,如果局域网中的其他工作站也无法Ping通网关的话,那多半是网关设备自身存在问题,这个时候我们只要将故障排查重点锁定在网关设备上就可以了。
4.对互联网中任意一台远程工作站的IP地址进行ping测试,以便检验本地工作站能否通过网关设备与局域网中的其他工作站进行通信。
(如对 google.cn (203.208.39.99) )
要是我们发现远程 工作站的IP地址无法Ping通的话,那很有可能是远程工作站自身无法响应,或者是远程工作站与网关设备之间的线路连接出现了问题,此时我们可以将网络故障的排查重点聚焦到远程工作站上或者是局域网的网络设备上。
5.最后对互联网的远程工作站主机名称进行ping测试。
(如ping google.cn )
在确认能够Ping通远程工作站IP地址的情况下,仍然出现无法访问远程工作站内容的时候,我们就有必要进行这一项测试操作。如果该主机名称无法被Ping成功的话,那很有可能是DNS解析出现了问题,而不是网络连接发生了故障,此时我们不妨把故障检查重锁定在可以检查网卡的DNS服务器上配置。
小提示:为了有效地找出网络故障原因,我们在使用Ping命令进行测试检查时,尽量确保局域网中只配置了一个网关,同时确保本地工作站没有启用IP安全设置策略并且没有开启任何防火墙,这样可以保证Ping命令能够获得正确的测试结果。
停用Ping功能
在网络访问一切正常的情况下,我们有时使用Ping命令测试某个地址的连通性时,会出现Ping不通的现象,其实这种现象并不能算是网络故障,因为目前 不少病毒程序会通过Ping命令向局域网中发送大量的垃圾包,以便实施ddos攻击,而许多服务器或工作站为了远离这样的非法攻击,常常会采取措施将 Ping功能关闭掉,如此一来就会出现在网络访问一切正常的情况下,仍然发生Ping不通的奇怪现象。
为了保护本地工作站的安全,我们在平时可以采取如下措施,确保其他用户无法Ping通本地工作站的IP地址,但是如此一来本地工作站的Ping功能就被暂时停止使用了。
方法:运行->gpedit.msc
1,创建一个名为noping的ip安全策略:
2,创建筛选器和筛选器操作
右击“ip 安全策略,在 本地计算机“->在弹出的右键菜单中选择”管理ip筛选器和筛选器操作“
分别添加一个ip筛选器(,取名为“禁止icmp”)和一个筛选器操作(取名为“阻止”).
接下来编辑名为noping的ip安全策略的属性,指定ip筛选器为”禁止icmp”,筛选器操作为“阻止”。
最后右击该ip 安全策略,选择“指派”,这样该策略就生效了。
现在无论是本机ping其它主机还是其它主机ping本机,都ping 不通了。
小提示:除了通过停用Ping功能来增强本地工作站的安全防范性能外,我们也可以通过伪装Ping命令测试结果的方法,来保护本地工作站或服务器的安 全。例如,在进行Ping命令测试时,如果DefaultTTL结果为128的话,我们就能判断目标主机的操作系统类型为Windows系统,如果 DefaultTTL结果为64的话,那目标主机的操作系统类型为Linux系统,根据这样的测试结果信息黑客就有可能实施有针对性地攻击,为此我们可以 故意伪装DefaultTTL结果信息,以便给黑客返回一个错误的结果,从而让黑客发动的非法攻击偏离方向。
要伪装DefaultTTL结果信息,我们只要先打开系统的注册表编辑窗口,并依次展开“HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters”分支,然后在“Parameters”分支下面创建一个 “DefaultTTL”双字节值,再将它的数值设置成其他任意一个数字。
例如在Windows系统下,我们可以尝试将DefaultTTL结果信息设置成“64”,那样一来黑客使用Ping命令测试本地工作站时,还认为本地 工作站安装了Linux系统,于是他们可能会针对Linux系统发动攻击,但这样的攻击不会对Windows系统工作站造成任何影响,如此一来本地工作站 的安全性就得到了一定程度的保证。
pathping
在Windows 2000以上版本的工作站系统中,Ping命令还有一个“兄弟”作伴,这位“兄弟”其实就是平时很少露面的pathping命令,该命令在关键时刻也能帮 助我们找到网络故障原因。例如在网络访问速度非常缓慢的情况下,我们使用Ping命令或许根本找不到造成网络访问速度缓慢的故障原因,此时使用 pathping命令,我们就能轻易地找到究竟在哪一个网络连接环节出现了数据丢包现象。
该路由跟踪命令结合了 ping 和 tracert 命令的功能,可提供这两个命令都无法提供附加信息。经过一段时间,pathping 命令将数据包发送到最终目标位置途中经过的每个路由器,然后根据从每个跃点返回的数据包统计结果。因为 pathping 显示指定的所有路由器和链接的数据包的丢失程度,所以用户可据此确定引起网络问题的路由器或链接。
在cmd中,输入字符串命令“pathping xxx”,单击回车键后,我们就能从随后的结果信息中看到在访问DNS服务器过程中,中途经过了几个中间路由器(如下图所示)。
并且能清楚地知道究竟在哪一个跳转环节发生了数据丢包或网络延时现象。如果我们发现某一个路由器的数据丢包率非常高的话,那么该路由器很有可能出现了意外,此时我们只要将故障检查重点锁定在对应路由器设备上就可以了。








好文!过来支持一下
@AlvinJ, 谢谢-_-
我仅知道的两个命令之一 另一个是tracert
原来一个简单的ping有这么多学问。
@mimzyx, 嗯,有时候看似简单的东西也可以不简单