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

相关文章

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

SpringBoot实现websocket服务端及客户端的详细过程

《SpringBoot实现websocket服务端及客户端的详细过程》文章介绍了WebSocket通信过程、服务端和客户端的实现,以及可能遇到的问题及解决方案,感兴趣的朋友一起看看吧... 目录一、WebSocket通信过程二、服务端实现1.pom文件添加依赖2.启用Springboot对WebSocket

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

Nacos客户端本地缓存和故障转移方式

《Nacos客户端本地缓存和故障转移方式》Nacos客户端在从Server获得服务时,若出现故障,会通过ServiceInfoHolder和FailoverReactor进行故障转移,ServiceI... 目录1. ServiceInfoHolder本地缓存目录2. FailoverReactorinit