c++ qt ip symbian

c++ - Obtener la dirección IP local en Qt



symbian (6)

Aquí está el código que implementé para obtener: nombre, IP, máscara de red y dirección MAC de localhost.

QString localhostname = QHostInfo::localHostName(); QString localhostIP; QList<QHostAddress> hostList = QHostInfo::fromName(localhostname).addresses(); foreach (const QHostAddress& address, hostList) { if (address.protocol() == QAbstractSocket::IPv4Protocol && address.isLoopback() == false) { localhostIP = address.toString(); } } QString localMacAddress; QString localNetmask; foreach (const QNetworkInterface& networkInterface, QNetworkInterface::allInterfaces()) { foreach (const QNetworkAddressEntry& entry, networkInterface.addressEntries()) { if (entry.ip().toString() == localhostIP) { localMacAddress = networkInterface.hardwareAddress(); localNetmask = entry.netmask().toString(); break; } } } qDebug() << "Localhost name: " << localhostname; qDebug() << "IP = " << localhostIP; qDebug() << "MAC = " << localMacAddress; qDebug() << "Netmask = " << localNetmask;

¿Existe una forma de plataforma cruzada para obtener la dirección IP local (es decir, algo que se parece a 192.168.1.49 ) de la computadora que usa Qt?

Quiero crear un servidor FTP para un teléfono Symbian y quiero mostrar la dirección IP a la que se debe conectar el cliente FTP.


QNetworkInterface devuelve muchas direcciones. debe filtrarlos, para obtener el resultado deseado:

foreach (const QNetworkInterface &netInterface, QNetworkInterface::allInterfaces()) { QNetworkInterface::InterfaceFlags flags = netInterface.flags(); if( (bool)(flags & QNetworkInterface::IsRunning) && !(bool)(flags & QNetworkInterface::IsLoopBack)){ foreach (const QNetworkAddressEntry &address, netInterface.addressEntries()) { if(address.ip().protocol() == QAbstractSocket::IPv4Protocol) qDebug() << address.ip().toString(); } } }


Quería obtener la dirección IP eth1 de mi máquina objetivo. Las respuestas proporcionadas anteriormente me ayudaron a obtener lo que quería: así escribí mi función para obtener la dirección IP del nombre de la interfaz de red eth1 .

QNetworkInterface eth1Ip = QNetworkInterface::interfaceFromName("eth1"); QList<QNetworkAddressEntry> entries = eth1Ip.addressEntries(); if (!entries.isEmpty()) { QNetworkAddressEntry entry = entries.first(); qDebug() << entry.ip(); }


Si necesita más información que solo direcciones IP (como la subred), debe iterar sobre todas las interfaces.

QList<QNetworkInterface> allInterfaces = QNetworkInterface::allInterfaces(); QNetworkInterface eth; foreach(eth, allInterfaces) { QList<QNetworkAddressEntry> allEntries = eth.addressEntries(); QNetworkAddressEntry entry; foreach (entry, allEntries) { qDebug() << entry.ip().toString() << "/" << entry.netmask().toString(); } }


Utilice QNetworkInterface::allAddresses()

foreach (const QHostAddress &address, QNetworkInterface::allAddresses()) { if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress(QHostAddress::LocalHost)) qDebug() << address.toString(); }


QNetworkInterface::allAddresses() le dará las direcciones de red. A continuación, puede filtrar los resultados a direcciones IPv4 que no son direcciones de bucle invertido:

QList<QHostAddress> list = QNetworkInterface::allAddresses(); for(int nIter=0; nIter<list.count(); nIter++) { if(!list[nIter].isLoopback()) if (list[nIter].protocol() == QAbstractSocket::IPv4Protocol ) qDebug() << list[nIter].toString(); }