





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