haierccc 发表于 2023-1-9 18:55

网管好帮手-使用批处理判断是内网故障还是外网故障

本帖最后由 haierccc 于 2023-1-15 05:25 编辑

企业的业务系统在运行过程中经常会出现各种问题,此时就该维护人员上场了。经过一系列或者潇潇洒洒,或者汗流浃背,或者蒙灯转向的操作,终于把业务恢复到正常。
现在的业务系统都依赖于电脑网络。随着规模的不同,业务网络可能简明扼要,也可能庞大复杂,怎样能花少的时间和最小的代价解决问题,是考验维护人员能力的一个重要指标。
作为一个医院的网管,我在维护网络的过程中有一些心得体会,写于此与大家分享。
对于C/S或者B/S架构而言,都至少存在一个S端(Server,服务端),终端操作员使用C端(Client,客户端业务软件)与S端交互完成业务。如果业务软件失效,那就是与S端的联系中断了。如果S端存在于内网就好办,因为失效的原因只需要从内网找。但如果S端存在于距离遥远的另一端,中间的接入网也不是由本公司承建,排查故障的过程就会比较繁琐。
下图是一个典型的企业网络架构。医院的门诊、住院部门的业务终端需要连接2台服务器:院内服务器和医保网服务器,前者位于医院内网,后者位于医保公司,中间是联通承建的接入网。为了简明扼要,拓扑做了极致简化,只标出了排障有关的4个重要节点:

1.1.1.1:联通接入网的院端IP。
1.1.1.2:联通接入网的下一跳IP。
10.20.30.40:医保服务器IP。
192.168.66.1:院内服务器。
解决问题的第一步是找对正确的方向,方向对了事半功倍,方向错了事倍功半。对于本例,完整的网络由3方承建:医院,联通和医保。当有工作人员反应业务系统出现问题,第一步就是要判断问题是出现在医院内网、还是联通的接入网抑或医保公司的内网。准确的找到故障所处区域之后再采取对应的措施,排障速度就会大大加快了。
判断原则是:由下及上,由内及外。
首先判断是否是内网的问题,再判断是否是接入网的问题,最后判断是否是医保内网的问题。​​步骤一:
判断本地网卡是否断开。机箱灰尘过多、水晶头锈蚀、交换机断电都会导致网卡断开。
如果连接正常,继续向上排查,否则得出结论:本地网卡断开。
步骤二:
ping 院内服务器 192.168.66.1,如果不通,得出结论:院内服务器或内网的问题。
如果通了,继续向上排查。
步骤三:
ping 院端防火墙外网口 1.1.1.1,如果不通,得出结论:医院内网与防火墙断开,检查两者。
如果通了,说明内网与防火墙连接正常,继续向上排查。
步骤四:
ping 联通接入网的下一跳 1.1.1.2,如果通了,说明接入网无问题,继续向上排查。
如果不通,稳妥起见需要手动排查一下。把联通入户线从防火墙拔出接入电脑,绕过防火墙ping下一跳,如果通了表明防火墙有问题,检查配置,如果不通表明联通接入网已经断开,向联通报修。
​步骤五:
ping 医保服务器 10.20.30.40,如果不通,得出结论:医保公司内网的问题,通知医保公司。
​如果通了,说明经过逐层排查,内网服务器IP和医保服务器IP都通了,它们的网络层都无问题,但应用层有问题,无法对外提供服务。
因为2台服务器各自承担不同的功能,所以客户端软件的报错信息既有可能是院内服务器故障导致,也有可能是医保服务器故障导致,维护人员需要知道何种报错信息是哪个服务器导致的,然后采取对应的措施。
根据以上步骤画出流程图:

流程已经有了,接下来进入关键步骤:编写批处理。把判断步骤写成代码,由机器自动判断问题所在,这就大大提升了管理员的工作效率。
批处理的编写需要一些技巧:
​怎样判断本地网卡的通断?
​先确定本地网卡的名字。以有线网卡为例,WIN10默认叫“以太网”,WIN7和XP默认叫“本地连接”,当然你也可以修改网卡名字:

然后运行netsh命令,判断指定网卡的通断,以WIN10默认网卡名字“以太网”为例:
netsh interface show interface 以太网

其输出有“已连接”字符串,意为名字为“以太网”的网卡连接正常。若没有该字符串,说明网卡断开。
怎样判断指定IP的通断?
有很多种方法判断指定IP的通断。WIN10的ping命令就可以有2种方法:

方法一:以字符串“TTL”作为网络通断的判据。如果网络通畅,该字符串就存在,网络断开就不存在。
​方法二:如果ping通,返回退出码0,如果不通,返回退出码1,于是可以写下批处理命令,如果不通就转向error例程:
ping 1.2.3.4
IF ERRORLEVEL1 goto :error
本文使用方法一。
批处理如下,适配WIN10和WIN7环境。保存为ANSI编码,而非默认的UTF-8。
@echo off
:: 当业务系统报错,运行批处理判断问题出在网络的哪个部分,适用于WIN10和WIN7
:: 如果netsh命令没有返回字符串“已连接”,表明本地网卡断开
:: 如果ping命令没有返回字符串“ttl=”,表明目标IP断开
title 判断网络故障范围
echo.
echo正在测试网络。。。

::测试本地网卡是否断开
netsh interface show interface 以太网|findstr.exe /i /c:"已连接">nul
if %errorlevel% NEQ 0 ( goto :bddk )

::测试内网服务器地址
ping.exe -n 3192.168.66.1|findstr.exe /i /c:"ttl">nul
if %errorlevel% NEQ 0 ( goto :nwdk )

::测试联通接入网防火墙院端地址
ping.exe -n 31.1.1.1|findstr.exe /i /c:"ttl">nul
if %errorlevel% NEQ 0 ( goto :wwdk )

::测试接入网下一跳地址
ping.exe -n 31.1.1.2|findstr.exe /i /c:"ttl">nul
if %errorlevel% NEQ 0 ( goto :jrw )

::测试医保公司内网服务器地址
ping.exe -n 310.20.30.40|findstr.exe /i /c:"ttl">nul
if %errorlevel% NEQ 0 ( goto :ybw)
goto end

:bddk
mshta javascript:alert("本机网卡已断开。\n交换机可能掉电。\n重新插拔网线。");close();
goto exit

:nwdk
mshta javascript:alert("无法访问内网服务器IP:192.168.66.1。");close();
goto exit

:wwdk
mshta javascript:alert("无法访问联通接入网防火墙院端IP:1.1.1.1");close();
goto exit

:jrw
mshta javascript:alert("无法访问联通接入网下一跳IP:1.1.1.2\n绕过防火墙,用PC ping下一跳。\n如果通了,检查防火墙配置。\n如果仍然不通,联系联通公司。");close();
goto exit

:ybw
mshta javascript:alert("无法访问医保网服务器IP:10.20.30.40,联系医保公司。");close();
goto exit

:end
mshta javascript:alert("内网服务器和医保网服务器的IP层都通畅。\n根据报错信息自行判断,谁提供的服务出现异常。");close();

:exit当判断出结果,批处理会弹出文本框予以说明:





现在你可以把批处理丢给终端操作员,出现问题时给你念出文本框的内容,不用去现场也能知道问题出在哪里了,直奔故障点而去,岂不美哉!
根据你所处的网络环境修改代码,可以精确到任何一个层级。

尊称 发表于 2023-1-10 07:19

你到会懒省劲儿呀

haierccc 发表于 2023-1-10 07:57

尊称 发表于 2023-1-10 07:19
你到会懒省劲儿呀

对呀,这就是“巧干活”么

haierccc 发表于 2023-1-10 10:41

请版主删除此贴,我重新写

尊称 发表于 2023-1-10 19:17

直接改就行了,删什么删

haierccc 发表于 2023-1-11 00:05

本帖最后由 haierccc 于 2023-1-11 00:09 编辑

尊称 发表于 2023-1-10 19:17
直接改就行了,删什么删
编辑界面进去,看不到之前上传的图片,无法删除。

尊称 发表于 2023-1-11 04:30

haierccc 发表于 2023-1-11 00:05
编辑界面进去,看不到之前上传的图片,无法删除。

图片能删除,你好好看看,至少网页上看不到了,服务器上什么逻辑不知道,也能做到自动更新删除。

haierccc 发表于 2023-1-11 22:18

尊称 发表于 2023-1-11 04:30
图片能删除,你好好看看,至少网页上看不到了,服务器上什么逻辑不知道,也能做到自动更新删除。
...

必须首先上传一张图片,才能看到之前的图片,否则默认是看不到的。

红色狂想 发表于 2023-1-11 22:58

haierccc 发表于 2023-1-11 22:18
必须首先上传一张图片,才能看到之前的图片,否则默认是看不到的。

的确是这样,这个问题我很早就发现了,应该存在于Discuz!的所有产品中,感觉这不是BUG而是设计问题,不光是要先上传一张图片才能看到之前的图片,还有在你编辑图文混排帖子时,文章很长,一边编辑文本,一边上传图片插入,如果编辑撰写的时间较长,最后当你点击发表提交时,页面会等待十几秒,然后弹出错误连接超时,而实际上你这篇帖子已经成功发表了{:1_450:}
页: [1]
查看完整版本: 网管好帮手-使用批处理判断是内网故障还是外网故障