QT C++ WIFI扫描连接 IP打印 百分百有效

发布时间:2023年12月26日

WIFI扫描连接 IP打印

还是有许多不懂的问题,大佬看了如果愿意教我的话,我会非常乐意求教的。

头文件

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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。