用QT实现 端口扫描工具1

安装在线QT,尽量是完整地自己进行安装,不然会少包

参考【保姆级图文教程】QT下载、安装、入门、配置VS Qt环境-CSDN博客

临时存储空间不够。

Windows系统通常会使用C盘来存储临时文件。

修改临时文件存储位置

  1. 打开系统属性

    • 右键点击"此电脑"或"我的电脑",选择"属性"。
    • 点击"高级系统设置"。
  2. 环境变量

    • 在"系统属性"窗口中,选择"高级"选项卡,然后点击"环境变量"按钮。
  3. 修改临时文件路径

    • 在"用户变量"部分,找到TEMPTMP变量。
    • 选择其中一个,点击"编辑"。
    • 在弹出的窗口中,将路径更改为您希望存储临时文件的新位置(例如,D:\Temp)。
    • TEMPTMP变量都进行相同的修改。
  4. 创建新文件夹

    • 确保您指定的新路径已经存在。如果没有,请手动创建该文件夹。
  5. 保存更改

    • 点击"确定"保存更改,关闭所有窗口。
  6. 重启计算机

    • 为了确保更改生效,建议重启计算机。

修改路径之后即可安装

打开QT

再点一次,总共三次

配置如下

添加网络功能

在mainwindow.h中引入库

由于扫描功能没有qt自带的对应函数,所以要自己添加,无法像给quit添加槽一样直接添加

内部添加代码

cpp 复制代码
// 从用户界面的输入框中获取 IP 地址  
QString strIP = ui->lineEdit_IP->text();  
// 从用户界面的数字输入框中获取端口号  
int intPort = ui->spinBox_Port->value();  
// 将端口号转换为字符串格式  
QString strPort = QString::number(intPort);  

// 检查 IP 地址是否为空  
if(strIP.isEmpty()){  
    // 如果 IP 地址为空,弹出信息框提示用户输入 IP  
    QMessageBox::information(this, tr("Error"), QStringLiteral("请输入 IP"), QMessageBox::Ok);  
    return; // 结束函数执行  
}  

// 检查端口号是否为 0  
if(intPort == 0){  
    // 如果端口号为 0,弹出信息框提示用户输入端口  
    QMessageBox::information(this, tr("Error"), QStringLiteral("请输入 port"), QMessageBox::Ok);  
    return; // 结束函数执行  
}  

// 清空树形控件中的所有项  
ui->treeWidget->clear();  

// 创建一个新的树形控件项,使用输入的 IP 地址作为其文本  
QTreeWidgetItem *items1 = new QTreeWidgetItem(ui->treeWidget, QStringList(strIP));  

// 创建一个 QTcpSocket 对象,用于网络连接  
QTcpSocket socket(0);  
// 取消任何现有的连接  
socket.abort();  
// 尝试连接到指定的 IP 地址和端口  
socket.connectToHost(strIP, intPort);  

// 等待连接,最多等待 1000 毫秒(1 秒)  
if(socket.waitForConnected(1000))  
{  
    // 如果连接成功,添加一个新的树形控件项,显示端口已打开  
    new QTreeWidgetItem(items1, QStringList(strPort + " opened"));  
}  
else  
{  
    // 如果连接失败,添加一个新的树形控件项,显示端口已关闭  
    new QTreeWidgetItem(items1, QStringList(strPort + " closed"));  
}

如果显示找不到部件,有可能是大小写这种微妙的差别。

构建并运行

localhost 通常用 IP 地址 127.0.0.1 表示。这是一个环回地址,指向本地计算机。使用这个地址可以在网络上与本机进行通信,而不需要通过网络接口。

用cmd查看

0.0.0.0:135 的监听范围更广,包含了 127.0.0.1:135 的监听范围。

这说明cmd的结果与我运行的结果是一致的。
修改 QTreeWidget 初始化表头
在构造函数中添加如下代码,设置 QTreeWidget 控件的初始化表头为"扫描结果"

cpp 复制代码
//给 QTreeWidget 初始化表头
 QStringList head;
 head << "扫描结果";
 // 设置表头
 ui->treeWidget->setHeaderLabels(head);

我的遮挡我一直以为是保存更新的问题,其实只是框框拖小了,拖大一点就不遮挡了

生成发布版本

再按锤子生成exe

打开release的文件夹

运行这个"应用程序"

显示找不到三个dll

解决:
使用 Qt 工具构建发行包
Qt 提供了一个工具 windeployqt.exe 实现发行包的构建。
把生成的 simplescan.exe 复制到一个目录下,如:
D:\YunNotes\QTdevelopment\PortScanning\workPlace\PortScanning.exe

进入qt终端 然后输入运行 windeployqt
从win进cmd
search

windeployqt D:\YunNotes\QTdevelopment\PortScanning\workPlace\PortScanning.exe

之后即可在 workPlace 目录下看到 windeployqt 工具自动复制的插件文件夹和 dll 文件等。这
时候得到的就完整的 exe 程序发布集合,依赖关系都解决好了。

再次运行测试 .exe ,发现功能正常。

相关推荐
FuckPatience28 分钟前
QT 不允许使用不完整的类型
qt
四维碎片1 小时前
【Qt】 无边框窗口方案
开发语言·qt
sycmancia1 小时前
QT——Qt Creator工程介绍
开发语言·qt
娇娇yyyyyy1 小时前
QT编程(20): Qt QListWidget QTreeWidget介绍
数据库·qt·microsoft
wumingqilin1 小时前
QT ui 修改后需要重新编译ui 文件
qt
anzhxu10 小时前
QT数据库(三):QSqlQuery使用
数据库·qt·oracle
娇娇yyyyyy14 小时前
QT编程(17): Qt 实现自定义列表模型
开发语言·qt
肖恭伟16 小时前
Cursor Superpowers 零基础开发 Qt 界面
开发语言·qt
qq_2837200516 小时前
Qt QML 中为 CheckBox 设置鸿蒙字体(HarmonyOS Sans)——适配 Qt 5.6.x 与 Qt 5.12+
开发语言·qt·harmonyos
奇树谦1 天前
3-5年工控上位机(C++/Qt)面试题|聚焦实战,直击核心模块
c++·qt