【热门】0830【万泉河】网络调试利器:PING
准确说PING并不是个软件, 而只是个CMD指令。
有人会笑了, PING, 很简单的,所有人都会。没啥可讨论的干货。嗯。 如果你这样认为, 那文章最后我的疑问希望有人能够可以给我答案。
这个指令在WINDOWS中执行很简单,打开CMD窗口, 或者开始按钮的右键菜单中的Windows PowerShell或者Windows PowerShell(管理员),在窗口中执行:
PING 127.0.0.1 –t
就可以连续PING通电脑自身。而加上后面的-t,就会是连续不停地PING 。而不加的话只能PING 4个回合。 注意,指令部分可以大写或小写,而后面的参数t就只能是小写了。
然后,第一个干货来了:
如果你在执行PING指令真的如我上述所述的操作, 那说明你还没有意识到你的操作效率太低了。
更好的方式应该是:
右键中选择运行,然后直接在运行框中录入指令。
![](/club/bbs/upload/image/20230830/6382903238537084569501882.png)
然后就可以看到持续PING的结果。 这时候必须有参数-t,否则结果一闪而过,根本看不清楚。
![](/club/bbs/upload/image/20230830/6382903250254540106072109.png)
这种方式的好处是, 你近期的所有运行指令(包括PING指令)都可以被记忆,然后需要时只需要从列表中找到曾经PING过的IP。 这是WIN10。 如果WIN7,通常还需要从菜单栏的属性中把默认隐藏的运行指令释放出来。
![](/club/bbs/upload/image/20230830/6382903253246959359393615.png)
大部分情况下,需要测试的IP地址总是有限的那么几个,所以你就可以省掉了记忆IP的麻烦。 而如果列表中没有这个IP,也可以在已有的指令里找一个接近的稍微修改一下。而以后这个IP还会继续被增加记忆到列表中。
我因为要调试的网络设备多,看看我积累了多少。
我经常见到有工程师在现场调试网络的时候,不厌其烦地重复输入PING指令,甚至同一个IP地址,我每次看到他们慢腾腾的操作,都禁不住心里暗暗发问:你们是在演示自己的键盘输入有多熟练吗?
从历史记忆中选择需要的操作时间1S, 而录入的时间恐怕要超过10S。仅此一招,效率就差出来了9倍。
有被击中的回复请扣1 。和我一样操作的请扣2 。
以上只是开胃菜,然后进入正题。
我在前面写过一篇文章《0818 【万泉河】工控工程师的新梦想:电脑自由》,文中讲述了普天之下所有电脑都可以做网上邻居,都可以远程桌面互相登录操作的实现方法。
而在进行远程桌面调试之前,通常需要PING指令来确认网络已经打通。 包括要进行以太网的PLC调试,也需要先PING通。 或者如果原本正常的通讯突然中断了, 也首先需要用PING指令来确认网络通畅。
所以PING指令绝对是网络调试的先行利器。然而我在上一篇文章里面忘记了提及了,所以这回补上, 也尽量补全一点。
PING指令的本质是一种网络服务。 通讯伙伴之所以能对收到的PING指令做出回复,其实是因为其提供了叫做ICMP协议的服务。 而它的通讯既不是TCP也不是UDP,而是独立于两者之外,或者更上层的一种协议。 本文的目的不在于介绍协议原理,所以对其原理描述到此点到为止。 有兴趣的读者可以去找相关协议的原文读懂理解,而其实那方面很枯燥,并没多大意思。
所以可想而知,哪怕一个最简单的以太网设备, 比如ET200接口模块,它们在提供基本的网络通讯功能之外,都需要提供ICMP服务协议, 以便于你调试时确认网络通畅。 而如果没有支持这个协议,其实正常的通讯功能也完全有可能运行,只不过在网络调试时有所不便而已。 总之,不是运行成功的先决条件。
所以,我们也完全可以想得到,有的网络元件有可能会关掉其ICMP服务。 比如一些特殊的网络设备,在同一个网口上有多个IP,设计者就有可能只对其中某个IP开启ICMP,你可以PING通,然而其余的IP,就有可能不允许PING。
对电脑来说, 去PING别人纵然很容易,然而它自己,却未必那么容易允许被PING。比如WIN7和WIN10,缺省状态下防火墙都是对PING指令屏蔽的。 如果要对一台电脑PING,首先需要设置其防火墙允许PING。当然也可以先把防火墙关掉,测试确认是防火墙阻挡之后,再次进行防火墙的设置。
打开网络防火墙的高级设置,入站规则中,将规则按协议顺序排列:
![](/club/bbs/upload/image/20230830/6382903259892469766958249.png)
可以看到一批ICMPV4和ICMPV6的协议,我们可以顺便将这些规则全部启用。 而其实对IPV4来说PING指令放行的规则是:文件和打印机共享(回显请求-ICMPV4-IN)。
放行后网上邻居的其它电脑即可PING通,而禁用后会再次不通。
系统默认禁用被PING的原因是,如果这台服务器是裸漏在公网上, 那么如果有黑客操纵几千上万台电脑同时对这台服务器进行PING,也会导致这台电脑瘫痪。 这是一种最简单的DOS攻击,被成为死亡之PING。
所以对于公网上的电脑,放开PING是要小心的,需要有防范手段。
而绝大多数的云服务提供商,所提供的云服务器, 不仅仅在操作系统镜像中,而且在云平台的管理侧也有一层防火墙规则,也仍然需要单独设置打开放行ICMP,才可以PING。
前天,有用户要我协助调试跨网络的网上邻居和远程桌面。我把我的移动云的云服务器账户信息发给他要他测试。 他从我给建立的内网网络可以PING通云服务器,也可以远程桌面连接,然而我给他的公网IP却PING不通,问我咋回事。
我说,可能是我在云平台管理控制台中忘记打开了。
![](/club/bbs/upload/image/20230830/6382903263927814628798302.png)
于是,我进入云平台控制台, 增加了一条ICMP的规则后, 再次尝试,就畅通无阻了。
申请这个云平台的目的是为了方便随时随地使用手机和IPAD等也都可以登录到自己的内网,甚至以此为跳板跳到更多的自己的电脑。
所以,其实,在手机侧也有必要进行PING指令测试。手机也是以太网设备, 同一路由器下,对其IP进行PING 查询也可以通。 而从手机侧如何发出PING指令来测试其它的设备的在线情况呢?
答案是,不管是ANDRIOD还是IOS,都可以有免费的PING 功能的APP可以下载使用。
![](/club/bbs/upload/image/20230830/6382903268637048459678020.png)
![](/club/bbs/upload/image/20230830/6382903272229369695737247.png)
它们的图标就是一个黑色背景的DOS指令窗口。
这些工具对从事网络调试来说,都非常重要且实用了。
前几天,有WANQ用户联系咨询我,说远程的PLC连不上, PING 不通,而现场只有一个机械安装工。 我从WANQ的云平台上可以看到他远端的WANQ设备分明正常在线,然后就只有怀疑远端的WANQ的网口、网线、到PLC的那一段网络了。 而教给客户测试的方法就是,可以在手机上安装一个PING, 手机连到就地的WANQ的WIFI网络,测试PING 其PLC, 以验证发现网络问题。
那么虽然现场的工人没有电脑工具,然而只需要有手机,也仍然可以配合进行网络调试。
我们可以发现一个规律, 在做网络调试的时候, 发起网络通讯的一方,需要有PING指令配合验证。而被动通讯的一方,通常不需要。 甚至,由于网络的单向穿透特性,也只有发起通讯的一方的验证才可信。
比如,你不需要从一台简单的网络设备, 比如通信仪表,网关,PN从站,路由器等发出PING查询。甚至PLC。
然而PLC其实并不是一个简单网络设备,现在的性能比较好的PLC,其本质上都已经是一台微型电脑了。 所以它在网络中都不仅仅是接受网络连接, 还有可能是发起网络连接的一方。
比如S7-1500 CPU,可以发起网络通讯,与SQL数据库通讯,与MQTT服务器通讯。 这些类似功能都有功能块分享或出售。 尤其后者, MQTT服务器BROKER往往位于公网上,那么在CPU发起通讯之前,我们是不是也需要做个通讯测试,验证网络已经通了,然后再去调试程序。 而不是调试了半天程序而不成功之后,也不知道网络是否通, CPU到底能不能连到公网上的服务器?
那么,我的问题来了,在S7-1500中有没有PING指令, 如何运行PING指令测试?
在此之前,在不能完全确定网络通常之前,网络延迟多少,经过了多少个网关,TTL值多少一概不知道, 一概一头雾水,要我调试类似的SQL通讯, MQTT通讯, 我是不愿意的。我甚至情愿不做这样的网络通讯方案,情愿用其它的方案替代。