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是有效的,其他的 哪些怎么去屏蔽掉呢。
...全文
1460 4 打赏 收藏 转发到动态 举报
写回复
用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,其他设备的没有获取到啊

16,238

社区成员

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

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