Projet

Général

Profil

Feature - Fonctionnalité #3723

Informations minimums sur le réseau

Ajouté par Icham Sirat il y a plus de 10 ans. Mis à jour il y a plus de 10 ans.

Statut:
Fixed - Corrigé - Implémenté
Priorité:
Normale
Assigné à:
Icham Sirat
Catégorie:
AbulEduApplicationV1
Version cible:
-
Début:
11/06/2014
Echéance:
% réalisé:

100%

Temps estimé:
(Total: 0.20 h)

Description

Avoir une fonction qui calcule :
  • l'IP locale de la machine
  • le masque de sous-réseau de l'interface
  • la mac adresse de l'interface associée à l'adresse IP

Sous-tâches

Task - Tâche #3725: Test sous linuxFixed - Corrigé - ImplémentéIcham Sirat

Task - Tâche #3726: Test sur tabletteFixed - Corrigé - ImplémentéIcham Sirat

Task - Tâche #3727: Test sous windowsFixed - Corrigé - ImplémentéIcham Sirat

Historique

#1 Mis à jour par Icham Sirat il y a plus de 10 ans

  • Statut changé de New - Nouveau à Assigned - En cours
  • % réalisé changé de 0 à 60

Voici l'implémentation :

  • Une structure pour stockage :
    struct AbulEduNetworkInfo {
        QHostAddress  HostIp;       /** l'adresse IP */
        QHostAddress  Subnet;       /** le masque de ss-réseau */
        QString       MacAdress;    /** l'adresse MAC associée */
        };
    
  • Une méthode pour récupérer la structure (avec mise à jour au moment de l'appel)
    Pour pallier le problème de la première adresse MAC trouvée (si multi-config réseau), je retourne l'adresse MAC associée à l'adresse IP trouvée.
    const AbulEduApplicationV1::AbulEduNetworkInfo &AbulEduApplicationV1::abeGetNetworkInfos()
    {
        foreach(const QNetworkInterface &netInterface, QNetworkInterface::allInterfaces())
        {
            foreach (const QNetworkAddressEntry &addrEntry, netInterface.addressEntries()) {
                if(addrEntry.ip().protocol() == QAbstractSocket::IPv4Protocol && addrEntry.ip() != QHostAddress(QHostAddress::LocalHost)){
                    m_networkInfo.HostIp = addrEntry.ip();
                    m_networkInfo.Subnet = addrEntry.netmask().toString();
                    m_networkInfo.MacAdress = netInterface.hardwareAddress();
                }
            }
        }
        return m_networkInfo;
    }
    
  • Utilisation
    Depuis n'importe où
    qDebug() << abeApp->abeGetNetworkInfos().HostIp << abeApp->abeGetNetworkInfos().Subnet << abeApp->abeGetNetworkInfos().MacAdress;
    

Bon c'est pas optimal vu qu'à chaque fois que j'appelle abeApp->abeGetNetworkInfos(), je reboucle pour remplir toute la structure. mais au moins c'est tout le temps à jour.

#2 Mis à jour par Icham Sirat il y a plus de 10 ans

Ce n'est pas testé donc pas poussé.

#3 Mis à jour par Icham Sirat il y a plus de 10 ans

Les tests sont concluants.
Un peu de nettoyage, debug/log et je pousse :)

#4 Mis à jour par Icham Sirat il y a plus de 10 ans

La structure est publique. De ce fait, on peut en remplir une sans appeler la méthode 3 fois pour avoir toutes les infos.
  • Exemple en appelant trois fois la méthode :
    qDebug() << abeApp->abeGetNetworkInfos().HostIp << abeApp->abeGetNetworkInfos().Subnet << abeApp->abeGetNetworkInfos().MacAdress;
    
  • Exemple avec une structure perso (un seul appel à la méthode):
    AbulEduApplicationV1::AbulEduNetworkInfo networkInfo = abeApp->abeGetNetworkInfos();
    qDebug() << networkInfo.HostIp << networkInfo.Subnet << networkInfo.MacAdress;
    

#5 Mis à jour par Icham Sirat il y a plus de 10 ans

  • Statut changé de Assigned - En cours à Fixed - Corrigé - Implémenté
  • Implémenté dans revno 162

Formats disponibles : Atom PDF

Redmine Appliance - Powered by TurnKey Linux