It should be pretty easy to plug this code into a project, instantiate a NetworkTest object and call ‘Start’ on it. Please see the last section for further explanation of what’s happening. // Declaration #include #include #include #include #include #include class NetworkTest : public QObject { Q_OBJECT public: void Start(); private: QNetworkConfigurationManager net_config_mgr_; QNetworkAccessManager net_access_mgr_; void HandleNetworkResponse(QNetworkReply *reply); private Q_SLOTS: void Continue(); }; // Implementation void NetworkTest::Start() { qInfo() << "START NETWORK TEST, Qt Version:" << qVersion(); connect(&net_access_mgr_, &QNetworkAccessManager::finished, this, &NetworkTest::HandleNetworkResponse); connect(&net_config_mgr_, &QNetworkConfigurationManager::updateCompleted, this, &NetworkTest::Continue); net_config_mgr_.updateConfigurations(); } void NetworkTest::Continue() { qInfo() << "CONTINUE NETWORK TEST"; QList configs = net_config_mgr_.allConfigurations(QNetworkConfiguration::Discovered); QNetworkConfiguration testConfig; for (QListIterator itr(configs); itr.hasNext(); ) { QNetworkConfiguration config = itr.next(); qInfo() << "CONFIG:" << config.name() << "ID=" << config.identifier(); // Select a configuration that does not have internet access. if (config.name().startsWith("utun0")) { testConfig = config; } } if (testConfig.isValid()) { QNetworkRequest request(QUrl("http://www.suitabletech.com/wifi_verify.html")); qInfo() << "SEND REQUEST VIA CONFIG:" << testConfig.name() << "ID=" << testConfig.identifier(); net_access_mgr_.setConfiguration(testConfig); net_access_mgr_.get(request); } } void NetworkTest::HandleNetworkResponse(QNetworkReply *reply) { if (reply->error() == QNetworkReply::NoError) { QNetworkAccessManager *net_access_mgr = reply->manager(); qInfo() << "GOT REPLY VIA CONFIG:" << net_access_mgr->configuration().name() << "ID=" << net_access_mgr->configuration().identifier() << "DATA=" << reply->readAll(); } else { qInfo() << "NETWORK TEST ERROR: " << (int)reply->error(); } } // Output START NETWORK TEST, Qt Version: 5.8.0 CONTINUE NETWORK TEST CONFIG: "en0" ID= "287176529" CONFIG: "utun0" ID= "312537764" CONFIG: "utun1" ID= "312537765" SEND REQUEST VIA CONFIG: "utun0" ID= "312537764" GOT REPLY VIA CONFIG: "utun0" ID= "312537764" DATA= "OK\n" // Explanation So as you can see, I tell the network access manager to use “utun0” and it apparently succeeds. The problem is that the “utun0” interface has no internet access and I can see in Wireshark that it’s actually using the one that does, “en0”.