QT C++ WIFI扫描连接 IP打印 百分百有效
2023-12-26 13:07:07
还是有许多不懂的问题,大佬看了如果愿意教我的话,我会非常乐意求教的。
头文件
QNetworkConfigurationManager
QNetworkConfiguration
QNetworkSession
QNetworkInterface
WiFi扫描
//创建QNetworkConfigurationManager 对象
QNetworkConfigurationManager manager;
//获取所有的wifi信息
//allConfigurations里面可以填参数具体解释下面给出
//如果不写参数就是所有的能扫描到的WiFi,但是我不知道是不是我的问题
//会扫到一个 “” 空白名字的WiFi
QList<QNetworkConfiguration> configs = manager.allConfigurations();
//更新所有的网络配置信息
//manager.updateConfigurations();
// 扫描可用的WiFi网络
qDebug() << "扫描到的WiFi:";
//遍历List
foreach (const QNetworkConfiguration &config, configs)
{
//如果是无线 LAN 接口 且 名字不为空
if (config.bearerType() == QNetworkConfiguration::BearerWLAN && config.name() != "" )
{
//打印WiFi名字
qDebug() << "SSID:" << config.name();
}
}
Undefined:
??此状态用于临时配置,例如用户尚未实际为其创建配置的新发现的 WLAN。
??我的理解是能扫描到的范围内的没有连接过的WiFi。
Defined:
??定义的配置对系统来说是已知的,但不能立即使用(例如,配置的 WLAN 不在范围内或以太网电缆当前未插入机器)。
??这个我也不太理解,输出是和Discovered一样的。懂得dd我一下0.0。
.Discovered:
??发现的配置可以立即用于创建新的 QNetworkSession。 如果配置是服务网络,则如果至少一个底层接入点配置具有已发现状态,则设置此标志。
??我的理解是范围内能扫描到的所有已经连接过的WiFi。
Active:
??该配置当前由开放网络会话使用(QNetworkSession::isOpen())。
??我的理解是当前连接的WiFi。
WiFi连接
我这个连接只能连接当前电脑连接过并且保存了密码的WIFI,并不能连接从未连接配置过的WiFi,有懂的大佬踢我一下。
//容器对象什么的上面已经创建了
QString ssidToConnect = "xxxx";//WiFi名字
foreach (const QNetworkConfiguration &config, configs)
{
if (config.bearerType() == QNetworkConfiguration::BearerWLAN && config.name() == ssidToConnect)
{
QNetworkSession session(config);、
//打开会话
session.open();
//这里应该提供一点延时 或者使用等待打开函数 但是这个函数我用着并不能连接WiFi 懂得大佬踢我一下
//如果连接成功
if (session.isOpen()) {
qDebug() << "Connected to WiFi network:" << config.name();
} else {
qDebug() << "Failed to connect to WiFi network:" << config.name();
}
break;
}
}
打印IP
auto list = QNetworkInterface::allInterfaces();
//遍历
foreach (QNetworkInterface interface, list)
{
//如果有安装VMware虚拟机的话,会出现两个虚拟网卡
//匹配关键字"VMware"。来过滤虚拟网卡
//if(interface.humanReadableName().contains("VMware"))
//continue;
//如果不是wlan过滤掉
//humanReadableName 顾名思义 人读的名字 即 本地连接、WLAN等等
if( interface.humanReadableName() != "WLAN" )
continue;
//一般都会有两个ip地址,一个ipv4一个ipv6地址
//根据协议版本,来过滤掉ipv6地址
foreach (auto entry ,interface.addressEntries())
{
if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol)
qDebug() << "ip:" <<entry.ip();
}
}
文章来源:https://blog.csdn.net/weixin_52604835/article/details/135217722
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!