Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2834|回复: 0
打印 上一主题 下一主题

QT 获取本地IP MAC地址 外网IP 位置信息 连网状态 操作系统信息

[复制链接]

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
跳转到指定楼层
楼主
发表于 2018-4-10 15:21:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Qter 于 2018-4-11 09:39 编辑

在pro文件加了一行
QT += network
  1. #include <QHostAddress>
  2. #include <QNetworkInterface>
  3. QString MainWindow::gethostIp()
  4. {
  5.     QString strIpAddress;
  6.     QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
  7.     // 获取第一个本主机的IPv4地址
  8.     int nListSize = ipAddressesList.size();
  9.     for (int i = 0; i < nListSize; ++i)
  10.     {
  11.        if (ipAddressesList.at(i) != QHostAddress::LocalHost &&
  12.            ipAddressesList.at(i).toIPv4Address())
  13.        {
  14.            strIpAddress = ipAddressesList.at(i).toString();
  15.            break;
  16.        }
  17.      }
  18.      // 如果没有找到,则以本地IP地址为IP
  19.      if (strIpAddress.isEmpty())
  20.         strIpAddress = QHostAddress(QHostAddress::LocalHost).toString();
  21.      return strIpAddress;
  22. }

  23. QString MainWindow::gethostMac()
  24. {
  25.     QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();// 获取所有网络接口列表
  26.     int nCnt = nets.count();
  27.     QString strMacAddr = "";
  28.     for(int i = 0; i < nCnt; i ++)
  29.     {
  30.         // 如果此网络接口被激活并且正在运行并且不是回环地址,则就是我们需要找的Mac地址
  31.         if(nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning)
  32.                 && !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))
  33.         {
  34.             strMacAddr = nets[i].hardwareAddress();
  35.             break;
  36.         }
  37.     }
  38.     return strMacAddr;
  39. }
复制代码
连网状态
  1. bool MainWindow::IPLive(QString ip, int port)
  2. {
  3.     QTcpSocket tcpClient;
  4.     tcpClient.abort();
  5.     tcpClient.connectToHost(ip, port);
  6.     //100毫秒没有连接上则判断不在线
  7.     return tcpClient.waitForConnected(100);
  8. }
  9. 调用  判断百度 80端口是否连通
  10. qDebug() << IPLive("202.108.22.5", 80);
复制代码
外网IP及位置信息 通过网页 http://whois.pconline.com.cn/ 查询解析
  1. #include <QNetworkAccessManager>
  2. #include <QNetworkRequest>
  3. #include <QNetworkReply>
  4. #include <QTextCodec>

  5. QByteArray MainWindow::GetHtml(QString url)
  6. {
  7.     QNetworkAccessManager *manager = new QNetworkAccessManager();
  8.     QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(url)));
  9.     QByteArray responseData;
  10.     QEventLoop eventLoop;
  11.     QObject::connect(manager, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
  12.     eventLoop.exec();
  13.     responseData = reply->readAll();
  14.     return responseData;
  15. }


  16. QString MainWindow::GetNetIPPconline(QByteArray responseData)
  17. {
  18.     QTextCodec* pTextCodec = QTextCodec::codecForName("GB2312");
  19.         if (NULL == pTextCodec)
  20.         {
  21.             return "";
  22.         }
  23.     QString webCode = pTextCodec->toUnicode(responseData);
  24.     QString ipinfo = "";
  25.     QString web = webCode.replace(" ", "");
  26.     web = web.replace("\r", "");
  27.     web = web.replace("\n", "");
  28.     web = web.replace("\t", "");
  29.     QStringList list = web.split("</form>");
  30.     if(list.count() > 0)
  31.     {
  32.         ipinfo = list[0];
  33.         list = ipinfo.split("value=");
  34.         ipinfo = list.last();
  35.         list = ipinfo.split("><");
  36.         ipinfo = list[0];
  37.     }
  38.     return ipinfo.replace("\"","");
  39. }

  40. //获取外网的归属地
  41. QString MainWindow::GetAttributionPconline(QByteArray responseData)
  42. {
  43.     QTextCodec* pTextCodec = QTextCodec::codecForName("GB2312");
  44.         if (NULL == pTextCodec)
  45.         {
  46.             return "";
  47.         }
  48.     QString webCode = pTextCodec->toUnicode(responseData);


  49. //    webCode = webCode.fromLocal8Bit(responseData.data());

  50.     QString attribution = "";
  51.     QString web = webCode; //.replace(" ", "");
  52.     web = web.replace("\r", "");
  53.     web = web.replace("\n", "");
  54.     web = web.replace("\t", "");
  55.     QStringList list = web.split("</form>");
  56.     if(list.count() > 0)
  57.     {
  58.         attribution = list[0];
  59.         list = attribution.split("<p>");
  60.         attribution = list.last();
  61.         list = attribution.split("</p>");
  62.         attribution = list[0];
  63.     }
  64.     QStringList addInfo =  attribution.split(":");
  65.     if(addInfo.count() > 1){
  66.         return addInfo[1].trimmed();
  67.     }
  68.     return attribution;
  69. }
  70. 调用
  71. qDebug() << GetNetIPPconline(GetHtml("http://whois.pconline.com.cn/"));
  72.     qDebug() << GetAttributionPconline(GetHtml("http://whois.pconline.com.cn/"));
复制代码
只查询外网ip  通过 http://www.3322.org/dyndns/getip
  1. //获取本机公网IP地址
  2. QString MainWindow::GetNetIP3322(QString webCode)
  3. {
  4.     QString ip = "";
  5.     QString web = webCode.replace(" ", "");
  6.     web = web.replace("\r", "");
  7.     ip = web.replace("\n", "");
  8.     return ip;
  9. }

  10. qDebug() << GetNetIP3322(GetHtml("http://www.3322.org/dyndns/getip"));
复制代码
获取操作系统信息
  1. #include <QSysInfo>

  2. QString MainWindow::getOSInfo()
  3. {
  4.     QString osInfo;
  5.     qDebug() << "buildCpuArchitecture: " << QSysInfo::buildCpuArchitecture();
  6.     osInfo = QSysInfo::prettyProductName() +" [" +QSysInfo::productType() +" "+ QSysInfo::productVersion() +"(" + QString::number(QSysInfo::windowsVersion()) + ")]";
  7.     osInfo += " | " + QSysInfo::buildAbi() + " | " + QSysInfo::currentCpuArchitecture() + " | " + QSysInfo::kernelType() + " " + QSysInfo::kernelVersion() + " | " + QSysInfo::machineHostName();
  8.     return osInfo;
  9. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-5 02:04 , Processed in 0.058142 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表