QNetworkInterface类提供了一个主机IP地址和网络接口的列表
使用方法:在pro文件中添加 QT += network
,并添加头文件 #include <QNetworkInterface>
1.获取主机网络接口列表及相关信息
QNetworkInterface::allInterfaces()
QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();
int count=nets.count(); //接口的数量
int i = 0;
foreach(QNetworkInterface netinterface,nets)
{
qDebug()<<i<<netinterface.name()<<netinterface.hardwareAddress()<<netinterface.humanReadableName(); //接口名称及MAC地址,暂不清楚name方法和humanReadableName方法的区别
//判断该接口是否是环回口
QNetworkInterface::InterfaceFlags flags = ni.flags();
if(flags.testFlag(QNetworkInterface::IsLoopBack)){
qDebug()<<"This is loopback";
}
else {
qDebug()<<"This is not loopback";
}
i++;
}
2.获取主机ip地址
QNetworkInterface::allAddresses()
QList<QHostAddress> list = QNetworkInterface::allAddresses();
for (int i = 0; i < list.size(); i++){
qDebug()<<i<<" "<< list.at(i);
}
这里ipv4地址与ipv6地址都可获取,(详细使用方法还未研究)
3.根据网络接口获取ip地址
在方法1中获取的网络接口,获取该接口的ip地址等信息并判断是ipv4还是ipv6
QList<QNetworkAddressEntry> entryList = netinterface.addressEntries();
for(int j=0;j<entryList.count();j++){
QNetworkAddressEntry entry = entryList.at(j);
QHostAddress ip=entry.ip();
qDebug()<<"IP地址: "<<ip.toString();
qDebug()<<"子网掩码: "+entry.netmask().toString();
qDebug()<<"广播地址: "+entry.broadcast().toString();
QAbstractSocket::NetworkLayerProtocol protocol= ip.protocol();
switch (protocol){
case QAbstractSocket::IPv4Protocol:
qDebug()<<"IPv4 Protocol";
break;
case QAbstractSocket::IPv6Protocol:
qDebug()<<"IPv6 Protocol";
break;
case QAbstractSocket::AnyIPProtocol:
qDebug()<<"Any IP Protocol";
break;
default:
qDebug()<<"Unknown Protocol";
}
}