36

192.168.1.49Qtを使用してコンピューターのローカルIPアドレス(つまり、次のようなもの)を取得するクロスプラットフォームの方法はありますか?

Symbian電話用のFTPサーバーを作成し、FTPクライアントが接続する必要のあるIPアドレスを表示したいと思います。

4

6 に答える 6

56

QNetworkInterface :: allAddresses()を使用する

const QHostAddress &localhost = QHostAddress(QHostAddress::LocalHost);
for (const QHostAddress &address: QNetworkInterface::allAddresses()) {
    if (address.protocol() == QAbstractSocket::IPv4Protocol && address != localhost)
         qDebug() << address.toString();
}
于 2012-12-12T09:52:55.390 に答える
17

QNetworkInterface::allAddresses()ネットワークアドレスが表示されます。次に、結果をループバックアドレスではないIPv4アドレスにフィルタリングできます。

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();

  }
于 2013-12-11T07:00:18.190 に答える
7

IPアドレス(サブネットなど)以外の情報が必要な場合は、すべてのインターフェイスを反復処理する必要があります。

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();
    }
}
于 2015-06-09T02:28:03.383 に答える
6

QNetworkInterfaceは多くのアドレスを返します。望ましい結果を得るには、それらをフィルタリングする必要があります。

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();
        }
    }
}
于 2017-08-17T07:11:17.007 に答える
5

これが私が取得するために実装したコードです:ローカルホストの名前、IP、ネットマスク、MACアドレス。

   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;
于 2018-08-14T19:57:58.760 に答える
2

eth1ターゲットマシンのIPアドレスを取得したかった。上記の回答は、私が欲しいものを取得するのに役立ちました。これは、ネットワークインターフェイス名のIPアドレスを取得するための関数を作成した方法ですeth1

QNetworkInterface eth1Ip = QNetworkInterface::interfaceFromName("eth1");
QList<QNetworkAddressEntry> entries = eth1Ip.addressEntries();
if (!entries.isEmpty()) {
    QNetworkAddressEntry entry = entries.first();
    qDebug() << entry.ip();
}
于 2016-01-25T12:54:54.637 に答える