基于python 远程主机监控软件的设计与实现
socket通信为什么要指定端口仇虹,孟彬,孙冲
(中国人民解放军96822部队,
云南昆明650000)
收稿日期:
2020-11-260引言
在网络运维工作中,运维人员常需查看服务器主机的运行状态,由于空间分散及应用服务器类目众多,
需在维护终端上配置主机监控软件以达到查看服务器主机运行状态的目的。市面上的主机监控软件种类繁多,
良莠不齐,相当一部分被开发人员留有后门,植入广告或者木马等,影响服务器正常工作、危害信息安全。python 是一种跨平台、面向对象的解释型编程语言,具有语法简洁、形态丰富、多语言集成三大特点,有丰富的第三方库,是当前非常流行的编程语言[1]。本文从客户端及服务端不同需求入手,
研究了基于python 的信息获取及网络通信过程,实现了根据用户需求实时获取目标服务器(主机)的基本信息、CPU 和内存使用情况、进程信息、网络配置以及网络连接详情等关键信息。
1软件系统结构
1.1软件整体功能设计
目标服务器上安装客户端软件,
负责采集本主机的状态信息,在维护终端上安装负责接收及显示信息的服务端软件,可以根据需求接收每台服务器的状态信息,并予以显示,如图1所示。
图1客户端、服务端程序部署示意图
客户端程序负责采集目标服务器主机的信息有CPU 信息、硬盘信息、内存信息、进程详情、网络配置信息、网络数据统计信息及网络连接信息等。服务端程序根据用户需求向客户端发送指令,然后接收客户端发送的运行信息,并将信息展现给用户。
考虑到服务器承载着重要程序的运行,客户端程序采取指令式采集,即收到指令、采集信息、反馈信息,以避免占用过多资源影响服务器的性能。客户端和服务端使用基于UDP 的socket 套接字收发主机信息和指令,
由于UDP 套接字用于无连接、不可靠的数据传输服务,具有较高的数据传输效率,在局域网中小批量数据传输尤为适用[2]。软件整体框图如图2所示。
图2软件整体框图
1.2客户端功能设计
客户端程序运行后先建立UDP 套接字,然后等待接收指令,根据接收的指令调用不同的信息采集模块,将采集到的信息发送至服务端,发送完毕后等待接收指令。客户端程序启动后,获取的主机信息发送给服务端程序,不需要在本地显示,因此客户端程序不需要GUI 设计。客户端工作流程如图3所示。鉴于U
DP 提供无连接的传输服务和只在收发数据时才占用端口的特性[3],设定默认的端口号,运维人员可根据实际情况选择更改端口号。
图3客户端工作流程
1.3服务端功能设计
运维人员在服务端程序上设定客户端主机的IP 地址和端口号并存储在数据库中,每次监控客户机时只需选择相应IP 地址和端口即可,亦可手动添加。根据用户需求发送指令到客户端,收到客户端反馈的信息后再显示在GUI 上,同时信息将被存储在SQLite 数据库中,以供查询使用。服务端工作流程如图4所示,服务端需要与用户直接交互,因此需要GUI 设计。
图4服务端工作流程图
1.4socket 通信设计
当客户端和服务端通信时,服务端程序发送指令使用
系统自动分配的动态端口号作为源端口号、指定端口作为目的端口号,发送完成后监听动态端口等待接收,直到收到客户端程序发来相应的数据包后,停止监听并关闭socket 。客户端程序需要随时接收服务端的指令,因此要保持监听端口的状态。socket 通信示意如图5示。
图5socket 通信示意图
2软件功能的实现
2.1文件结构
软件的文件组织结构如图6示。客户端文件中,Client.py 负责接收客户端的指令,根据指令调用
Get_class.py 中
Get_Info 类的方法获取信息,再将返回的信息发给服务端
程序。
图6文件组织结构
服务端文件中,Login.py 用于显示登录界面,负责验证用户的身份,用户名密码正确才能进入主页面;Main.py 是主显示页面,在主页面上选择要监控的IP 地址与端口号,通过按钮选择要发送的指令。Main.py 收到客户端发送的信息后,交由Show_info.py 处理,Show_info.py 调用Display_class.py 中的Display_Info 类中的方法处理信息,
将处理后的信息返回,Show_info.py 将信息保存并返回给Main.py 显示。当用户选择查询时,调用Top_window.py ,Top_window.py 建立一个顶级窗口,查询数据库并显示查询的信息。客户端IP 地址的增加和管理在Main.py 中完成。所有的读写数据库的操作均由Edit_db.py 中的Edit_DB 类完成。
2.2GUI 设计
服务端基于Tkinter 模块编写界面,Tkinter 模块(Tk 接口)
是python 的标准Tk GUI 工具包的接口,包含了python 界面设计的基本概念,如窗口、对象、属性、方法、事件及事件响应等[4],是一个轻量级的跨平台图形用户界面开发工具[5]。
服务端程序部署在维护终端上,借助GUI ,运维人员不需要掌握python 的相关知识,可方便快捷地获取到客户端的信息。
服务端程序界面设计展示的内容有:
①用户登录界面:考虑到运维人员的身份识别和级别权限,在软件登录界面应设置用户身份验证窗口,对数据信息安全加以防护,以防非法用户登录。
②软件设置界面:
在GUI 设计过程中,添加了文件、设置、查询、导出信息、刷新及帮助等控件,运维人员可根据实际需求,进行文件进行打开、保存及退出、查询日志及记录、文件导出等操作。对于运维人员关心的设置客户端的IP 地址和端口号,可单独添加控件及属性编辑。在此基础上,根据需求发送指令到客户端,收到客户端反馈的信息后再显示在GUI 上,同时将信息存储在SQLite 数据库中,以供查询使用。
③信息显示主界面:在服务端程序上设定客户端主机的IP 地址和端口号并存储在数据库中,监控客户机时只需选择或增加相应IP 地址和端口即可。运维人员根据需求获取目标客户端的关键信息,在主页面上添加相应信息的控
件、编辑属性、控件数据的存储方法等,获取到的信息在主界
面上显示[6]。
3软件功能实现与测试
3.1客户端程序设计与测试
使用时应先开启客户端程序,
客户端程序是控制台程序,运行后在dos 窗口中显示。客户端程序运行显示默认的UDP 端口号,询问是否使用默认端口或指定新端口号。若默认或指定端口号已被占用,会提示重新指定端口号直到可用为止。每次向服务端发送信息,均会按时间序列显示,
如图7所示。图7客户端显示信息图
3.2服务端程序设计与测试
服务端程序启动后首先进行身份认证,输入正确的用户名及密码后方可登录。登录成功后,
从IP 地址列表中选择要监控的客户端IP 地址及端口,服务端程序可以根据需要增、删客户端IP 地址,软件设置界面如图8所示。
图8软件设置界面
点击下方的选项按钮即可获得客户端相应信息并存储在数据库中,支持信息查询记录。根据GUI 设计,在信息显示主界面上,设置了基本信息、硬盘信息、内存信息、进程信息、网卡信息、网络数据统计和网络连接详情等按钮。运行软件,链接后台数据,GUI 可向用户展示
查询到的信息,获取的基本信息和进程信息如图9和图10所示。
习近平同志曾经指出:“中国传统文化博大精深,学习和掌握其中的各种思想精华,对树立正确的世界观、人生观、价值观很有益处。学史可以看成败、鉴得失、知兴替;学诗可以情飞扬、志高昂、人灵秀;学伦理可以知廉耻、懂荣辱、辨是非。”作为文化传播者,我们有责任、有义务弘扬和传承中国优秀的传统文化,为此我们精心辑成了这套“中华国学典藏读本”系列,包括《老子》《论语》《孟子》《易经》《孙子兵法与三十六计》等著作。本系列图书在原文、注释、译文的基础上,设有经典解读,精选了诸多名家深入浅出的集注,有的篇章设置了案例分析,旨在全方位展示中华优秀典籍的思想魅力,有利于广大读者尤其是党员干部开阔胸襟、改进方法、增强智慧,提升思维层次和领导水平,提高为人民服务的本领和能力,从而更好地担负起执政使命,在是非曲直、尊卑荣辱面前,
把握
正确方向,增强开拓前进的勇气和力量。
《论语》《老子》《孟子》《易经》
《孙子兵法与三十六计》中国言实出版社定价:68.00元开本:16K
订书电话:************
广告图9服务端获取的基本信息
图10服务端获取的进程信息
根据开发人员在使用系统时的新需求和进行界面设计时的习惯,添加相应的功能菜单,创建新的功能按钮,使得系统能够更好地符合开发人员的要求,提高工作效率。
4结束语
基于python 语言设计的远程监控主机软件,在网络运维工作中可对服务器运行产生的信息进行存储和显示,减轻了网络维护人员处理数据信息的压力,
提高了效率[7]。本软件有较强的可扩展性,如丰富被采集的服务器运行信息、运行信息数据可视化等,可进一步丰富软件的功能、提高软件的可用性,在网络运维工作中有较强的应用前景。
参考文献
[1]王硕,孙洋洋.PyQt5快速开发与实战[M].北京:电子工业出
版社,2017.
[2]BRANDON R,JOHN G.python 网络编程:第3版[M].诸豪文,译.北京:人民邮电出版社,2016.
[3]谢盼,孙英晖,鞠瑞林.恶劣网络环境下UDP 可靠传输方案
设计[J].现代电子工程,2017,(3-4):35-39.
[4]康计良.Python 语言的可视化编程环境的设计与实现[D].西安:西安电子科技大学,2012.
[5]小甲鱼.零基础入门学习python[M].北京:清华大学出版社,
2016.
[6]胡非,韩永辉,许超,等.基于Python 的可视化工具研究与应
用[J].工程技术研究,2018(13):25-26.
[7]王小亮,姜光,赵珂,等.Python 在网络运维中的应用[J].电子
技术与软件工程,2018(23):12.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。