巧用批处理查找端口

2016-11-26 11:27
网络安全和信息化 2016年6期
关键词:端口号批处理调用

引言:批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言。批处理程序虽然是在命令行环境中运行,但不仅仅能使用命令行软件,任何当前系统下可运行的程序都可以放在批处理文件中运行。

作者所在单位要部署一套温湿度监控系统。该系统由华图S400W无线温湿度记录仪、HE2400无线基站和监控软件组成。一个或多个无线温湿度记录仪探测环境温湿度,通过RF射频传送给该环境中的无线基站,无线基站经有线或无线局域网将监测数据通过UDP协议传送至监控服务器。客户端通过B/S结构可查看温湿度记录,接收报警。

该系统有40多个无线基站接入到二层交换机,局域网为核心、接入两层结构,接入层交换机有30多台,按部门划分了30多个VLAN,为管理方便,部署中需将所有的无线基站划归同一VLAN。如果手工为所有无线基站调整VLAN、分配固定IP,工作量庞大,因此想用批处理来实现。

实现思路

图1 网络拓扑图

首先:每个无线基站均有MAC地址,先统一把所有无线基站逐一连接笔记本电脑,预先设置好固定IP,192.168.31.0/24网段,并记录下其MAC地址;

然后,将所有无线基站部署到各监测点,开机;

最后,在局域网中一台电脑上运行批处理程序,输入MAC地址,即可找到该基站所连接的交换机端口,将端口划至VLAN 31。

批处理中需先Telnet至核心交换机,查找指定MAC所直连的二层交换机,再Telnet至二层交换机,找到该MAC所连接的端口,并修改端口的VLAN号。然而批处理在使用Telnet时无法自动输入Telnet登录密码,而VBscript脚本使用SendKeys命令能做到,因此若把二者结合使用,就能达到想要的效果。网络拓扑如图1所示。

FindMac.bat批处理内容如下:

@rem 第一步:输入MAC地址,Telnet核心交换机查找该MAC所连接的核心交换机端口

@set /p mymac=请输入要查找的MAC:

@del c: elcore.vbs

@echo on error resumenext >>c: elcore.vbs

@echo dim WshShe ll>>c: elcore.vbs

@echo Set WshSh ell=WScript.CreateObje ct("WScript.Shell")>>c: elcore.vbs

@echo WshShell.run"c md">>c: elcore.vbs

@echo WshShell.App Activate"c:windowssys tem32cmd.exe">>c: elc ore.vbs

@echo WScript.Sleep 200>>c: elcore.vbs

@echo WshShell.SendKeys"telnet 192.16 8.1.254{ENTER}">>c: elcore.vbs

@echo WScript.Sleep 100>>c: elcore.vbs

@echo WshShell.AppActivate"telnet.exe">>c: elcore.vbs

@echo WScript.Sleep 2000>>c: elcore.vbs

@echo WshShell.SendKey s"jikon {ENT ER}">>c: elcore.vbs

@echo WScript.Sleep 2000>>c: elcore.vbs

@echo WshShell.Send Keys"sh mac add add %m ymac%{ENTER}">>c: elcore.vbs

@echo WScript.Sleep 1000>>c: elcore.vbs

@echo WshShell.SendKeys"sh cdp nei{ENT ER}">>c: elcore.vbs

@echo WScript.Sleep 1000>>c: elcore.vbs

@call c: elcore.vbs

@rem 第二步:输入二层交换机的管理IP,查找该MAC所连接的二层交换机端口

@cls

@set /p sw=请输入该MAC所连接的二层交换机IP:

@del c: elsw.vbs

@echo on error resumenext >>c: elsw.vbs

@echo dim WshSh ell>>c: elsw.vbs

@echo Set WshSh ell= WScript.CreateObject("WScript.Shell")>>c: e lsw.vbs

@echo WshShell.ru n"cmd">>c: elsw.vbs

@echo WshShell.App Activate"c:windowssy stem32cmd.exe">>c: elsw.vbs

@echo WScript.Sleep 200>>c: elsw.vbs

@echo WshShell.Send Keys"telnet %sw%{EN TER}">>c: elsw.vbs

@echo WScript.Sleep 100>>c: elsw.vbs

@echo WshShell.App Activate"telnet.exe ">>c: elsw.vbs

@echo WScript.Sleep 2000>>c: elsw.vbs

@echo WshShell.SendKeys"jikong{EN TE R}">>c: elsw.vbs

@echo WScript.Sleep 2000>>c: elsw.vbs

@echo WshShell.SendKeys"sh mac addadd%mymac%{ENTER}">>c: elsw.vbs

@echo WScript.Sleep 1000>>c: elsw.vbs

@echo WshShell.SendKeys"sh cdp nei{EN TER}">>c: elsw.vbs

@echo WScript.Sleep 1000>>c: elsw.vbs

@call c: elsw.vbs

@rem 第三步:输入二层交换机的管理IP,查找该MAC直连的二层交换机端口

@cls

@set /p swzl=请输入该MAC所直连的二层交换机IP:

@del c: elswzl.vbs

@echoon error resume next >>c: elswzl.vbs

@echodim WshShell>>c: elswzl.vbs

@echo Set WshSh ell= WScript.CreateObject("WScript.Shell")>>c: elswzl.vbs

@echo WshShell.run"cmd">>c: elswzl.vbs

@echo WshShell.App Activate"c:windowssys tem32cmd.exe">>c: elswzl.vbs

@echo WScript.Sleep 200>>c: elswzl.vbs

@echo WshShell.SendKeys"telnet %swz l%{ENTER}">>c: elsw zl.vbs

@echo WScript.Sleep 100>>c: elswzl.vbs

@echo WshShell.AppActivate"telnet.exe">>c: elswzl.vbs

@echo WScript.Sleep 2000>>c: elswzl.vbs

@echo WshShell.SendKeys"jik ong{ENT ER}">>c: elswzl.vbs

@echo WScript.Sleep 2000>>c: elswzl.vbs

@echo WshShell.Sen dKeys"sh mac add add%mymac%{ENTER}">>c: elswzl.vbs

@echo WScript.Sleep 1000>>c: elswzl.vbs

@call c: elswzl.vbs

@rem 第四步:输入二层交换机端口号,修改VLAN

@cls

@set /p swzldk=请输入该MAC所直连的二层交换机端口号:

@del c: elswzldk.vbs

@echo on error resume next >>c: elswzldk.vbs

@echo dim WshShell>>c: elswzldk.vbs

@echo Set WshShell=WScript.Creat eObj ec t("WScript.Shell")> >c: elswzldk.vbs

@echo WshShell.run"cmd">>c: elswzldk.vbs

@echo WshShell.App Activate"c:windowssys tem32cmd.exe">>c: elswzldk.vbs

@echo WScript.Sleep 200>>c: elswzldk.vbs

@echo WshShell.SendKeys"telnet %swzl%{ENTER}">>c: elswzl dk.vbs

@echo WScript.Sleep 100>>c: elswzldk.vbs

@echo WshShell.AppActivate"telnet.exe">>c: elswzldk.vbs

@echo WScript.Sleep 2000>>c: elswzldk.vbs

@echo WshShell.SendKeys"jikong{EN TER}">>c: elswzldk.vbs

@echo WScript.Sleep 2000>>c: elswzldk.vbs

@echo WshShell.SendKeys"en{ENTER}">>c: elswzldk.vbs

@echo WScript.Sleep 1000>>c: elswzldk.vbs

@echo Wsh Shell.SendKeys "jikong{EN TER}">>c: elswzldk.vbs

@echo WSc ript.Sleep 2000>>c: elswzldk.vbs

@echo WshShell.SendKeys"conf t{ENT ER}">>c: elswzldk.vbs

@echo WSc ript.Sleep 1000>>c: elswzldk.vbs

@echo Wsh Sh ell.SendKeys"int f0/%swzld k%{ENTER}">>c: elswzldk.vbs

@echo WScript.Sleep 1000>>c: elswzldk.vbs

@echo WshShell.SendKeys"swit acce vlan 31{ENTER}">>c: elswzldk.vbs

@echo WScript.Sleep 1000>>c: elswzldk.vbs

@echo WshShell.SendKeys"no shut{EN TER}">>c: elswzldk.vbs

@echo WScript.Sleep 1000>>c: elswzldk.vbs

@echo WshShell.SendKeys"end{ENTER}">>c: elswzldk.vbs

@echo WScript.Sleep 1000>>c: elswzldk.vbs

@echo WshShell.SendKeys"wr{ENTER}">>c: elswzl dk.vbs

@echo WScript.Sleep 1000>>c: elswzldk.vbs

@call c: elswzldk.vbs

@rem 清除所定义的变量

@set mymac=

@set sw=

@set swzl=

@set swzldk=

批处理运行过程的解释:

图2 输入MAC地址

图3 核心交换机连接拓扑

图4 输入二层交换机IP地址

图5 二层交换机连接拓扑

图6 输入直连的二层交换机IP地址

第一步:定义变量mymac,让用户从键盘输入无线基站的MAC地址,将第一段代码追加到telcore.vbs文件并调用,即Telnet核心交换机192.168.1.254,查找该MAC所连接的核心交换机端口。

拓扑中显示核心交换机通过光纤连接了9台二层交换机,该MAC地址连接在Gi3/1端口所连接的二层交换机上,该二层交换机名称是Z2FN1,对telswzl.vbs的调用完成。用户查找交换机hostname命名表,找到Z2FN1的IP是192.168.1.201。

第二步:定义变量sw,让用户从键盘输入二层交换机Z2FN1的管理IP地址192.168.1.201,将第二段代码追加到telsw.vbs文件并调用,即Telnet二层交换机 192.168.1.201,查找该MAC所连接的二层交换机端口。

拓扑中显示二层交换机Z2FN1共连接了3台交换机机,即Gi0/1口通过光纤连接核心交换机、GI0/2千兆电口连接二层交换机Z2FN2、百兆电口Fa0/46连接二层交换机Z2FD1。该MAC地址连接在Gi0/2端口所连接的二层交换机上,该二层交换机名称是Z2FN2,对telsw.vbs的调用完成。用户查找交换机hostname命名表,找到Z2FN2的IP是192.168.1.202。

第三步:定义变量swzl,让用户从键盘输入二层交换机Z2FN2的管理IP地址192.168.1.202,将第三段代码追加到telswzl.vbs文件并调用,即Telnet二层交换机 192.168.1.202,查找该MAC直连的二层交换机端口。

显示该无线基站连接在192.168.1.202这台二层交换机的Fa0/8百兆电口上,对telswzl.vbs的调用完成。

图7 找到端口号

图8 输入端口号

图9 将端口加入VLAN31

第四步:定义变量swzldk,让用户从键盘输入端口号8,将第四段代码追加到telswzldk.vbs文件并调用,将端口加入VLAN 31,启用端口并保存。

最后,删除所定义的4个变量。至此批处理结束。

如果网络拓扑为核心层、汇聚层、接入层的三层结构,此过程还要增加一个步骤。显然,该批处理还不够智能化,最理想的结果是用户只需输入MAC地址,所有的工作自动完成,因此尚需进一步优化,而其复杂度和代码量将大大增加。

猜你喜欢
端口号批处理调用
恶意批处理文件导致电脑黑屏、反复重启、无响应的原因分析及应对思路
在Docker容器中安装应用程序
核电项目物项调用管理的应用研究
PyroBatchFTP
借助批处理 让Cortana变聪明
浅谈以java为基础的Socket通信简介及实现
基于系统调用的恶意软件检测技术研究
Winsock编程在《计算机网络基础》教学中的应用
基于Android系统的互动展示APP的研究与设计
利用RFC技术实现SAP系统接口通信