ping的高级用法
对于Windows下ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping发挥最大的功能,我也只不过经常用ping这个工具,也总结了一些小经验,现在和大家分享一下。
现在我就参照ping命令的帮助说明来给大家说说我使用ping时会用到的技巧,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-list
Options:
-t Ping the specified host until stoppedTo see statistics and continue - type Control-Break;To stop - type Control-C
不停的ping地方主机,直到你按下Control-C。
此功能没有什么特别的技巧,不过可以配合其他参数使用,将在下面提到。
-a Resolve addresses to hostnames
解析计算机NetBios名。
示例:C:\>ping -a 192168121
Pinging icebloodyoforcom [192168121] with 32 bytes of data:
Reply from 192168121: bytes=32 time<10ms TTL=254
Reply from 192168121: bytes=32 time<10ms TTL=254
Reply from 192168121: bytes=32 time<10ms TTL=254
Reply from 192168121: bytes=32 time<10ms TTL=254
Ping statistics for 192168121:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
从上面就可以知道IP为192168121的计算机NetBios名为icebloodyoforcom。
-n count Number of echo requests to send
发送count指定的Echo数据包数。
在默认情况下,一般都只发送四个数据包,通过这个命令可以自己定义发送的个数,对衡量网络速度很有帮助,比如我想测试发送50个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以下获知:
C:\>ping -n 50 2021039668
Pinging 2021039668 with 32 bytes of data:
Reply from 2021039668: bytes=32 time=50ms TTL=241
Reply from 2021039668: bytes=32 time=50ms TTL=241
Reply from 2021039668: bytes=32 time=50ms TTL=241
Request timed out
………………
Reply from 2021039668: bytes=32 time=50ms TTL=241
Reply from 2021039668: bytes=32 time=50ms TTL=241
Ping statistics for 2021039668:
Packets: Sent = 50, Received = 48, Lost = 2 (4% loss),Approximate round trip times in milli-seconds:
Minimum = 40ms, Maximum = 51ms, Average = 46ms
从以上我就可以知道在给2021039668发送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 192168121
Pinging 192168121 with 65500 bytes of data:
Reply from 192168121: bytes=65500 time<10ms TTL=254
Reply from 192168121: bytes=65500 time<10ms TTL=254
………………
这样它就会不停的向192168121计算机发送大小为65500byt的数据包,如果你只有一台计算机也许没有什么效果,但如果有很多计算机那么就可以使对方完全瘫痪,我曾经就做过这样的试验,当我同时使用10台以上计算机ping一台Win2000Pro系统的计算机时,不到5分钟对方的网络就已经完全瘫痪,网络严重堵塞,>
1、在键盘中按下Win+R,启动运行,在运行编辑中,输入cmd。
2、在cmd中输入ping,然后按下空格。
3、再输入网址也可以,然后按下Ente。
4、发现已经指定原地址。
注意事项:
在windows环境下,命令行程序为cmdexe,是一个32位的命令行程序,微软Windows系统基于Windows上的命令解释程序,类似于微软的DOS *** 作系统。
校验与远程计算机或本地计算机的连接。只有在安装 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-list
参数
-t
校验与指定计算机的连接,直到用户中断。
-a
将地址解析为计算机名。
-n count
发送由 count 指定数量的 ECHO 报文,默认值为 4。
-l length
发送包含由 length 指定数据长度的 ECHO 报文。默认值为 64 字节,最大值为 8192 字节。
-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 的详细信息
Ping--注意
Ping 命令通过向计算机发送 ICMP 回应报文并且监听回应报文的返回,以校验与远程计算机或本地计算机的连接。对于每个发送报文, Ping 最多等待 1 秒,并打印发送和接收把报文的数量。比较每个接收报文和发送报文,以校验其有效性。默认情况下,发送四个回应报文,每个报文包含 64 字节的数据(周期性的大写字母序列)。
可以使用 Ping 实用程序测试计算机名和 IP 地址。如果能够成功校验 IP 地址却不能成功校验计算机名,则说明名称解析存在问题。这种情况下,要保证在本地 HOSTS 文件中或 DNS
数据库中存在要查询的计算机名。
下面显示 Ping 输出的示例:(Windows用户可用:开始->运行,输入"command" 调出command窗口使用此命令)
C:\>ping dsinternicnet
Pinging dsinternicnet [19220239132] with 32 bytes of data:
Reply from 19220239132: bytes=32 time=101ms TTL=243
Reply from 19220239132: bytes=32 time=100ms TTL=243
Reply from 19220239132: bytes=32 time=120ms TTL=243
Reply from 19220239132: bytes=32 time=120ms TTL=243
回答者:qq2086168 - 童生 一级 6-6 15:57
提问者对于答案的评价:
够多!
评价已经被关闭 目前有 0 个人评价
好
50% (0) 不好
50% (0)
对最佳答案的评论
看不明白啊 !!! 能力有限
评论者: joskin00 - 试用期 一级
不明白
评论者: yj000123 - 助理 二级
评论者: 84097024 - 试用期 一级
更多>>
其他回答共 4 条
说明你和他的网络连接不稳定,丢失的,就是没到达他服务器的!
原理如下
本文只是总结了两个常用的网络命令的实现原理和一点使用经验说明。这些东西通常都分布在各种书籍或者文章中的,我勤快那么一点点,总结一下,再加上我的一点理解和使用经验,方便大家了解。这些也是很基础的东西,没什么高深的。
Ping
这个应该大家都会用的吧,最主要的就是检测目标主机是不是可连通。Ping程序实际就是发送一个ICMP回显请求报文给目的主机,并等待回显的ICMP应答。然后打印出回显的报文。Ping不通一个地址,并不一定表示这个IP不存在或者没有连接在网络上,因为对方主机可能做了限制,比如安装了防火墙,因此Ping不通并不表示不能使用FTP或者TELNET连接。
PING得到的结果包括字节数、反应时间、以及生存时间。Ping程序通过在ICMP报文数据中存放发送请求的时间来计算返回时间。当应答返回时,根据现在时间减去报文中存放的发送时间就得到反应时间了。生存时间(TTL),本来就存放在IP数据报的头部,直接就能够获取。
上次和Dancefire说天网防火墙的时候,现在不是天网能识别哪些程序在进行网络连接么,结果试验用Ping的时候,天网就不知道了,呵呵,反正是没有警告。那ICMP木马天网能防么?
Tracert
一个探测路由的程序,可以让我们看见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 21199199204
Pinging 21199199204 with 32 bytes of data:
Reply from 21199199204: bytes=32 time=20ms TTL=248
Reply from 21199199204: bytes=32 time〈10ms TTL=248
Reply from 21199199204: bytes=32 time=10ms TTL=248
Reply from 21199199204: bytes=32 time=10ms TTL=248
Ping statistics for 21199199204:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 20ms, Average = 10ms
C:\〉tracert 21199199204
Tracing route to 21199199204 over a maximum of 30 hops
1 10 ms 10 ms 20 ms 2119957121
2 10 ms 10 ms 10 ms 20296131
3 〈10 ms 10 ms 20 ms 202961362
4 20 ms 10 ms 10 ms 21077139186
5 〈10 ms 10 ms 20 ms 21077139170
6 〈10 ms 〈10 ms 10 ms 21199193154
7 〈10 ms 10 ms 〈10 ms 21199199204
Trace complete
C:\〉
Ping得到的TTL=248,经过了7个路由器,减少了7,所以主机的TTL值是255。这样来判断吧。
下面是一些主机的默认TTL值。
LINUX Kernel 22x & 24x ICMP 回显应答的 TTL 字段值为 64
FreeBSD 41, 40, 34;
Sun Solaris 251, 26, 27, 28;
OpenBSD 26, 27,
NetBSD
HP UX 1020
ICMP 回显应答的 TTL 字段值为 255
Windows 95/98/98SE
Windows ME
ICMP 回显应答的 TTL 字段值为 32
Windows NT
Windows 2000
ICMP 回显应答的 TTL 字段值为 128
在网络应用中,ping网速与IP地址等都是非常常用的命令,要知道这其中的奥秘,有必要来看看Ping命令的工作过程到底是怎么样的。
假定主机A的IP地址是19216811,主机B的IP地址是19216812,都在同一子网内,则当在主机A上运行“Ping 19216812”后,都发生了些什么呢
首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“19216812”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“19216812”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并在一个映射表中查找出IP地址19216812所对应的物理地址(也叫MAC地址,熟悉网卡配置的朋友不会陌生,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。
从Ping的工作过程,可以知道,主机A收到了主机B的一个应答包,说明两台主机之间的去、回通路均正常。也就是说,无论从主机A到主机B,还是从主机B到主机A,都是正常的。
ping使用的是ICMP协议,而Qt中没有现成的处理ICMP协议的类。所以使用Qt就是用来做界面的,ping的功能是用C来完成的。
给你两个思路:
思路1 使用linux系统命令ping。 你的程序中fork一个新进程,在新进程里面通过system("ping xxxx");的方式来调用系统ping命令,然后把ping命令的输出通过管道输入到你的程序中来。
思路2 从网上找一个c语言写的现成的ping源代码,有很多的。看懂了以后,把ping源代码集成到你的代码中(把ping的main函数改名字,变成你的内部函数),注意输出数据。这样你的程序就有个ping功能。因为Ping会堵塞的,最好不要在画面线程中运行。
以上就是关于ping的运行方法全部的内容,包括:ping的运行方法、CMD里面的ping命令是不是不可以指定源地址。、ping的详细用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)