构建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

相关文章

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件