QT 请教如何获取有效MAC地址和IP地址(IPV4)

-大漠孤烟- 2014-10-13 11:03:56
在网上这样来获取MAC地址和IP:
QList<QNetworkInterface>list = QNetworkInterface::allInterfaces();

foreach(QNetworkInterface interface, list) //遍历每个网络接口
{
//硬件地址
qDebug() << "HardwareAddress:" << interface.hardwareAddress();

//获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址
QList<QNetworkAddressEntry>entryList = interface.addressEntries();

foreach(QNetworkAddressEntry entry, entryList)//遍历每一个IP地址条目
{
//IP地址
qDebug() << "IP Address: " << entry.ip().toString();
//子网掩码
qDebug() << "Netmask: " << entry.netmask().toString();
//广播地址
qDebug() << "Broadcast: " << entry.broadcast().toString();
}
}
运行的结果是这样的,这是在win7系统下运行的结果
HardwareAddress: "58:91:CF:33:A6:71"
IP Address: "FE80::D0B8:3B91:5BB3:CCA4%13"
Netmask: "FFFF:FFFF:FFFF:FFFF::"
Broadcast: ""
IP Address: "192.168.0.100"
Netmask: "255.255.255.0"
Broadcast: "192.168.0.255"
HardwareAddress: "84:8F:69:D1:FC:42"
IP Address: "FE80::34D5:3E98:C8BD:9A20%12"
Netmask: "FFFF:FFFF:FFFF:FFFF::"
Broadcast: ""
IP Address: "169.254.154.32"
Netmask: ""
Broadcast: ""
HardwareAddress: "58:91:CF:33:A6:75"
IP Address: "FE80::50B7:7B6F:A027:3732%10"
Netmask: "FFFF:FFFF:FFFF:FFFF::"
Broadcast: ""
IP Address: "169.254.55.50"
Netmask: ""
Broadcast: ""
HardwareAddress: "00:50:56:C0:00:01"
IP Address: "FE80::E009:E055:7443:B876%17"
Netmask: "FFFF:FFFF:FFFF:FFFF::"
Broadcast: ""
IP Address: "192.168.24.1"
Netmask: "255.255.255.0"
Broadcast: "192.168.24.255"
HardwareAddress: "00:50:56:C0:00:08"
IP Address: "FE80::C910:AC4A:1562:3F86%18"
Netmask: "FFFF:FFFF:FFFF:FFFF::"
Broadcast: ""
IP Address: "192.168.112.1"
Netmask: "255.255.255.0"
Broadcast: "192.168.112.255"
HardwareAddress: ""
IP Address: "::1"
Netmask: "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"
Broadcast: ""
IP Address: "127.0.0.1"
Netmask: ""
Broadcast: ""
HardwareAddress: "00:00:00:00:00:00:00:E0"
IP Address: "FE80::5EFE:C0A8:64%22"
Netmask: "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"
Broadcast: ""
HardwareAddress: "00:00:00:00:00:00:00:E0"
IP Address: "FE80::5EFE:C0A8:7001%19"
Netmask: "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"
Broadcast: ""
HardwareAddress: "00:00:00:00:00:00:00:E0"
IP Address: "FE80::100:7F:FFFE%14"
Netmask: "FFFF:FFFF:FFFF:FFFF::"
Broadcast: ""
HardwareAddress: "00:00:00:00:00:00:00:E0"
IP Address: "FE80::5EFE:C0A8:1801%21"
Netmask: "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"
Broadcast: ""

问题是,我怎样来提取有效的MAN地址和IP呢,我通过MAC地址扫描器得到第一个MAC地址和IP是有效的,其他的 哪些怎么去屏蔽掉呢。
...全文
1579 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
-大漠孤烟- 2014-10-15
  • 打赏
  • 举报
回复
嗯,那应该怎么获取呢,最好是给出代码来,我现在还是个新手,自己从头写不了的
foruok 2014-10-14
  • 打赏
  • 举报
回复
其他设备你通过这种方式取不到的……
foruok 2014-10-14
  • 打赏
  • 举报
回复
QNetworkInterface有个方法flags()可返回接口的状态,比如是否环回接口,是否激活等,根据这个就可以筛选出来。 另外QNetworkAddressEntry可以取ipv4地址。
-大漠孤烟- 2014-10-14
  • 打赏
  • 举报
回复
非常感谢版主的回复,ipv4的解决了,去掉回环的不知道怎么用QNetworkInterface的flags(),呵呵。就直接来判断了,就去掉了回环。程序如下 QList<QNetworkInterface>list = QNetworkInterface::allInterfaces(); QHostAddress address2; int Neti = 0; foreach(QNetworkInterface interface, list) //遍历每个网络接口 { //硬件地址 qDebug() << "MAC Address:" << interface.hardwareAddress(); if(interface.hardwareAddress() == "00:00:00:00:00:00:00:E0") //去掉这个MAC地址 break; ui->tableWidget->setItem(Neti,2,new QTableWidgetItem(interface.hardwareAddress())); //获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址 QList<QNetworkAddressEntry>entryList = interface.addressEntries(); foreach(QNetworkAddressEntry entry, entryList)//遍历每一个IP地址条目 { address2=entry.ip(); if(address2.protocol() == QAbstractSocket::IPv4Protocol) { //IP地址 qDebug() << "IP Address: " << entry.ip().toString(); if(entry.ip().toString() == "127.0.0.1")//去掉回环 //if(interface.flags()==QNetworkInterface::IsLoopBack)//这样判断还是有回环 break; ui->tableWidget->setItem(Neti,1,new QTableWidgetItem(entry.ip().toString())); } } Neti++; } 运行结果如下: MAC Address: "58:91:CF:33:A6:71" IP Address: "192.168.0.100" MAC Address: "84:8F:69:D1:FC:42" IP Address: "169.254.154.32" MAC Address: "58:91:CF:33:A6:75" IP Address: "169.254.55.50" MAC Address: "00:50:56:C0:00:01" IP Address: "192.168.24.1" MAC Address: "00:50:56:C0:00:08" IP Address: "192.168.112.1" 追问:我是想得到局域网中所有在线设备的MAC地址和IP,然后进行UDP通信。上面的程序只是得到了我电脑的MAC和IP,其他设备的没有获取到啊
在Windows 10或Windows 11操作系统中,用户经常会遇到共享打印机时出现的一系列错误代码,这些错误代码可能会阻碍打印机共享功能的正常使用。常见的错误代码包括0x00000057、0x00000709和0x0000011b,这些代码通常指出了不同的问题,比如权限不足、服务未运行或配置错误等。除此之外,还有一些故障提示如“连接失败”或“内存不足”,这些都可能影响到打印机共享的稳定性。 要解决这些故障,首先要确保打印机已经正确地连接到网络,并且在需要共享的电脑上进行了设置。确保打印机驱动程序是最新的,并且在共享设置中没有错误配置。对于权限问题,需要检查网络上的用户账户是否具有足够的权限来访问共享打印机。同时,也要确保打印机服务正在运行,特别是“Print Spooler”服务,因为这是打印机共享服务的核心组件。 在某些情况下,问题可能与操作系统的更新有关,如升级到最新版的Windows 10或Windows 11后可能出现的兼容性问题。这时,可能需要查看微软的官方支持文档来获取特定的解决方案或更新。 对于错误代码0x00000057,这通常是由于没有足够的权限来访问网络打印机或其共享资源,解决方法是确保网络打印机的权限设置正确,包括在组策略中设置相应的访问权限。而0x00000709错误可能是由于打印机驱动问题或打印机端口配置错误,可以尝试重新安装或更新打印机驱动来解决。至于0x0000011b错误,这往往是因为打印机队列服务的问题,检查并重启“Print Spooler”服务通常是解决这类问题的常见手段。 至于“连接失败”或“内存不足”这类故障,通常与客户端和打印机之间的网络连接以及打印机本地资源的使用情况有关。检查网络连接,确保打印机所在的网络段没有故障或中断。同时,如果打印机的打印队列长时间得不到处理,可能会导致内存不足的情况,这时可能需要清理打印队列或增加打印机的内存配置。 为了帮助用户更快速地解决这些问题,市面上出现了各种打印机共享错误修复工具。这些工具往往通过预设的修复程序来自动检测和修正打印机共享中常见的问题。它们可以快速检查打印机驱动、网络连接以及共享设置,并且能够提供一键修复功能,大幅减少了用户自行排查和解决问题的难度。 然而,在使用这些修复工具之前,用户应确保这些工具的来源是安全可靠的,避免因使用不当的修复工具而引发其他系统安全或隐私问题。用户可以到官方平台或者信誉良好的软件提供商处下载这些工具。通过细心检查打印机的共享设置,及时更新驱动程序和服务,以及合理使用修复工具,大多数共享打印机的问题都可以得到有效的解决。

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧