李强+李健
摘要:随着Ad Hoc通讯技术的发展,Ad Hoc网络通讯将在实际场景中得到大规模的应用,开发一种基于linux操作系统和BATMAN通讯协议之上的Ad Hoc网络监控和管理软件,通过Python、PyQt和Qt实现软件开发,采用多线程操作实现不同的监控和管理功能,有socket 程序实现上位机与网络中节点之间TCP、UDP通讯,最终实现了监控Ad Hoc网络拓扑图和管理网络中的节点参数。
关键词:Ad Hoc;网络监控;网络管理;PyQt
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2017)06-0041-03
Abstract: The development of Ad Hoc communication technology, Ad Hoc network communication will be applied in large scale in the real scene. A software for monitoring and managing Ad Hoc network based on Linux operating system and BATMAN communication protocol is developed. Software development is realized through Python, PyQt and Qt, and different monitoring and management functions are realized by multithreading operation. The socket program realizes the host computer and nodes in the network TCP, UDP communication, the ultimate realization of the monitoring Ad Hoc network topology and network management node parameters.
Key words: Ad Hoc; Network Monitoring; Network Management; PyQt
无线通讯技术和计算机技术的发展,无线通讯移动技术受到人们的广泛关注。目前多数移动通信系统是集中式控制模式,需要基于预先架设好的网络设施才能通讯,为了在没有固定基站的地方进行通讯,一种新的网络技术—Ad Hoc网络技术[1],整个网络没有固定的基础设施,每个节点都是移动的,并且都能以任意方式动态地保持与其它节点的联系。这种网络应用场合主要有:单兵作战,灾后救援、反恐、紧急事故处理等临时的场地[2] ,图1为单兵作战示意图,为保证网络中每个节点之间能正常通讯和快速定位网络通讯故障[3],开发一种监控和管控软件是非常必要。
1 Ad Hoc网络监控和管理需求
1.1 Ad Hoc网络监控
在普通的网络中,在监控整个网络中的节点时,一般的方法是登录设备,在设备上运行命令后返回设备的参数信息,有参数信息来判断设备的健康状态,这种方法既繁琐也容易受人主观判断的影响[4]。由于Ad Hoc网络使用环境决定用普通方法监控网络中的设备是不可能实现的,因为管理人员不可能在野外环境下实时的登陆设备和查看设备的参数。因此,開发一种软件来监控Ad Hoc网络是非常必要的,管理人员通过监控软件直观的查看网络健康状况包含网络拓扑图、链路质量以及网络中节点的参数信道、功率、IP地址、HT模式、HW模式、节点名和密码等参数[5]。
1.2 网络管理
网络管理在这里主要体现的是配置管理,配置管理包含网络中的节点参数,如功率、信道、节点名、IP地址等。设计上位机管理软件实现修改网络中节点的参数,根据节点之间的信号强度可以修改节点的功率,维持最佳的通讯效果并实现节能;通过查看节点之间的链路质量,选择干扰最小的信道进行网络通讯[6];为了容易记忆网络中的各个节点,可把节点名及节点的IP地址修改为管理员更易记忆的节点名或IP地址。
1.3 监控和管理软件设计
Ad Hoc网络监控和管理软件是基于batman-adv路由协议之上开发的,因此关于网络中的节点移动性、链路质量、信号强度等算法都不再详细介绍。为实现上位机通过Wi-Fi的方式连接Ad Hoc网络中节点,在网络中的各节点上增加了虚拟AP,方面上位机通过无线连接网络中的节点,设备有5G和2.4G两个网卡。
Python2.7、PyQt4和Eric4集成开发环境,Qt设计上位机画面,设备上运行的程序采用Python编写。
2 检测网络中上位机的IP地址
网络中各个节点上运行程序和上位机上运行的程序实现通讯,上位机需要获取网络中设备的信息,上位机是会话的发起者,它以广播的形式发送广播包并绑定固定的端口号,广播包中包含自己的信息,网络中各个节点运行的程序也绑定同样的端口号,节点收到上位机发起的广播包之后,检验识别码是否和事先规定的一致,若一致,则解析数据包,数据包中包含上位机的IP地址和当前时间,检测此设备是否连接超时,把当前时间与上次检测时间做差,如果差值小于设置的固定值,说明连接正常,否则连接超时,当出现连接超时时,需把此上位机的IP从监控列表中删除,之后网络中的节点把自己的信息发送给监控列表中存在的上位机IP。如图2所示为网络中节点设备上运行server程序设计流程图。上位机上运行client程序与设备上运行的server程序是绑定的同一个端口号,上位机运行的client程序是会话的发起者,上位机连接网络中的任意设备后运行上位机程序时client发起会话,客户端和服务器开始通讯。
3 网络中设备的信息发送给上位机
网络中各个设备搜集自己的信息,把信息打包发送给连接网络中的上位机,为上位机监控网络中的设备提供数据来源,在设备上运行命令,会返回需要的信息,通过返回值的信息分析网络中节点设备运行状态、节点设备的参数以及连接此节点设备的客户端,为上位机监控网络中节点提供数据来源。
在网络节点设备上运行命令用来查看节点配置参数,当网络环境发生改变时也可通过命令对网络进行相应的修改,如命令ifconfig -a 显示全部的接口信息,命令包括查看网络的连接状况和MAC地址等。iwconfig命令为系统配置无线网络设备或显示无线网络设备信息,iwconfig命令类似于ifconfig命令,但配置对象是无线网卡,它对网络中节点设备进行无线参数配置。通过命令iw wlan0 station dump可查看与此设备无线网卡0连接的网络中节点设备的MAC地址、信号强度和连接延时等设备之间信息参数。batctl o可以查看路由表,包括源节点、目的节点、下一跳和潜在下一跳节点的MAC地址。设备信息发送给上位机程序server流程图,如图3所示。
4 上位机管理网络中的设备
在管理网络中各节点,可以修改节点的节点名、IP地址、HT模式、发射功率、通讯频率、AP的SSID和密码等参数,修改网络中节点的参数可以使网络中的节点在组网和实际应用场景更加灵活方便。上位机创建TCP客户端,网络中节点运行TCP服务器,上位机把修改节点参数的命令下达后,上位机把信息下发给节点,节点收到上位机发过来的信息,解析信息,以shell脚本的形式在节点设备上运行,实现修改网络中节点的参数。
4 软件实现
设备上运行的Python程序主要包含三个功能模块,在主程序运行后,主进程开启了三个线程,分别用于不同的功能模块:网络中的设备接收上位机发送的广播包,网络中设备收到广播包后,回复上位机一个信息中包含自己的IP地址,用于检测整个网络中运行的上位机IP地址为网络中上位机监控整个网络中的节点提供数据来源;网络中设备运行搜集自己的信息序,首先是设备运行命令,把返回的信息打包,最终以数据包的形式发送给整个网络所有的上位机[7];上位机首先修改网络中设备的参数并保存,然后把设备的参数信息打包发送给网络中参数需修改的设备,设备接收数据后,以shell形式运行该命令,实现修改设备参数的目的。最终以信号和槽的形式把参数显示出来,实现监控和管理网络中的节点设备[8]。
4.1 监控画面设计
基于linux系统开发的 Ad Hoc 网络监控软件,期望通过图形化的方式,实时的将Ad Hoc网络中节点信息包括拓扑图、路由信息、网络中节点参数、节点之间的信号强度、信道、连接网络节点的客户端MAC地址、工作模式等信息直观地呈现在开发人员面前,图形化界面为工作人员监控和管理Ad Hoc 网络提供了简单又方便的方法,为工作人员实时了解整个网络健康状况提供了可能,为以后Ad Hoc网络在实际的应用中给现场工作人员和设备维护人员提供了便利条件。
上位机图像界面采用qt编写,包含登陆界面,拓扑图主界面、节点参数界面等,界面上每个对话框都有对应信号和槽,在图形用户界面编程中,一个窗口部件的变化被通知给另一个窗口部件[9-10],都是通过信号和槽形式实现的。
4.2软件代码实现
4.2.1 Ad Hoc监控拓扑图
監控网络中的拓扑图,拓扑图上显示网络中的节点IP地址,两个直接通讯的节点用线连接,并显示两个节点之间的通讯频率,拓扑图显示代码如下:
def updateClients(self, clientList):
global gloIP
for item in clientList:
gloIP = item[0]
break
for item in clientList:
try:
self.lastRecvTime[item[0]]
except KeyError:
self.lastRecvTime[item[0]] = item[1]
self.clientDict.clear()
4.2.2 监控Ad Hoc网络节点参数
监控和管理网络中的节点参数,监控网络中的节点需要从节点上获取节点参数和节点信息,因此,需在节点上运行命令搜集节点信息,然后把信息发送给上位机,用于上位机监控节点信息来源,搜集节点信息部分程序如下所示:
runCollectInfo():
msgList = []
msgList.append(get_command_result("uname", "-n"))
msgList.append(get_command_result("ifconfig", "-a"))
msgList.append(get_command_result("iwconfig"))
4.2.3 管理Ad Hoc网络中的节点
管理网络中的节点,上位机修改节点参数后保存,上位机发送修改节点参数命令给网络中的节点,节点收到上位机发送的数据包,解析数据包,在节点上以shell的形式运行命令,从而修改节点的参数,部分程序如下所示:
def runCommandFromNet():
print BU.cRight + " Command running thread: Start TCP server. Waiting for command to run.\n"
try:
skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skt.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
skt.bind(("", BU.iRunCommandPort))
skt.listen(100)
print BU.cRight + " Command running socket created."
4.2.4 测试监控和管理软件
代码完成后测试效果,上位机连接Ad Hoc网络中的节點,通过Wi-Fi或以太网连接,在Eric开发环境上运行程序,可看到如图4为网络系统监控拓扑图,图5为网络中节点的监控信息,也可修改节点参数。
5 结束语
从调试结果和长时间测试来看,软件能实时监控和管理Ad Hoc 网络节点的目的,且非常明了的显示网络中的节点拓扑图和节点之间的链路质量、节点的参数信息以及管理网络中的节点等。为网络管理员在Ad Hoc网络实际应用监控和管理网络中的节点提供便利,为Ad Hoc网络以后在发展提供重要保障。
参考文献:
[1] 贾志城.基于Ad Hoc网络的反恐处突远程监控系统的研究与实现[J].自动化与仪器仪表,2014(3):108-109.
[2] 王秀芝,石志东,房卫东,等.无线Ad Hoc网络匿名通信技术的研究[J].计算机应用与软件,2016,33(2):89-93.
[3] 李瑞江.物联网下自组织无线网络Ad Hoc算法的新技术设计[J].现代电子技术,2015(11):24-26.
[4] 刘旭东.基于 Android 的 ad Hoc 网络节点间安全通信的研究与实现[D].北京:北京工业大学,2013(5).
[5] 张天宇.一种基于batman的Mesh网络路由协议改进方法[D].大连:大连理工大学, 2014(6).
[6] 杨吉.无线传感器网络监控软件平台开发[D].北京:北京工业大学,2010(5).
[7] 谢忠明.无线Mesh网络多径路由算法的研究与应用[D].苏州:苏州大学,2015(5).
[8] 杜传报,全厚德,李召瑞,等.无线双通道Ad Hoc网络分层路由协议设计与分析[J].指挥与控制学报.2015(4):458-464.
[9] TIAN Yu.Design and application of sink node for wireless sensor network, COMPLE[J].International Journal for Computation and Mathematics in Electrical and Electronic Engineering, 2013,32(2):531-544.
[10] 王华,薛涛,崔云平,等.Ad Hoc网络技术[J].硅谷,2012(17):9-10.