李強(qiáng)+李健
摘要:隨著Ad Hoc通訊技術(shù)的發(fā)展,Ad Hoc網(wǎng)絡(luò)通訊將在實(shí)際場(chǎng)景中得到大規(guī)模的應(yīng)用,開(kāi)發(fā)一種基于linux操作系統(tǒng)和BATMAN通訊協(xié)議之上的Ad Hoc網(wǎng)絡(luò)監(jiān)控和管理軟件,通過(guò)Python、PyQt和Qt實(shí)現(xiàn)軟件開(kāi)發(fā),采用多線程操作實(shí)現(xiàn)不同的監(jiān)控和管理功能,有socket 程序?qū)崿F(xiàn)上位機(jī)與網(wǎng)絡(luò)中節(jié)點(diǎn)之間TCP、UDP通訊,最終實(shí)現(xiàn)了監(jiān)控Ad Hoc網(wǎng)絡(luò)拓?fù)鋱D和管理網(wǎng)絡(luò)中的節(jié)點(diǎn)參數(shù)。
關(guān)鍵詞:Ad Hoc;網(wǎng)絡(luò)監(jiān)控;網(wǎng)絡(luò)管理;PyQt
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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
無(wú)線通訊技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展,無(wú)線通訊移動(dòng)技術(shù)受到人們的廣泛關(guān)注。目前多數(shù)移動(dòng)通信系統(tǒng)是集中式控制模式,需要基于預(yù)先架設(shè)好的網(wǎng)絡(luò)設(shè)施才能通訊,為了在沒(méi)有固定基站的地方進(jìn)行通訊,一種新的網(wǎng)絡(luò)技術(shù)—Ad Hoc網(wǎng)絡(luò)技術(shù)[1],整個(gè)網(wǎng)絡(luò)沒(méi)有固定的基礎(chǔ)設(shè)施,每個(gè)節(jié)點(diǎn)都是移動(dòng)的,并且都能以任意方式動(dòng)態(tài)地保持與其它節(jié)點(diǎn)的聯(lián)系。這種網(wǎng)絡(luò)應(yīng)用場(chǎng)合主要有:?jiǎn)伪鲬?zhàn),災(zāi)后救援、反恐、緊急事故處理等臨時(shí)的場(chǎng)地[2] ,圖1為單兵作戰(zhàn)示意圖,為保證網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)之間能正常通訊和快速定位網(wǎng)絡(luò)通訊故障[3],開(kāi)發(fā)一種監(jiān)控和管控軟件是非常必要。
1 Ad Hoc網(wǎng)絡(luò)監(jiān)控和管理需求
1.1 Ad Hoc網(wǎng)絡(luò)監(jiān)控
在普通的網(wǎng)絡(luò)中,在監(jiān)控整個(gè)網(wǎng)絡(luò)中的節(jié)點(diǎn)時(shí),一般的方法是登錄設(shè)備,在設(shè)備上運(yùn)行命令后返回設(shè)備的參數(shù)信息,有參數(shù)信息來(lái)判斷設(shè)備的健康狀態(tài),這種方法既繁瑣也容易受人主觀判斷的影響[4]。由于Ad Hoc網(wǎng)絡(luò)使用環(huán)境決定用普通方法監(jiān)控網(wǎng)絡(luò)中的設(shè)備是不可能實(shí)現(xiàn)的,因?yàn)楣芾砣藛T不可能在野外環(huán)境下實(shí)時(shí)的登陸設(shè)備和查看設(shè)備的參數(shù)。因此,開(kāi)發(fā)一種軟件來(lái)監(jiān)控Ad Hoc網(wǎng)絡(luò)是非常必要的,管理人員通過(guò)監(jiān)控軟件直觀的查看網(wǎng)絡(luò)健康狀況包含網(wǎng)絡(luò)拓?fù)鋱D、鏈路質(zhì)量以及網(wǎng)絡(luò)中節(jié)點(diǎn)的參數(shù)信道、功率、IP地址、HT模式、HW模式、節(jié)點(diǎn)名和密碼等參數(shù)[5]。
1.2 網(wǎng)絡(luò)管理
網(wǎng)絡(luò)管理在這里主要體現(xiàn)的是配置管理,配置管理包含網(wǎng)絡(luò)中的節(jié)點(diǎn)參數(shù),如功率、信道、節(jié)點(diǎn)名、IP地址等。設(shè)計(jì)上位機(jī)管理軟件實(shí)現(xiàn)修改網(wǎng)絡(luò)中節(jié)點(diǎn)的參數(shù),根據(jù)節(jié)點(diǎn)之間的信號(hào)強(qiáng)度可以修改節(jié)點(diǎn)的功率,維持最佳的通訊效果并實(shí)現(xiàn)節(jié)能;通過(guò)查看節(jié)點(diǎn)之間的鏈路質(zhì)量,選擇干擾最小的信道進(jìn)行網(wǎng)絡(luò)通訊[6];為了容易記憶網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn),可把節(jié)點(diǎn)名及節(jié)點(diǎn)的IP地址修改為管理員更易記憶的節(jié)點(diǎn)名或IP地址。
1.3 監(jiān)控和管理軟件設(shè)計(jì)
Ad Hoc網(wǎng)絡(luò)監(jiān)控和管理軟件是基于batman-adv路由協(xié)議之上開(kāi)發(fā)的,因此關(guān)于網(wǎng)絡(luò)中的節(jié)點(diǎn)移動(dòng)性、鏈路質(zhì)量、信號(hào)強(qiáng)度等算法都不再詳細(xì)介紹。為實(shí)現(xiàn)上位機(jī)通過(guò)Wi-Fi的方式連接Ad Hoc網(wǎng)絡(luò)中節(jié)點(diǎn),在網(wǎng)絡(luò)中的各節(jié)點(diǎn)上增加了虛擬AP,方面上位機(jī)通過(guò)無(wú)線連接網(wǎng)絡(luò)中的節(jié)點(diǎn),設(shè)備有5G和2.4G兩個(gè)網(wǎng)卡。
Python2.7、PyQt4和Eric4集成開(kāi)發(fā)環(huán)境,Qt設(shè)計(jì)上位機(jī)畫面,設(shè)備上運(yùn)行的程序采用Python編寫。
2 檢測(cè)網(wǎng)絡(luò)中上位機(jī)的IP地址
網(wǎng)絡(luò)中各個(gè)節(jié)點(diǎn)上運(yùn)行程序和上位機(jī)上運(yùn)行的程序?qū)崿F(xiàn)通訊,上位機(jī)需要獲取網(wǎng)絡(luò)中設(shè)備的信息,上位機(jī)是會(huì)話的發(fā)起者,它以廣播的形式發(fā)送廣播包并綁定固定的端口號(hào),廣播包中包含自己的信息,網(wǎng)絡(luò)中各個(gè)節(jié)點(diǎn)運(yùn)行的程序也綁定同樣的端口號(hào),節(jié)點(diǎn)收到上位機(jī)發(fā)起的廣播包之后,檢驗(yàn)識(shí)別碼是否和事先規(guī)定的一致,若一致,則解析數(shù)據(jù)包,數(shù)據(jù)包中包含上位機(jī)的IP地址和當(dāng)前時(shí)間,檢測(cè)此設(shè)備是否連接超時(shí),把當(dāng)前時(shí)間與上次檢測(cè)時(shí)間做差,如果差值小于設(shè)置的固定值,說(shuō)明連接正常,否則連接超時(shí),當(dāng)出現(xiàn)連接超時(shí)時(shí),需把此上位機(jī)的IP從監(jiān)控列表中刪除,之后網(wǎng)絡(luò)中的節(jié)點(diǎn)把自己的信息發(fā)送給監(jiān)控列表中存在的上位機(jī)IP。如圖2所示為網(wǎng)絡(luò)中節(jié)點(diǎn)設(shè)備上運(yùn)行server程序設(shè)計(jì)流程圖。上位機(jī)上運(yùn)行client程序與設(shè)備上運(yùn)行的server程序是綁定的同一個(gè)端口號(hào),上位機(jī)運(yùn)行的client程序是會(huì)話的發(fā)起者,上位機(jī)連接網(wǎng)絡(luò)中的任意設(shè)備后運(yùn)行上位機(jī)程序時(shí)client發(fā)起會(huì)話,客戶端和服務(wù)器開(kāi)始通訊。
3 網(wǎng)絡(luò)中設(shè)備的信息發(fā)送給上位機(jī)
網(wǎng)絡(luò)中各個(gè)設(shè)備搜集自己的信息,把信息打包發(fā)送給連接網(wǎng)絡(luò)中的上位機(jī),為上位機(jī)監(jiān)控網(wǎng)絡(luò)中的設(shè)備提供數(shù)據(jù)來(lái)源,在設(shè)備上運(yùn)行命令,會(huì)返回需要的信息,通過(guò)返回值的信息分析網(wǎng)絡(luò)中節(jié)點(diǎn)設(shè)備運(yùn)行狀態(tài)、節(jié)點(diǎn)設(shè)備的參數(shù)以及連接此節(jié)點(diǎn)設(shè)備的客戶端,為上位機(jī)監(jiān)控網(wǎng)絡(luò)中節(jié)點(diǎn)提供數(shù)據(jù)來(lái)源。
在網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)備上運(yùn)行命令用來(lái)查看節(jié)點(diǎn)配置參數(shù),當(dāng)網(wǎng)絡(luò)環(huán)境發(fā)生改變時(shí)也可通過(guò)命令對(duì)網(wǎng)絡(luò)進(jìn)行相應(yīng)的修改,如命令ifconfig -a 顯示全部的接口信息,命令包括查看網(wǎng)絡(luò)的連接狀況和MAC地址等。iwconfig命令為系統(tǒng)配置無(wú)線網(wǎng)絡(luò)設(shè)備或顯示無(wú)線網(wǎng)絡(luò)設(shè)備信息,iwconfig命令類似于ifconfig命令,但配置對(duì)象是無(wú)線網(wǎng)卡,它對(duì)網(wǎng)絡(luò)中節(jié)點(diǎn)設(shè)備進(jìn)行無(wú)線參數(shù)配置。通過(guò)命令iw wlan0 station dump可查看與此設(shè)備無(wú)線網(wǎng)卡0連接的網(wǎng)絡(luò)中節(jié)點(diǎn)設(shè)備的MAC地址、信號(hào)強(qiáng)度和連接延時(shí)等設(shè)備之間信息參數(shù)。batctl o可以查看路由表,包括源節(jié)點(diǎn)、目的節(jié)點(diǎn)、下一跳和潛在下一跳節(jié)點(diǎn)的MAC地址。設(shè)備信息發(fā)送給上位機(jī)程序server流程圖,如圖3所示。
4 上位機(jī)管理網(wǎng)絡(luò)中的設(shè)備
在管理網(wǎng)絡(luò)中各節(jié)點(diǎn),可以修改節(jié)點(diǎn)的節(jié)點(diǎn)名、IP地址、HT模式、發(fā)射功率、通訊頻率、AP的SSID和密碼等參數(shù),修改網(wǎng)絡(luò)中節(jié)點(diǎn)的參數(shù)可以使網(wǎng)絡(luò)中的節(jié)點(diǎn)在組網(wǎng)和實(shí)際應(yīng)用場(chǎng)景更加靈活方便。上位機(jī)創(chuàng)建TCP客戶端,網(wǎng)絡(luò)中節(jié)點(diǎn)運(yùn)行TCP服務(wù)器,上位機(jī)把修改節(jié)點(diǎn)參數(shù)的命令下達(dá)后,上位機(jī)把信息下發(fā)給節(jié)點(diǎn),節(jié)點(diǎn)收到上位機(jī)發(fā)過(guò)來(lái)的信息,解析信息,以shell腳本的形式在節(jié)點(diǎn)設(shè)備上運(yùn)行,實(shí)現(xiàn)修改網(wǎng)絡(luò)中節(jié)點(diǎn)的參數(shù)。
4 軟件實(shí)現(xiàn)
設(shè)備上運(yùn)行的Python程序主要包含三個(gè)功能模塊,在主程序運(yùn)行后,主進(jìn)程開(kāi)啟了三個(gè)線程,分別用于不同的功能模塊:網(wǎng)絡(luò)中的設(shè)備接收上位機(jī)發(fā)送的廣播包,網(wǎng)絡(luò)中設(shè)備收到廣播包后,回復(fù)上位機(jī)一個(gè)信息中包含自己的IP地址,用于檢測(cè)整個(gè)網(wǎng)絡(luò)中運(yùn)行的上位機(jī)IP地址為網(wǎng)絡(luò)中上位機(jī)監(jiān)控整個(gè)網(wǎng)絡(luò)中的節(jié)點(diǎn)提供數(shù)據(jù)來(lái)源;網(wǎng)絡(luò)中設(shè)備運(yùn)行搜集自己的信息序,首先是設(shè)備運(yùn)行命令,把返回的信息打包,最終以數(shù)據(jù)包的形式發(fā)送給整個(gè)網(wǎng)絡(luò)所有的上位機(jī)[7];上位機(jī)首先修改網(wǎng)絡(luò)中設(shè)備的參數(shù)并保存,然后把設(shè)備的參數(shù)信息打包發(fā)送給網(wǎng)絡(luò)中參數(shù)需修改的設(shè)備,設(shè)備接收數(shù)據(jù)后,以shell形式運(yùn)行該命令,實(shí)現(xiàn)修改設(shè)備參數(shù)的目的。最終以信號(hào)和槽的形式把參數(shù)顯示出來(lái),實(shí)現(xiàn)監(jiān)控和管理網(wǎng)絡(luò)中的節(jié)點(diǎn)設(shè)備[8]。
4.1 監(jiān)控畫面設(shè)計(jì)
基于linux系統(tǒng)開(kāi)發(fā)的 Ad Hoc 網(wǎng)絡(luò)監(jiān)控軟件,期望通過(guò)圖形化的方式,實(shí)時(shí)的將Ad Hoc網(wǎng)絡(luò)中節(jié)點(diǎn)信息包括拓?fù)鋱D、路由信息、網(wǎng)絡(luò)中節(jié)點(diǎn)參數(shù)、節(jié)點(diǎn)之間的信號(hào)強(qiáng)度、信道、連接網(wǎng)絡(luò)節(jié)點(diǎn)的客戶端MAC地址、工作模式等信息直觀地呈現(xiàn)在開(kāi)發(fā)人員面前,圖形化界面為工作人員監(jiān)控和管理Ad Hoc 網(wǎng)絡(luò)提供了簡(jiǎn)單又方便的方法,為工作人員實(shí)時(shí)了解整個(gè)網(wǎng)絡(luò)健康狀況提供了可能,為以后Ad Hoc網(wǎng)絡(luò)在實(shí)際的應(yīng)用中給現(xiàn)場(chǎng)工作人員和設(shè)備維護(hù)人員提供了便利條件。
上位機(jī)圖像界面采用qt編寫,包含登陸界面,拓?fù)鋱D主界面、節(jié)點(diǎn)參數(shù)界面等,界面上每個(gè)對(duì)話框都有對(duì)應(yīng)信號(hào)和槽,在圖形用戶界面編程中,一個(gè)窗口部件的變化被通知給另一個(gè)窗口部件[9-10],都是通過(guò)信號(hào)和槽形式實(shí)現(xiàn)的。
4.2軟件代碼實(shí)現(xiàn)
4.2.1 Ad Hoc監(jiān)控拓?fù)鋱D
監(jiān)控網(wǎng)絡(luò)中的拓?fù)鋱D,拓?fù)鋱D上顯示網(wǎng)絡(luò)中的節(jié)點(diǎn)IP地址,兩個(gè)直接通訊的節(jié)點(diǎn)用線連接,并顯示兩個(gè)節(jié)點(diǎn)之間的通訊頻率,拓?fù)鋱D顯示代碼如下:
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 監(jiān)控Ad Hoc網(wǎng)絡(luò)節(jié)點(diǎn)參數(shù)
監(jiān)控和管理網(wǎng)絡(luò)中的節(jié)點(diǎn)參數(shù),監(jiān)控網(wǎng)絡(luò)中的節(jié)點(diǎn)需要從節(jié)點(diǎn)上獲取節(jié)點(diǎn)參數(shù)和節(jié)點(diǎn)信息,因此,需在節(jié)點(diǎn)上運(yùn)行命令搜集節(jié)點(diǎn)信息,然后把信息發(fā)送給上位機(jī),用于上位機(jī)監(jiān)控節(jié)點(diǎn)信息來(lái)源,搜集節(jié)點(diǎn)信息部分程序如下所示:
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網(wǎng)絡(luò)中的節(jié)點(diǎn)
管理網(wǎng)絡(luò)中的節(jié)點(diǎn),上位機(jī)修改節(jié)點(diǎn)參數(shù)后保存,上位機(jī)發(fā)送修改節(jié)點(diǎn)參數(shù)命令給網(wǎng)絡(luò)中的節(jié)點(diǎn),節(jié)點(diǎn)收到上位機(jī)發(fā)送的數(shù)據(jù)包,解析數(shù)據(jù)包,在節(jié)點(diǎn)上以shell的形式運(yùn)行命令,從而修改節(jié)點(diǎn)的參數(shù),部分程序如下所示:
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 測(cè)試監(jiān)控和管理軟件
代碼完成后測(cè)試效果,上位機(jī)連接Ad Hoc網(wǎng)絡(luò)中的節(jié)點(diǎn),通過(guò)Wi-Fi或以太網(wǎng)連接,在Eric開(kāi)發(fā)環(huán)境上運(yùn)行程序,可看到如圖4為網(wǎng)絡(luò)系統(tǒng)監(jiān)控拓?fù)鋱D,圖5為網(wǎng)絡(luò)中節(jié)點(diǎn)的監(jiān)控信息,也可修改節(jié)點(diǎn)參數(shù)。
5 結(jié)束語(yǔ)
從調(diào)試結(jié)果和長(zhǎng)時(shí)間測(cè)試來(lái)看,軟件能實(shí)時(shí)監(jiān)控和管理Ad Hoc 網(wǎng)絡(luò)節(jié)點(diǎn)的目的,且非常明了的顯示網(wǎng)絡(luò)中的節(jié)點(diǎn)拓?fù)鋱D和節(jié)點(diǎn)之間的鏈路質(zhì)量、節(jié)點(diǎn)的參數(shù)信息以及管理網(wǎng)絡(luò)中的節(jié)點(diǎn)等。為網(wǎng)絡(luò)管理員在Ad Hoc網(wǎng)絡(luò)實(shí)際應(yīng)用監(jiān)控和管理網(wǎng)絡(luò)中的節(jié)點(diǎn)提供便利,為Ad Hoc網(wǎng)絡(luò)以后在發(fā)展提供重要保障。
參考文獻(xiàn):
[1] 賈志城.基于Ad Hoc網(wǎng)絡(luò)的反恐處突遠(yuǎn)程監(jiān)控系統(tǒng)的研究與實(shí)現(xiàn)[J].自動(dòng)化與儀器儀表,2014(3):108-109.
[2] 王秀芝,石志東,房衛(wèi)東,等.無(wú)線Ad Hoc網(wǎng)絡(luò)匿名通信技術(shù)的研究[J].計(jì)算機(jī)應(yīng)用與軟件,2016,33(2):89-93.
[3] 李瑞江.物聯(lián)網(wǎng)下自組織無(wú)線網(wǎng)絡(luò)Ad Hoc算法的新技術(shù)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2015(11):24-26.
[4] 劉旭東.基于 Android 的 ad Hoc 網(wǎng)絡(luò)節(jié)點(diǎn)間安全通信的研究與實(shí)現(xiàn)[D].北京:北京工業(yè)大學(xué),2013(5).
[5] 張?zhí)煊?一種基于batman的Mesh網(wǎng)絡(luò)路由協(xié)議改進(jìn)方法[D].大連:大連理工大學(xué), 2014(6).
[6] 楊吉.無(wú)線傳感器網(wǎng)絡(luò)監(jiān)控軟件平臺(tái)開(kāi)發(fā)[D].北京:北京工業(yè)大學(xué),2010(5).
[7] 謝忠明.無(wú)線Mesh網(wǎng)絡(luò)多徑路由算法的研究與應(yīng)用[D].蘇州:蘇州大學(xué),2015(5).
[8] 杜傳報(bào),全厚德,李召瑞,等.無(wú)線雙通道Ad Hoc網(wǎng)絡(luò)分層路由協(xié)議設(shè)計(jì)與分析[J].指揮與控制學(xué)報(bào).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網(wǎng)絡(luò)技術(shù)[J].硅谷,2012(17):9-10.