摘 要:在Linux平臺(tái)上進(jìn)行DHCP服務(wù)器搭建和配置時(shí),需要網(wǎng)絡(luò)管理人員具備較強(qiáng)的Linux環(huán)境應(yīng)用專業(yè)知識(shí),還要能夠靈活運(yùn)用各種相關(guān)命令對(duì)DHCP配置文件進(jìn)行操作和檢驗(yàn),作業(yè)復(fù)雜且強(qiáng)度較大。為了有效降低DHCP管理和配置的門檻,提高網(wǎng)絡(luò)管理人員的工作效率,采用PyQt5語言設(shè)計(jì)了一種能夠運(yùn)行在Windows平臺(tái)的DHCP配置管理系統(tǒng),通過交互友好的界面,使得僅掌握基本網(wǎng)絡(luò)知識(shí)的普通網(wǎng)絡(luò)管理人員,即可通過該系統(tǒng)對(duì)運(yùn)行在遠(yuǎn)程Linux操作系統(tǒng)平臺(tái)上的DHCP服務(wù)進(jìn)行管理和配置。實(shí)踐表明,該系統(tǒng)能夠有效降低專業(yè)網(wǎng)絡(luò)管理人員的作業(yè)強(qiáng)度,同時(shí)為非Linux專業(yè)技術(shù)人員的網(wǎng)絡(luò)管理提供了便利,具有良好的應(yīng)用價(jià)值。
關(guān)鍵詞:DHCP服務(wù)器;網(wǎng)絡(luò)管理與配置;DHCP配置文件;Linux服務(wù)器;Linux網(wǎng)絡(luò)管理員;PyQt5
中圖分類號(hào):TP317.4 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2025)02-0-04
0 引 言
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,人們的工作、學(xué)習(xí)和生活已經(jīng)越來越密切地與互聯(lián)網(wǎng)聯(lián)系在一起。各種不同規(guī)模的網(wǎng)絡(luò)連接類型如個(gè)人網(wǎng)、局域網(wǎng)、城域網(wǎng)、廣域網(wǎng)等被建立起來,以滿足人們的多樣化需求。眾所周知,IP地址是網(wǎng)絡(luò)中各通信節(jié)點(diǎn)的重要標(biāo)識(shí),快速有效地分配IP地址,是高效組網(wǎng)的重要保障,組網(wǎng)規(guī)模的不斷擴(kuò)大,對(duì)IP地址合理的分配、管理工作提出了更高的要求。動(dòng)態(tài)主機(jī)網(wǎng)絡(luò)配置協(xié)議(Dynamic Host Configuration Protocol, DHCP)[1]是一種能夠?yàn)橹鳈C(jī)分配IP地址并實(shí)現(xiàn)集中管理的技術(shù),采用該技術(shù)可以使得網(wǎng)絡(luò)環(huán)境中的大量主機(jī)自動(dòng)獲取到合適的IP地址,無需人工介入,這使得快速大規(guī)模組網(wǎng)能夠很容易地實(shí)現(xiàn)。
通常,DHCP采用客戶端/服務(wù)器模式,服務(wù)器負(fù)責(zé)集中管理,客戶端向服務(wù)器提出配置申請(qǐng),服務(wù)器根據(jù)策略返回相應(yīng)配置信息給客戶端。由于Linux操作系統(tǒng)具有較高的安全性、穩(wěn)定性,且開源免費(fèi),這使得采用Linux操作系統(tǒng)作為DHCP服務(wù)器成為眾多用戶的首選。然而,對(duì)Linux操作系統(tǒng)的操作基本采用命令形式,在Linux環(huán)境下配置DHCP服務(wù)器[2],操作人員不僅要具備熟練的網(wǎng)絡(luò)專業(yè)知識(shí),還要具有較高的Linux應(yīng)用水平,這會(huì)對(duì)部分非專業(yè)網(wǎng)絡(luò)運(yùn)營單位在本單位網(wǎng)絡(luò)系統(tǒng)組建完畢后進(jìn)行日常管理和維護(hù)時(shí)造成很大的困難。另外,即便是專業(yè)的網(wǎng)絡(luò)管理人員,通過大量的命令來配置和管理DHCP服務(wù)器,也很難保證不會(huì)出現(xiàn)失誤,以致浪費(fèi)大量的時(shí)間和精力。
為了有效解決上述問題,本文采用PyQt語言[3-4],設(shè)計(jì)了一套在Windows平臺(tái)上運(yùn)行的功能軟件,該軟件通過友好的交互界面,借助網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程與Linux操作系統(tǒng)的交互,從而達(dá)到配置DHCP服務(wù)器的目的。
1 DHCP遠(yuǎn)程管理系統(tǒng)總體介紹
本系統(tǒng)圍繞方便易用、安全可靠、功能全面等用戶體驗(yàn)及性能指標(biāo)相關(guān)要求進(jìn)行設(shè)計(jì),主要包括如圖1所示的功能模塊。圖1中給出的功能模塊按照用戶操作順序進(jìn)行部署,其中管理系統(tǒng)登錄是指具有相應(yīng)權(quán)限的用戶在Windows平臺(tái)運(yùn)行軟件,通過自己的賬號(hào)登錄到管理系統(tǒng)中,系統(tǒng)根據(jù)賬號(hào)確認(rèn)用戶角色并賦予用戶相應(yīng)的操作權(quán)限,系統(tǒng)超級(jí)管理員可以調(diào)整和修改其他用戶權(quán)限。由于該部分內(nèi)容屬于一般管理系統(tǒng)基本具備的常規(guī)功能,本文在此不展開討論。用戶正常登錄后,在界面選擇歷史記錄或手工輸入目標(biāo)服務(wù)器IP地址,可以進(jìn)行網(wǎng)絡(luò)嗅探,主要目的是查看前向用戶提供網(wǎng)絡(luò)是否暢通、遠(yuǎn)程服務(wù)器是否接受連接等信息,防止因網(wǎng)絡(luò)環(huán)境狀況問題導(dǎo)致用戶誤判,從而采取不必要的其他操作。
獲取到網(wǎng)絡(luò)嗅探成功后的提示信息后,用戶通過操作相應(yīng)界面元素登錄到遠(yuǎn)程服務(wù)器,此時(shí)系統(tǒng)從數(shù)據(jù)庫中將用戶近期通過系統(tǒng)進(jìn)行配置的相關(guān)數(shù)據(jù)信息提取到緩存中,同時(shí)系統(tǒng)會(huì)把服務(wù)器中的dhcpd.conf文件加載到本地并進(jìn)行解析,按照配置文件中各網(wǎng)絡(luò)節(jié)點(diǎn)的配置內(nèi)容填充界面相應(yīng)元素,供用戶調(diào)整或參考。用戶操作完成后,系統(tǒng)收集并核查界面中的配置信息,信息核查通過后,把有關(guān)信息作為歷史數(shù)據(jù)記錄到數(shù)據(jù)庫,同時(shí)重新刷新dhcpd.conf文件并把該文件寫回到遠(yuǎn)程Linux服務(wù)器。如果用戶在操作過程中的某個(gè)時(shí)間點(diǎn)選擇撤銷操作,則系統(tǒng)會(huì)選擇上次的歷史記錄或根據(jù)用戶操作,選擇其他歷史記錄覆蓋當(dāng)前配置。配置完成后,用戶可以通過系統(tǒng)操作界面向遠(yuǎn)程服務(wù)器發(fā)送控制命令,操作服務(wù)器執(zhí)行相關(guān)操作,服務(wù)器執(zhí)行結(jié)果通過網(wǎng)絡(luò)回傳到系統(tǒng)供用戶檢驗(yàn)。
2 設(shè)計(jì)與實(shí)現(xiàn)
根據(jù)圖1所示的系統(tǒng)功能,本文就用戶管理、遠(yuǎn)程服務(wù)器操作、作用域配置及地址域綁定等系統(tǒng)重要功能的軟件實(shí)現(xiàn)方法進(jìn)行討論。
2.1 用戶管理
通過系統(tǒng)操作遠(yuǎn)程服務(wù)器的用戶,必須是管理員授權(quán)的用戶,授權(quán)用戶使用自己的賬號(hào)登錄系統(tǒng)后,系統(tǒng)會(huì)根據(jù)該用戶的權(quán)限,決定哪些DHCP信息可以被該用戶配置,哪些DHCP信息只能被瀏覽。對(duì)遠(yuǎn)程服務(wù)器的操作,系統(tǒng)同樣根據(jù)權(quán)限決定哪些命令可以被發(fā)送執(zhí)行,哪些命令不可以被發(fā)送執(zhí)行。設(shè)計(jì)中,采用SQLServer數(shù)據(jù)庫[5-6]實(shí)現(xiàn)用戶管理的有關(guān)功能,主要涉及的表格有用戶基本信息表、用戶權(quán)限(角色)表、用戶配置歷史信息記錄表等。其中配置歷史信息記錄表,由系統(tǒng)根據(jù)用戶賬號(hào)自動(dòng)維護(hù),即當(dāng)管理員在用戶基本信息表中添加了某條用戶記錄后,系統(tǒng)自動(dòng)創(chuàng)建對(duì)應(yīng)該用戶的配置歷史信息表,刪除某條用戶記錄后,該用戶的配置歷史信息表也隨之刪除。
設(shè)計(jì)中操作SQLServer數(shù)據(jù)庫的主要流程如下:
(1)程序啟動(dòng)過程中,關(guān)聯(lián)SQLServer:
self.db=QSqlDatabase.addDatabase(\"QODBC\")
(2)確定目標(biāo)數(shù)據(jù)庫是否存在:
query.exec(\"Select * from sys.databases where name=\"+dbName +\"'\")
(3)如果不存在則創(chuàng)建用戶數(shù)據(jù)庫,數(shù)據(jù)庫名由管理員指定:
query.exec(\"create database \"+ dbName)
(4)用戶數(shù)據(jù)庫存在,與用戶數(shù)據(jù)庫建立連接,并打開用戶數(shù)據(jù)庫。PyQt5與SQLServer中用戶數(shù)據(jù)庫建立連接的方式有多種,本文采用如下方式連接:
class DBConfig():
def__init__(self,dbName):
self.conn_str=
{
\"dbname\":\
\"Driver={SqlServer};
Server=localhost;Database=\"+dbName+\";
Uid=xxx;Pwd=xxxxx\"}
(5)檢查管理員配置信息,確定有關(guān)表項(xiàng)是否存在,表項(xiàng)不存在則創(chuàng)建,已存在則按照要求初始化:
def create_all_table(self):
query=QSqlQuery()
for v in
self.dbConfig.sqlstr_tab_create.values():
query.exec(v)
2.2 操作界面設(shè)計(jì)
本文主要設(shè)計(jì)了遠(yuǎn)程服務(wù)器連接界面、主窗口界面、作用域配置界面及地址綁定管理界面,具體如圖2~圖5所示。
圖3為成功連接服務(wù)器后向用戶展示的主窗口界面,該界面采用QTableWidget控件向用戶展示歷史配置記錄(從菜單選擇)或根據(jù)dhcp.conf文件解析作用域列表,每行對(duì)應(yīng)1個(gè)子域。第0行為表頭,除提供各字段提示信息外,還添加了顯示值為“全選”的QCheckBox,提示用戶在后續(xù)的操作中,可以通過該復(fù)選框?qū)Τ?行外的其他所有行進(jìn)行操作。第1行為默認(rèn)域,該域的值只能通過點(diǎn)擊后面的“配置”按鈕進(jìn)入作用域配置管理頁面進(jìn)行修改,不能刪除。從第2行開始的后續(xù)各行,都可以根據(jù)用戶需要?jiǎng)討B(tài)添加或刪除,其組成控件從第1列開始依次為QCheckBox、QLabel、QLineEdit和QPushButton。每一行的控件引用及其所在行由Python字典維護(hù),用戶通過“增加”按鈕可以動(dòng)態(tài)向QTableWidget中添加任意多行,后臺(tái)采用Python字典記錄新增行所有控件的引用信息,由于新增行地址段都為空白,所以不存在配置信息同步問題,但當(dāng)通過“刪除”按鈕配合復(fù)選框的選擇狀態(tài),對(duì)QTableWidget中被選中的行進(jìn)行刪除操作時(shí),存在以下情況:
情況1:用戶刪除的行是QTableWidget尾部1個(gè)或連續(xù)的幾個(gè)空白行;
情況2:用戶刪除的行是在QTableWidget中隨機(jī)選擇的空白行;
情況3:滿足情況1的行不空,含有用戶輸入地址段,但未執(zhí)行綁定;
情況4:滿足情況2的行不空,含有用戶輸入段,但未執(zhí)行綁定;
情況5:滿足情況3,但已執(zhí)行地址綁定操作;
情況6:滿足情況4,但已執(zhí)行地址綁定操作。
對(duì)上述情況,需要分別進(jìn)行處理,主要處理措施為:
(1)對(duì)于情況1,直接從控件緩存字典中刪除對(duì)應(yīng)記錄,無需額外進(jìn)行其他操作。
(2)對(duì)于情況2,在控件緩存字典中,按行號(hào)查找對(duì)應(yīng)控件記錄,刪除對(duì)應(yīng)記錄,重新按照現(xiàn)存記錄進(jìn)行編號(hào),并映射到QTableWidget。
(3)對(duì)于情況3,同步刪除地址段記錄列表后執(zhí)行情況1的操作。
(4)對(duì)于情況4,搜索地址段記錄列表,刪除記錄后重新編號(hào),執(zhí)行情況2的操作,重新將地址段記錄映射到新調(diào)整后的控件中。
(5)對(duì)于情況5,同步刪除綁定的子域緩存記錄字典,如果記錄已被保存到數(shù)據(jù)庫,從數(shù)據(jù)庫刪除,執(zhí)行情況3的操作。
(6)對(duì)于情況6,刪除子域記錄,重新對(duì)子域緩存記錄進(jìn)行編號(hào),設(shè)置子域記錄映射關(guān)系,從數(shù)據(jù)庫中刪除對(duì)應(yīng)記錄,執(zhí)行情況4的操作。
對(duì)上述動(dòng)態(tài)新增或刪除控件事件的管理,采用每種類型的控件創(chuàng)建對(duì)應(yīng)的QSignalMapper類對(duì)象進(jìn)行實(shí)現(xiàn),通過setMapping()方法, QSignalMapper類對(duì)象將map()槽與控件的signal連接,再進(jìn)一步把map()槽發(fā)射的mapped()信號(hào)與自定義槽函數(shù)連接,即可監(jiān)控動(dòng)態(tài)創(chuàng)建的控件。以動(dòng)態(tài)創(chuàng)建的復(fù)選框?yàn)槔?,具體方法的代碼如下所示:
self.checkBoxSignalMapp.setMapping(checkBoxItem,self.rows-1)
checkBoxItem.clicked.connect(self.checkBoxSignalMapp.map)
self.checkBoxSignalMapp.mapped.connect(self.on_checkbox_click)
代碼中,checkBoxSignalMapp為QCheckBox控件對(duì)應(yīng)的QSigalMapper對(duì)象,self.on_checkbox_click為自定義槽函數(shù)。
圖4和圖5所示的作用域配置界面和地址域綁定管理界面的控件管理方法與上述類似,緩存管理辦法稍有不同,此處不再詳述。
2.3 DHCP服務(wù)配置文件解析
dhcpd.conf文件是DHCP服務(wù)的配置文件[7],該文件一般包括3個(gè)部分:parameters、declarations、option。在獲取到該文件后,采用逐行掃描各部分關(guān)鍵詞的辦法識(shí)別配置文件中不同的組成部分,并依據(jù)語義,將整個(gè)配置文件在緩存區(qū)中生成一個(gè)或多個(gè)網(wǎng)段域,每個(gè)網(wǎng)段域?qū)?yīng)生成基本定義子域和主機(jī)聲明子域。在處理過程中,不僅要依靠關(guān)鍵詞對(duì)特定域起始部分進(jìn)行識(shí)別,還要依據(jù)特定符號(hào)和特定方法對(duì)特定域中的特殊部分進(jìn)行進(jìn)一步界定和識(shí)別。如本文采用正則表達(dá)式對(duì)IP地址(IPV4)和Mac地址進(jìn)行識(shí)別,具體代碼如下:
self.reIPMatchStr=r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([0-9]{1,3}\b)'
self.reMACMatchStr=r'(([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})|([0-9a-fA-F]{2}[-]){5}([0-9a-fA-F]{2}))'
上述reIPMatchStr為IP地址的匹配模式,reMACMatchStr為Mac地址的匹配模式。其他關(guān)鍵詞和特殊界定符見表1。
具體實(shí)現(xiàn)方法的代碼如下所示:
for j in range(len(sectEveryLine)):#對(duì)分割后的每一行進(jìn)行搜索
if not sectEveryLine[j].startswith('#'):
if sectEveryLine[j].find('subnet')gt;=0 and sectEveryLine[j].find('netmask')gt;=0:
subStart=sectEveryLine[j].find('subnet')
netmaskStart=sectEveryLine[j].find('netmask')
subLine=sectEveryLine[j][subStart:netmaskStart]
netLine=sectEveryLine[j][netmaskStart:]
subnetIP=re.search(self.reIPMatchStr, subLine)
netmaskIP=re.search(self.reIPMatchStr,netLine) subDict.setdefault(\"subnet\",subnetIP.group())subDict.setdefault(\"netmask\",netmaskIP.group())
以上代碼片段,僅用來說明采用正則表達(dá)式對(duì)目標(biāo)進(jìn)行匹配的實(shí)現(xiàn)方法,成功匹配目標(biāo)后,還需要將匹配信息記錄到對(duì)應(yīng)的數(shù)據(jù)字典中,以備后續(xù)增加、刪除、修改,以及寫回、撤銷配置文件數(shù)據(jù)等。
2.4 遠(yuǎn)程Linux服務(wù)器交互
paramiko是一個(gè)基于SSH用于連接遠(yuǎn)程服務(wù)器并執(zhí)行相關(guān)操作的模塊,使用該模塊可以命令遠(yuǎn)程服務(wù)器,并對(duì)遠(yuǎn)程服務(wù)器文件進(jìn)行操作。本文采用該模塊的相關(guān)方法實(shí)現(xiàn)與遠(yuǎn)程服務(wù)器的連接,并最終實(shí)現(xiàn)DHCP配置文件的相關(guān)配置操作[8-10]。同時(shí),通過該模塊的遠(yuǎn)程命令操作功能,還進(jìn)一步實(shí)現(xiàn)了界面化的遠(yuǎn)程DHCP服務(wù)器管理功能,使得用戶能夠通過本文實(shí)現(xiàn)遠(yuǎn)程操作,實(shí)時(shí)對(duì)服務(wù)器運(yùn)行狀況進(jìn)行診斷、監(jiān)控。
3 結(jié) 語
團(tuán)隊(duì)與有關(guān)網(wǎng)絡(luò)管理部門合作,基于PyQt5開發(fā)了一種遠(yuǎn)程DHCP服務(wù)器監(jiān)管系統(tǒng),該系統(tǒng)在實(shí)際應(yīng)用中能夠?yàn)榫W(wǎng)絡(luò)管理人員提供安全、便捷的服務(wù)器管理方式,有效降低了工作強(qiáng)度,提高了工作效率,取得了較好的效果。
參考文獻(xiàn)
[1]張韜.關(guān)于DHCP服務(wù)攻擊的安全防護(hù)策略部署[J].計(jì)算機(jī)安全,2014(12):29-32.
[2]趙琳.實(shí)時(shí)監(jiān)控Linux服務(wù)器性能[J].網(wǎng)絡(luò)安全和信息化,2019(8):65-69.
[3]王碩. PyQt5快速開發(fā)與實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2017.
[4]耿穎.使用Python語言的GUI可視化編程設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2019,19(2):20-22.
[5]云洋.基于Python的圖片爬蟲程序設(shè)計(jì)[J].電子技術(shù)與軟件工程,2018(17):241-242.
[6]杜田,許大璐,朱校娟,等.基于Python的多源地理數(shù)據(jù)高效質(zhì)檢系統(tǒng)[J].測(cè)繪地理信息,2020,45(5):84-88.
[7]馮貴蘭,李正楠,周文剛.大數(shù)據(jù)分析技術(shù)在網(wǎng)絡(luò)領(lǐng)域中的研究綜述[J].計(jì)算機(jī)科學(xué),2019,46(6):1-20.
[8]何波.基于Python的新浪微博中爬蟲程序維護(hù)方法[J].軟件,2022,43(2):52-54.
[9]周競(jìng)鴻.大數(shù)據(jù)背景下依托于Python的網(wǎng)絡(luò)爬蟲技術(shù)研究[J].信息系統(tǒng)工程,2021(3):69-70.
[10]單艷,張帆.基于Python的網(wǎng)頁信息爬取技術(shù)研究[J].電子技術(shù)與軟件工程,2021(14):238-239.
作者簡(jiǎn)介:楊立志(1973—),男,碩士,副教授,研究方向?yàn)榍度胧郊夹g(shù)、物聯(lián)網(wǎng)應(yīng)用技術(shù)。
蘇春芳(1979—),女,碩士,副教授,研究方向?yàn)槲锫?lián)網(wǎng)應(yīng)用技術(shù)、圖像處理。
倪 峰(1981—),女,碩士,講師,研究方向?yàn)榫W(wǎng)絡(luò)安全、物聯(lián)網(wǎng)應(yīng)用技術(shù)。
收稿日期:2024-01-28 修回日期:2024-03-08
基金項(xiàng)目:2023年江蘇省高校優(yōu)秀科技創(chuàng)新團(tuán)隊(duì)項(xiàng)目(蘇科教[2023]3號(hào))資助