构建NPS内网穿透服务客户端GUI界面

2024-04-07 20:28

本文主要是介绍构建NPS内网穿透服务客户端GUI界面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1、问题来源
    • 2、操作教程
      • 2.1 原理
      • 2.2 NPS_GUI界面代码
      • 2.3 python 程序转 exe 程序
    • 3、总结

1、问题来源

本人之前撰写过一个 使用nps搭建内网穿透并配置泛域名解析的教程,但其中的运行客户端程序使用的是 CMD 命令行进行操作,并且需要配置的参数较多,总是记不住。

所以就在考虑是否能将 cmd 命令程序转成 EXE GUI程序,方便配置参数运行。本教程就营运而生了。

2、操作教程

2.1 原理

PySimpleGUI是一个用于创建图形用户界面(GUI)的Python模块。本教程使用 PySimpleGUI 为 NPS内网穿透客户端程序(v0.26.0)制作了一个GUI界面。

2.2 NPS_GUI界面代码

首先新建一个目录为 nps_gui ,在目录中新建一个 main.py 程序,并将与 nps 服务端配套的 npc.exe 文件复制到该目录下。
main.py 程序为主程序,用来绘制 GUI 界面,调用 CMD 命令运行程序。
main.py 程序内容如下:

# main.pyimport subprocess
import threading
import PySimpleGUI as sg# 定义版本号和作者信息
version = "0.0.1"
author = "巧遇科技工作室"
about_me = "本程序是NPS内网穿透服务的GUI界面,用来辅助NPS内网穿透服务客户端进行使用,与之配套的NPS版本为0.26.10。"def read_output(process, output_element):"""读取子进程的输出并将其传递给GUI线程显示的函数"""for line in process.stdout:output_element.print(line.strip())for line in process.stderr:output_element.print(line.strip())# 定义GUI布局
layout = [[sg.Menu([['关于', ['本程序介绍','版本号', '作者']]])],[sg.Text("服务端地址(IP):"), sg.Input(default_text="nps.qiaoyukeji.cn",key="-ADDRESS-")],[sg.Text("服务端端口号:"), sg.Input(default_text="28024",key="-PORT-")],[sg.Text("验证密钥(vkey):"), sg.Input(key="-VKEY-")],[sg.Text("连接方式:"), sg.Input(default_text="tcp",key="-TYPE-")],[sg.Button("连接远程穿透服务器"), sg.Button("退出")],[sg.Output(size=(60, 10), key="-OUTPUT-")]
]# 创建窗口
window = sg.Window("NPS内网穿透GUI工具(v0.0.1)", layout)
output_element = window["-OUTPUT-"]# 事件循环
while True:event, values = window.read()if event == sg.WINDOW_CLOSED or event == "退出":breakif event == "连接远程穿透服务器":address = values["-ADDRESS-"]port = values["-PORT-"]vkey = values["-VKEY-"]type = values["-TYPE-"]command = f"npc.exe -server={address}:{port} -vkey={vkey} -type={type}"startupinfo = subprocess.STARTUPINFO()startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOWprocess = subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True,bufsize=1,startupinfo=startupinfo,creationflags=subprocess.CREATE_NO_WINDOW)# 创建线程读取子进程输出并传递给GUI线程显示output_thread = threading.Thread(target=read_output, args=(process, output_element), daemon=True)output_thread.start()if event == "版本号":sg.popup(f"版本号: {version}")if event == "作者":sg.popup(f"作者: {author}")if event == "本程序介绍":sg.popup(f"{about_me}")# 关闭窗口
window.close()

目录下输入 python main.py 运行程序,程序的运行图如下所示。

填写好自己的 nps 服务端的 网址(IP)、端口、验证密钥(vkey)与连接方式,点击连接显示连接成功。

至此,python 代码版的 nps 客户端 GUI 程序已完成。

2.3 python 程序转 exe 程序

python 版的程序虽然已经完成,但是需要电脑先安装 python 运行环境,并且安装对应的 python 库,之后运行 python 代码才能正真的运行起来程序,对于普通人来说过于麻烦与繁琐了。

能不能打包成 exe 文件,无需安装,双击就能运行呢?

答案是肯定的,就是使用 pyinstaller
PyInstaller 是一个用于将 Python 应用程序打包成可执行文件的工具。它可以将 Python 脚本及其依赖的库、资源文件等打包成一个独立的可执行文件,方便在没有 Python 解释器的环境中运行。

首先安装使用 pip install pyinstaller 安装 pyinstaller
之后在上面的目录中运行 PyInstaller 打包程序;

pyinstaller --onefile --hidden-import PySimpleGUI main.py --name "NPS内网穿透客户端GUI程序"  --noconsole

–onefile:指定生成一个单个的可执行文件,而不是生成一个文件夹包含多个文件。这意味着所有的依赖项将被打包到一个可执行文件中。

–hidden-import PySimpleGUI:指定需要导入的额外模块或库。在这个例子中,指定了需要导入PySimpleGUI库,因为脚本"main.py"中使用了PySimpleGUI。这样PyInstaller会确保将该库包含在生成的可执行文件中。

main.py:要打包的Python脚本的文件名或路径。在这个例子中,指定了"main.py"作为要打包的脚本。

–name “NPS内网穿透客户端GUI程序”:指定生成的可执行文件的名称。在这个例子中,指定了生成的可执行文件的名称为"NPS内网穿透客户端GUI程序"。

–noconsole:指定生成的可执行文件在运行时不显示控制台窗口。这适用于图形用户界面(GUI)应用程序,因为它们通常不需要显示控制台输出。

上述打包程序就可以在目录下生成一个 dist 目录、将 main.py 打包成一个 exe 程序放置在 dist 目录中,然后我们需要将 npc.exe 也复制一份到 dist 目录中。


dist 目录中双击 NPS内网穿透客户端GUI程序.exe 即可正常运行 NPS_GUI 程序。

我们可以将 NPS内网穿透客户端GUI程序.exenpc.exe 两个文件打包成一个压缩包发送给他人,他人无需安装配置运行环境、仅需解压缩后双击程序即可运行程序。

至此 nps 客户端程序 GUI 界面程序已全部完成。

3、总结

本教程已在 Gitee、Github中进行开源。
Gitee:https://gitee.com/qiaoyukeji/nps_gui
Github:https://github.com/qiaoyukeji/nps_gui

本教程使用的是 PySimpleGUI 绘制 GUI 界面,由于 PySimpleGUI 库本身的问题,第一次使用会提示填入授权码或者选择忽略跳过
授权码 PySimpleGUI 官方免费提供,但需要注册领取,填入注册授权码后可一直免费使用。
选择忽略将导致 PySimpleGUI 绘制的程序将只能试用31天,注册填入授权码即可解决


本文首发于本人博客:https://blog.gitnote.cn/post/nps_gui/index.html

版权信息: CC BY-NC-SA 4.0 (自由转载-非商用-相同方式共享-保持署名)

这篇关于构建NPS内网穿透服务客户端GUI界面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883586

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域