windows下用qt获取本地IP地址,显示的格式好像是16进制的,如何转换成10进制
获取函数为QHostInfohostInfo=QHostInfo::fromName(localHostName);QList<QHostAddress>listAddr...
获取函数为QHostInfohostInfo=QHostInfo::fromName(localHostName);QList<QHostAddress>listAddress=hostInfo.addresses();通过listAddress.first().toString()转换为字符串,但IP显示时时这样的FE80:0:0:0:F5C4:86DF:BAD0:9AE2,如何把它改成例如127.0.0.1的格式。谢谢哈
就是如何将得到的IPV6地址转换为IPV4,谢谢 展开
就是如何将得到的IPV6地址转换为IPV4,谢谢 展开
2个回答
2013-04-24
展开全部
这个是IPv6的地址,本来IPV6的地址的表示格式就是分号分隔的16进制字符串,说起来是没必要变成点分十进制的,也没有程序认。
你用protocol()方法检查是否等于QAbstractSocket::IPv4Protocol
QList<QNetworkInterface>InterfaceIpList=QNetworkInterface::allInterfaces();
for(inti=0;i<InterfaceIpList.length();i++)
{
if(InterfaceIpList[i].isValid())
{
foreach(QNetworkAddressEntry addressE , InterfaceIpList[i].addressEntries() )
{
if(addressE.ip().protocol()==QAbstractSocket::IPv4Protocol
&&addressE.broadcast()!=QHostAddress::Null)
{
NetInterfaceList<<addressE.ip().toString();
}
}
}
}
注意以上不包括回环地址127.0.0.1和通配地址:0.0.0.0
还有一个简单的方法:
QList<QHostAddress> InterfaceIpList=QNetworkInterface::allAddresses () ;
for(int i=0;i<InterfaceIpList.length();i++)
{
if(InterfaceIpList[i].protocol()==QAbstractSocket::IPv4Protocol)
{
NetInterfaceList<<InterfaceIpList[i].toString();
}
}
这个会包含非有效IP:即未连接的网卡缓存的IP地址,这个可能和系统有关。
你如果用hostinfo也得检查是否有效和过滤IP类型。
你用protocol()方法检查是否等于QAbstractSocket::IPv4Protocol
QList<QNetworkInterface>InterfaceIpList=QNetworkInterface::allInterfaces();
for(inti=0;i<InterfaceIpList.length();i++)
{
if(InterfaceIpList[i].isValid())
{
foreach(QNetworkAddressEntry addressE , InterfaceIpList[i].addressEntries() )
{
if(addressE.ip().protocol()==QAbstractSocket::IPv4Protocol
&&addressE.broadcast()!=QHostAddress::Null)
{
NetInterfaceList<<addressE.ip().toString();
}
}
}
}
注意以上不包括回环地址127.0.0.1和通配地址:0.0.0.0
还有一个简单的方法:
QList<QHostAddress> InterfaceIpList=QNetworkInterface::allAddresses () ;
for(int i=0;i<InterfaceIpList.length();i++)
{
if(InterfaceIpList[i].protocol()==QAbstractSocket::IPv4Protocol)
{
NetInterfaceList<<InterfaceIpList[i].toString();
}
}
这个会包含非有效IP:即未连接的网卡缓存的IP地址,这个可能和系统有关。
你如果用hostinfo也得检查是否有效和过滤IP类型。
追问
您的回答很丰富,获益匪浅。但是我想知道的是如何将得到的IPV6转换为IPV4,希望您能帮我解决一下,谢谢
追答
现阶段的基本上windows下都开启了隧道技术来解决IPv6的问题。每个网卡也会拥有一个IPv4和一个IPv6,所以用foreach遍历QListlistAddress=hostInfo.addresses() 用protocol()检查协议类型就好了。如果协议类型是QAbstractSocket::IPv4Protocol 就是你要的地址啊,IPv6本来就不能变成IPv4,无论你怎么努力都找不到从IPv6变成IPv4的方法。如果一个服务器有IPv6然后此网卡上也有IPv4的话,用hostinfo查询DNS可能能获得其IPv4.
QList 本来就是一个地址list,你非得只想用第一个元素决定地址,本来就不一定是IPv4啊。
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家可靠的代理服务提供商,提供原生IP(住宅原生IP)和高匿名代理服务。以下是关于StormProxies的原生IP服务的一些信息:1. 住宅原生IP:StormProxies提供的住宅原生IP是指从真实的家庭或企...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询