前言

公司服务器有多个mac地址,是用网上的代码获取时总是不准确,只能自己封装一下。qt通过QNetworkInterface类来获取网络接口的各种信息,我是通过解析QNetworkInterface数组来获取ip和mac的

先上代码,不想听原理的同学可以直接复制代码

准确获取mac地址

QString MainWindow::getHostMacAddress()
{QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();// 获取所有网络接口列表int nCnt = nets.count();qDebug()<<nets;QString strMacAddr = "";for(int i = 0; i < nCnt; i ++){// 如果此网络接口被激活并且正在运行并且不是回环地址,且该mac的ip地址不能是回环地址并且是ipv4地址,则就是我们需要找的Mac地址if(nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning)&& !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack)){for (int j=0;j<nets[i].addressEntries().size() ;j++ ) {//该mac的ip地址不能为172.0.0.1,且需是ipv4地址    if(nets[i].addressEntries().at(j).ip()!=QHostAddress::LocalHost&&nets[i].addressEntries().at(j).ip().protocol()== QAbstractSocket::IPv4Protocol
){strMacAddr = nets[i].hardwareAddress();}}}}qDebug()<<"strMacAddr"<<strMacAddr;return strMacAddr;
}

准确获取ip地址

QString MainWindow::getHostLocalIpAddress()
{QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();// 获取所有网络接口列表int nCnt = nets.count();QString strIpAddr = "";for(int i = 0; i < nCnt; i ++){// 如果此网络接口被激活并且正在运行并且不是回环地址,且该mac的ip地址不能是回环地址并且是ipv4地址,则就是我们需要找的ip地址if(nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning)&& !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack)){for (int j=0;j<nets[i].addressEntries().size() ;j++ ) {if(nets[i].addressEntries().at(j).ip()!=QHostAddress::LocalHost&&nets[i].addressEntries().at(j).ip().protocol()== QAbstractSocket::IPv4Protocol
){strIpAddr=nets[i].addressEntries().at(j).ip().toString();}}}}qDebug()<<"strIpAddr"<<strIpAddr;return strIpAddr;
}

原理分析

首先解析一下QList nets = QNetworkInterface::allInterfaces();网络接口信息

(QNetworkInterface(name = “lo”, hardware address = “00:00:00:00:00:00”, flags = IsUp IsRunning IsLoopBack , entries = ((address = QHostAddress(“127.0.0.1”), netmask = QHostAddress(“255.0.0.0”), broadcast = QHostAddress(“127.255.255.255”)), (address = QHostAddress(“::1”), netmask = QHostAddress(“ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff”))))
, QNetworkInterface(name = “enp2s0”, hardware address = “74:27:EA:27:8A:71”, flags = IsUp IsRunning CanBroadcast CanMulticast , entries = ((address = QHostAddress(“172.16.52.51”), netmask = QHostAddress(“255.255.255.0”), broadcast = QHostAddress(“172.16.52.255”)), (address = QHostAddress(“fe80::7627:eaff:fe27:8a71%enp2s0”), netmask = QHostAddress(“ffff:ffff:ffff:ffff::”))))
, QNetworkInterface(name = “virbr0”, hardware address = “52:54:00:A7:FB:D6”, flags = CanBroadcast CanMulticast , entries = ((address = QHostAddress(“192.168.122.1”), netmask = QHostAddress(“255.255.255.0”), broadcast = QHostAddress(“192.168.122.255”))))
)

或许你可能觉得看起来很复杂,让我们提取enp2s0中的信息

QNetworkInterface(name = "enp2s0",
hardware address = "74:27:EA:27:8A:71",
flags = IsUp IsRunning CanBroadcast CanMulticast ,
entries = ((address = QHostAddress("172.16.52.51"), netmask = QHostAddress("255.255.255.0"),broadcast = QHostAddress("172.16.52.255")),(address = QHostAddress("fe80::7627:eaff:fe27:8a71%enp2s0"), netmask = QHostAddress("ffff:ffff:ffff:ffff::")))
)

这样看起来就一目了然了,正确的mac和ip地址必须要满足:flags = IsUp IsRunning,且falgs不能有IsLoopBack。address = QHostAddress(“172.16.52.51”)中的ip地址不能是172.0.0.1且必须是ipv4地址

想要详细了解QNetworkInterface类的同学可自行查看qt说明文档,或下面这篇文章

链接:QNetworkInterface详解

码字不易,如果这篇博客对你有帮助,麻烦点赞收藏,非常感谢!有不对的地方

qt准确获取本机mac和ip地址相关推荐

  1. 获取本机的真实IP地址

    Code: import java.net.InetAddress; import java.net.UnknownHostException; /** * 获取本机的真实IP地址.<br> ...

  2. LabVIEW 获取本机多个ip地址

    图 1 网上见了好多设置的,都没讲清楚,在这里整理一下本机ip地址的获取问题.关键在"字符串向ip地址转换"函数的设置上面,见下图2,选择多输出就能获取本机的多个ip地址,若不选多 ...

  3. linux 获取本机的所有IP地址

    linux下获取本地的ip地址,我这里只介绍一种,亲测有效,包括你虚拟出来的IP地址也可以显示出来. 先说一下可能大家都有听过的使用 gethostname 函数和 gethostbyname 函数获 ...

  4. php获取本机内网ip地址

    内网ip只能用于内部通信,而不能与其它网络互连.在tcp/ip协议中,专门保留了三个网段作为私有网段地址.分别如下: 10.0.0.0/8: 10.0.0.0~10.255.255.255 172.1 ...

  5. C# 网络编程之获取本机名、ip地址、域名、物理位置

    在C#网络编程中,主机域名与ip之间能相互转换,同时DNS中有Dns类.IPHostEntry类.IPAddress类.DnsPermission类实现DNS的一些简单功能. 下面主要讲述一个C#的W ...

  6. C#获取本机名及IP地址

    using System; using System.Collections.Generic; using System.Text; using System.Net; //需要引用.Net命名空间n ...

  7. Qt网络获取本机网络信息

    下面我们就讲解如何获取自己电脑的IP地址以及其他网络信息.这一节中,我们会涉及到网络模块(QtNetwork Module)中的QHostInfo ,QHostAddress ,QNetworkInt ...

  8. android 获取网卡mac_Android获取本机Mac地址及IP地址方法

    1.Android  获取本机Mac 地址方法: 需要在AndroidManifest.xml文件中添加权限: public String getLocalMacAddress() { WifiMan ...

  9. js获取本机mac地址,IP地址

    <!DOCTYPE HTML> <html> <head>     <title>js获取本机mac地址,IP地址,计算机名</title> ...

最新文章

  1. Java—FileOperator
  2. 中国联通:基于SOC的MSS实践
  3. 35张非常精美的爱情桌面壁纸资源(下篇)
  4. Python 关于super 的 用法和原理(挖坑)
  5. Opengl :公转与自转
  6. 280. Wiggle Sort
  7. hadoop环境搭建笔记
  8. 不被重视的基础,高效地使用ADO.net连接对象
  9. 大数据专家手把手教你打造实时数据湖
  10. AVL树(Java实现)
  11. VMware Server1.03下载地址及序列号
  12. php opendir(),php之opendir()函数的用法
  13. c# FlexCell自动换行
  14. linux下搜狗输入法wps无法使用,搜狗输入法能在WPS下使用,但其他地方不能输入...
  15. django mysql sql语句_Django中使用mysql数据库并使用原生sql语句操作
  16. 四叉树lod结合灯塔AOI
  17. vue 项目安装 openlayer 加载高德地图
  18. Solaris 迅速查找手册
  19. PHP的ob_flush()与flush()区别
  20. 面试小结一:关于操作系统的面试题整理

热门文章

  1. 微信中扫一扫自动调用手机外部浏览器打开链接下载APP(APK)
  2. 南京师范大学的计算机科学与技术专业怎么样,南京师范大学计算机科学与技术学院...
  3. 程序员直男也有的浪漫,快来给朋友制作一款定时微信推送服务吧
  4. Yii框架zii.widgets.grid自定义按钮,ajax触发事件并提示
  5. ipad文件APP连接服务器,是时候认识一下 iPad 的文件管理了
  6. 【Python】具有异常处理功能的计算BMI值的python程序
  7. iPhone手机在Apple启动logo处卡住,无法开机该怎么办?
  8. SSD Trim介绍
  9. 【31】poisoned TLP导致的MCE问题
  10. python和c++情侣网名_“果然,他用的是情侣网名!”