Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. IP scanner

IP scanner

Scheduled Pinned Locked Moved Unsolved Italian
11 Posts 3 Posters 4.5k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • VRoninV Offline
    VRoninV Offline
    VRonin
    wrote on last edited by
    #2

    che sistema operativo usi?

    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
    ~Napoleon Bonaparte

    On a crusade to banish setIndexWidget() from the holy land of Qt

    1 Reply Last reply
    0
    • F Offline
      F Offline
      fermatqt
      wrote on last edited by
      #3

      sto facendo i test su linux.
      ma in effetti usano tutti windows, a parte le stampanti e il firewall (che usa sempre linux).
      forse potrebbe essere questo il motivo!

      1 Reply Last reply
      0
      • mrdebugM Offline
        mrdebugM Offline
        mrdebug
        wrote on last edited by
        #4

        Secondo me QHostInfo non ti ritorna i dati in tempo reale ma ciò che trova nel server dns - wins, in base alla tabella arp.

        Need programmers to hire?
        www.labcsp.com
        www.denisgottardello.it
        GMT+1
        Skype: mrdebug

        F 1 Reply Last reply
        1
        • mrdebugM mrdebug

          Secondo me QHostInfo non ti ritorna i dati in tempo reale ma ciò che trova nel server dns - wins, in base alla tabella arp.

          F Offline
          F Offline
          fermatqt
          wrote on last edited by
          #5

          @mrdebug said in IP scanner:

          Secondo me QHostInfo non ti ritorna i dati in tempo reale ma ciò che trova nel server dns - wins, in base alla tabella arp.

          si ho pensato anche io.
          però ho fatto il flush della cache, ed ottengo lo stesso risultato.

          cmq, avete idea di come poter ottenere il risultato??

          1 Reply Last reply
          0
          • F Offline
            F Offline
            fermatqt
            wrote on last edited by
            #6

            allora, ho provato con questo codice, che in sostanza invia un ping ai vari IP:

            void MainWindow::on_pushButton_clicked() {
                QString baseNetowrk = "192.168.1.";
            #if defined(WIN32)
                QString parameter = "-n 1";
            #else
                QString parameter = "-c 1";
            #endif
                for(int i = 0; i < 256; i++) {
                    QString currIp(baseNetowrk + QString::number(i));
                    int exitCode = QProcess::execute("ping", QStringList() << parameter << currIp);
                    if (exitCode == 0) {
                        qDebug() << "OK :" << baseNetowrk + i;
                    } else {
                        qDebug() << "KO";
                    }
                }
            }
            

            funzionare funziona, ma è lento una quaresima.

            1 Reply Last reply
            0
            • VRoninV Offline
              VRoninV Offline
              VRonin
              wrote on last edited by VRonin
              #7

              Purtroppo non c'e' molto da fare, e' impossibile sapere se un IP e' attivo o no senza contattarlo. Puoi usare QtConcurrent per velocizzarlo:

              QStringList possibleIPs;
              for(int i = 0; i < 256; i++)  possibleIPs.append(baseNetowrk + QString::number(i));
              const auto avaliableIPs = QtConcurrent::blockingMapped<QList<bool> >(possibleIPs,[](const QString& currIp)->bool{
              return QProcess::execute("ping", QStringList() << 
              #ifdef Q_OS_WIN
                  QStringLiteral("-n 1")
              #else
                  QStringLiteral("-c 1");
              #endif
              << currIp) ==0;
              });
              

              "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
              ~Napoleon Bonaparte

              On a crusade to banish setIndexWidget() from the holy land of Qt

              1 Reply Last reply
              0
              • F Offline
                F Offline
                fermatqt
                wrote on last edited by
                #8

                ciao!

                sto provando con il tuo esempio, ma ottengo una valanga di errori (ne posto alcuni):

                /usr/include/qt/QtCore/qvector.h:832: error: forming reference to void
                 int QVector<T>::indexOf(const T &t, int from) const
                     ^~~~~~~~~~
                
                
                /usr/include/qt/QtConcurrent/qtconcurrentmapkernel.h:124: error: no type named ‘result_type’ in ‘struct MainWindow::on_pushButton_clicked()::<lambda(const class QString&)>’
                         IntermediateResults<typename MapFunctor::result_type> results;
                                                                               ^~~~~~~
                
                
                /usr/include/qt/QtConcurrent/qtconcurrentreducekernel.h:123: error: ‘const class QVector<void>’ has no member named ‘at’; did you mean ‘data’?
                             reduce(r, result.vector.at(i));
                                       ~~~~~~~~~~~~~~^~
                                       data
                
                /usr/include/qt/QtCore/qvector.h:352: error: ‘void*’ is not a pointer-to-object type
                             from++->~T();
                             ^~~~
                

                ho modificato la funzione dell'evento da cui parte tutto:

                int MainWindow::on_pushButton_clicked() {
                    QString baseNetowrk = "192.168.1.";
                    QStringList possibleIPs;
                    for(int i = 0; i < 256; i++) possibleIPs.append(baseNetowrk + QString::number(i));
                
                    const auto avaliableIPs = QtConcurrent::blockingMapped<QList<bool>>(possibleIPs, [](const QString& currIp)->bool {
                        return QProcess::execute("ping", QStringList() <<
                                         #ifdef Q_OS_WIN
                                                 QStringLiteral("-n 1")
                                         #else
                                                 QStringLiteral("-c 1")
                                         #endif
                                                 << currIp) == 0;
                    });
                }
                

                QtConcurrent non l'ho mai usato ancora ad essere sincero, quindi non riesco a capire bene dove sia l'errore!

                VRoninV 1 Reply Last reply
                0
                • F fermatqt

                  ciao!

                  sto provando con il tuo esempio, ma ottengo una valanga di errori (ne posto alcuni):

                  /usr/include/qt/QtCore/qvector.h:832: error: forming reference to void
                   int QVector<T>::indexOf(const T &t, int from) const
                       ^~~~~~~~~~
                  
                  
                  /usr/include/qt/QtConcurrent/qtconcurrentmapkernel.h:124: error: no type named ‘result_type’ in ‘struct MainWindow::on_pushButton_clicked()::<lambda(const class QString&)>’
                           IntermediateResults<typename MapFunctor::result_type> results;
                                                                                 ^~~~~~~
                  
                  
                  /usr/include/qt/QtConcurrent/qtconcurrentreducekernel.h:123: error: ‘const class QVector<void>’ has no member named ‘at’; did you mean ‘data’?
                               reduce(r, result.vector.at(i));
                                         ~~~~~~~~~~~~~~^~
                                         data
                  
                  /usr/include/qt/QtCore/qvector.h:352: error: ‘void*’ is not a pointer-to-object type
                               from++->~T();
                               ^~~~
                  

                  ho modificato la funzione dell'evento da cui parte tutto:

                  int MainWindow::on_pushButton_clicked() {
                      QString baseNetowrk = "192.168.1.";
                      QStringList possibleIPs;
                      for(int i = 0; i < 256; i++) possibleIPs.append(baseNetowrk + QString::number(i));
                  
                      const auto avaliableIPs = QtConcurrent::blockingMapped<QList<bool>>(possibleIPs, [](const QString& currIp)->bool {
                          return QProcess::execute("ping", QStringList() <<
                                           #ifdef Q_OS_WIN
                                                   QStringLiteral("-n 1")
                                           #else
                                                   QStringLiteral("-c 1")
                                           #endif
                                                   << currIp) == 0;
                      });
                  }
                  

                  QtConcurrent non l'ho mai usato ancora ad essere sincero, quindi non riesco a capire bene dove sia l'errore!

                  VRoninV Offline
                  VRoninV Offline
                  VRonin
                  wrote on last edited by VRonin
                  #9

                  Hai aggiunto QT += concurrent al .pro file e re-runnato qmake?

                  Lo puoi fare anche con solo C++11 in realta':

                  QList<quint8> availableIPs(quint8 ip1, quint8 ip2, quint8 ip3)
                  {
                      std::array<std::future<bool>,256> ipList;
                      for (int i = 0; i < 256; i++)
                          ipList[i] = std::async(std::launch::async,
                          [](const QString& currIp)->bool {
                          return QProcess::execute("ping", QStringList() << currIp <<
                  #ifdef Q_OS_WIN
                              QStringLiteral("-n")
                  #else
                              QStringLiteral("-c")
                  #endif
                              << QStringLiteral("1")) == 0;
                      }
                      , QStringLiteral("%1.%2.%3.%4").arg(ip1).arg(ip2).arg(ip3).arg(i));
                  
                      QList<quint8> result;
                      for (int i = 0; i < ipList.size();++i){
                          if (ipList[i].get())
                              result << i;
                      }
                      return result;
                  }
                  

                  "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                  ~Napoleon Bonaparte

                  On a crusade to banish setIndexWidget() from the holy land of Qt

                  1 Reply Last reply
                  0
                  • VRoninV Offline
                    VRoninV Offline
                    VRonin
                    wrote on last edited by VRonin
                    #10

                    per la cronanca l'ho testato e, nonostante sia veloce, su windows non funziona perche' ping ritorna sempre 0. Devi metterti a leggere lo standard output e applicare un QRegularExpression per vedere quanti sono Received =

                    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                    ~Napoleon Bonaparte

                    On a crusade to banish setIndexWidget() from the holy land of Qt

                    1 Reply Last reply
                    0
                    • F Offline
                      F Offline
                      fermatqt
                      wrote on last edited by
                      #11

                      ciao!

                      questo il mio file .pro:

                      QT       += core gui network concurrent
                      

                      ho lanciato qmake più volte.
                      ma continuo ad avere quegli errori!

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved