用QT实现 端口扫描工具1

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

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

临时存储空间不够。

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

修改临时文件存储位置

  1. 打开系统属性:

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

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

    • 在"用户变量"部分,找到TEMP和TMP变量。
    • 选择其中一个,点击"编辑"。
    • 在弹出的窗口中,将路径更改为您希望存储临时文件的新位置(例如,D:\Temp)。
    • 对TEMP和TMP变量都进行相同的修改。
  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 ,发现功能正常。

相关推荐
慧都小项5 天前
当边缘AI上产线:QtitanDocking 如何让工业 HMI 实现多视图协同
人工智能·qt·ui·边缘计算·qt6.3
Quz5 天前
QML SwipeDelegate 滑动委托
qt
Quz5 天前
QML 列表中的四种委托:ItemDelegate、CheckDelegate、RadioDelegate、SwitchDelegate
qt
实心儿儿5 天前
Qt — 显示类控件
qt
江湖人称菠萝包6 天前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter9-Qt Charts
笔记·qt·qt5
扶尔魔ocy6 天前
【QT android】环境安装及第一个QT项目
qt·andriod开发
江湖人称菠萝包6 天前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter10-Data Visualization
笔记·qt·qt5
Cx330❀6 天前
Qt 常用控件属性与底层机制详解:从窗口半透明、浮点数陷阱到 QSS 与焦点策略
qt·ui·图形渲染
Quz6 天前
QML DelegateChooser:多条件组合与按列选择委托
qt
Quz6 天前
QML DelegateChooser:按角色选择委托与按索引选择委托
qt