#include #include #include "dns-client/QDnsUdpClient.h" #include "dns-client/QDnsTcpClient.h" #include "dns-server/QDnsUdpServer.h" #include "dns-server/QDnsTcpServer.h" int main(int argc, char* argv[]) { QCoreApplication app(argc, argv); QHostAddress bindAddress("127.0.0.1"); quint16 bindPort = 5053; auto onRequest = [](QDns::Server::QDnsUdpServer::OnRequestParams params) { QDns::Base::QDnsPacket answer = params.query.makeAnswer(); auto header = answer.getHeader(); header.setReplyCode(QDns::Base::HeaderReplyCode::Refused); answer.setHeader(header); params.sendAnswer(QDns::Server::QDnsServer::SendAnswerParams { answer }); }; QDns::Server::QDnsTcpServer tcpServer; tcpServer.start(bindAddress, bindPort); QObject::connect(&tcpServer, &QDns::Server::QDnsServer::onRequest, onRequest); QDns::Server::QDnsUdpServer udpServer; udpServer.start(bindAddress, bindPort); QObject::connect(&udpServer, &QDns::Server::QDnsServer::onRequest, onRequest); // QDns::Client::QDnsUdpClient client(QHostAddress("127.0.0.1")); // QDns::Client::QDnsUdpClient client(QHostAddress("8.8.8.8")); QDns::Client::QDnsTcpClient client(QHostAddress("127.0.0.1"), 5053); // QDns::Client::QDnsTcpClient client(QHostAddress("8.8.8.8")); QList labels; labels << "www.google.fr" << "www.google.com" << "www.rthoni.com"; QObject::connect(&client, &QDns::Client::QDnsClient::onAnswer, [&client, &labels](QDns::Client::QDnsClient::OnAnswerParams params) { labels.removeOne(params.query.getQueries().at(0).getName()); for (const auto& answer : params.answer.getAnswerRecords()) { qDebug() << "Answer:" << answer.getName(); } qDebug() << "Answer:" << params.answer.getAnswerRecords().size(); if (labels.empty()) { client.disconnectFromHost(); } }); QObject::connect(&client, &QDns::Client::QDnsClient::onError, [&client, &labels](QDns::Client::QDnsClient::OnErrorParams params) { if (params.query.isValid()) { labels.removeOne(params.query.getQueries().at(0).getName()); } qDebug() << "Error:" << params.error; if (labels.empty()) { client.disconnectFromHost(); } }); QObject::connect(&client, &QDns::Client::QDnsClient::onStateChanged, [&client, &labels](QDns::Client::QDnsClient::OnStateChangedParams params) { qDebug() << "State:" << params.state; if (params.state == QDns::Client::QDnsClient::ClientState::Connected) { for (const auto& label : labels) { client.query(QDns::Base::QDnsPacket::makeSimpleQuery(label, QDns::Base::RecordType::A)); } } }); client.connectToHost(); return app.exec(); }