首页 > 其他分享 >Qt获取ip和mac地址

Qt获取ip和mac地址

时间:2023-03-08 16:12:40浏览次数:41  
标签:Qt ip ffff 地址 mac QHostAddress nets QNetworkInterface

准确获取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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
准确获取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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

原理分析

首先解析一下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::"))
)
)
1
2
3
4
5
6
7
8
9
这样看起来就一目了然了,正确的mac和ip地址必须要满足:flags = IsUp IsRunning,且falgs不能有IsLoopBack。address = QHostAddress(“172.16.52.51”)中的ip地址不能是172.0.0.1且必须是ipv4地址


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

链接:QNetworkInterface详解


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

文章知识点与官方知识档案匹配,可进一步学习相关知识
网络技能树首页
————————————————
版权声明:本文为CSDN博主「小土同学!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44092851/article/details/124814913

标签:Qt,ip,ffff,地址,mac,QHostAddress,nets,QNetworkInterface
From: https://www.cnblogs.com/tingtaishou/p/17192361.html

相关文章

  • Day 14 14.2 代理IP
    代理IP代理IP:反反爬使用代理ip是非常必要的一种反反爬的方式,但是即使使用了代理ip,对方服务器任然会有很多的方式来检测我们是否是一个爬虫,比如:一段时间内,检测IP访问的频率......
  • mac上网看视频,听歌必备软件有哪些
    都说“买前生产力,买后爱奇艺”,MacBook买回来主要的是上网,看视频,听歌,那么需要哪些软件呢?一、视频客户端:腾讯视频,爱奇艺,优酷二、音乐客户端:QQ音乐,网易云音乐,虾米音乐......
  • 升级ArcGIS API for JavaScript 4.26踩坑指南
    背景    之前有个老项目用了4.23的版本,就想着升级到最新,万万没想到折腾了一天,踩了不少坑终于搞好了。版本升级问题    首先升级版本不是改下版本好就行,还要配......
  • 【JavaScript UI库和框架】上海道宁与Webix为您提供用于跨平台Web应用程序开发的JS框
     Webix是Javascript库一种软件产品用于加速Web开发的JavaScriptUI库和框架Webix用于跨平台Web应用程序开发的JS框架102个UI小部件和功能丰富的CSS/HT......
  • Qt音视频开发21-mpv内核万能属性机制
    一、前言搞过vlc内核后又顺带搞了搞mpv内核,mpv相比vlc,在文件数量、sdk开发便捷性方面绝对占优势的,单文件(可能是静态编译),不像vlc带了一堆插件,通过各种属性来set和get值,后面......
  • springBoot集成mqtt
    springBoot集成mqtt目录springBoot集成mqtt简介下载启动springBoot集成mqtt结束简介EMQX是一款大规模可弹性伸缩的云原生分布式物联网MQTT消息服务器。作为全球最具扩......
  • Mac Docker运行Python记录
    记录错误:1(base)kaka@KakadeMacBook-Proproject%dockerimages2REPOSITORYTAGIMAGEIDCREATEDSIZE3python/p......
  • JavaScript上传文件夹的三种解决方案
    ​ 前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对Http协议较模糊,故这次采用渐进的方式来学习文件上传的......
  • 汇率市场大幅波动,用友BIP全球司库助力企业外汇避险
        随着汇率市场化改革不断深化以及国际市场日益扩张,汇率变动不确定性和复杂性也随之加大,有效应对交易折算经营产生的汇率风险,需要我国贸易企业汇率风险的因素管控,......
  • 轻量级CI/CD发布部署环境搭建及使用_07_jenkins配置pipeline
    轻量级CI/CD发布部署环境搭建及使用_07_jenkins配置pipeline尽自己的绵薄之力,为开源技术分享添砖加瓦1,设置pipeline  2,设置git仓库地址、用户名、密码 3,生成流......