IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Fonction pour savoir si un ordi est connecté au reseau


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 23
    Points
    23
    Par défaut Fonction pour savoir si un ordi est connecté au reseau
    salut ,

    et bien tout est dans le titre. Existe t'il une fonction ( c ou c++ ou sdk peut importe ) pour savoir si un ordinateur est connecté au reseau (pas l'ordi sur lequel le prog se trouve)??
    merci d'avance.
    que la force soit avec toi

  2. #2
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    gethostbyname fera peut-être ton affaire

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Points : 83
    Points
    83
    Par défaut
    quel OS ?,

    solution bete, pinger l'ordinateur

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    tout d'abord merci de vos réponses .
    pour les os, il faudrai que cela fonctionne sur win9x, 2000, xp.

    le gethostbyname parai pas mal mais le problème et que si on interroge le serveur une fois et que l'ordi est conecté OK. on etain l'ordi, on redemande les infos et la vu qu'elles sont tjs en mémoires, il dis que l'ordi est tjs connecté.
    que la force soit avec toi

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Points : 83
    Points
    83
    Par défaut
    Et si on essaye d'ouvrir une connection IP avec une socket ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 63
    Points : 60
    Points
    60
    Par défaut
    Tu peux aussi ping"er" la machine que tu cherches.
    Voici un lien avec le code source :
    http://tangentsoft.net/wskfaq/examples/dllping.html
    Birds of a feather flock together

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    pour le socket le problème c'est qu'il "mouline" si le poste n'est pas connecté. c n'est pas un beau plantage d'ou on pourrai récupérer l'erreur donc derrière l'interpréter.

    pour ton lien freedy, cela covient mais que pour 2000 et XP car il utilise la fonction IcmpSendEcho qui n'est que compatible avec ces 2 OS et moi il faudrai que cela fontionne aussi pour win9x
    que la force soit avec toi

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Personnelement, je n'ai pas d'idée précise, et en portable, ça me parraît dur, surtout pour Win95. Je pense que c'est faisable avec WMI (je sais qu'on peut être averti lorsque le cable est débraché). Sinon peut être indirectement avec les fonctions d'exploration du réseau (WNetOpenEnum...), ou en jouant avec des trucs un peu plus système genre la table ARP...

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Tu peux tenter d'utiliser WMI avec Win32_NetworkAdapter.NetConnectionStatus.
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_networkadapter.asp

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Sinon en Win32, mais sous NT seulement, tu peux adapter cet exemple :
    http://www.pcausa.com/Utilities/macaddr2.htm

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    re,

    j'ai pas encore réussi a adapter un truc qui soit multi-os car c surtout sur les win9x que c'est la galère.mais en tout cas merci de votre aide
    que la force soit avec toi

  12. #12
    Membre à l'essai
    Inscrit en
    Septembre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    salut...

    on peut pas exploiter les vieux commandes DOS pour windows? (net)
    Vive Delphi !!

  13. #13
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par LitteulKevin
    re,

    j'ai pas encore réussi a adapter un truc qui soit multi-os car c surtout sur les win9x que c'est la galère.mais en tout cas merci de votre aide
    T'as fait comment pour Win2k/XP ?

  14. #14
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Personellement, j'utilise beaucoup les APIs internet (Wininet) plutôt que directement utiliser les sockets (en fait il semble que wininetsoit une couche supérieure aux sockets).

    Peut être que 'InternetCheckConnection' est une solution envisageable. Return True si l'ordinateur distant est connecté, FALSE le cas contraire.

    Fonctionne de win95 à Server 2003...

    Lien MSDN Fonction InternetCheckConnection

    Lien MSDN fonction Wininet

    En espérant que ca puisse aider.

    Neitsa.

  15. #15
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Il s'agit ici d'un réseau local, pas d'une connexion internet.
    Mais en relisant la question je vois que je me suis trompé :
    savoir si un ordinateur est connecté au reseau (pas l'ordi sur lequel le prog se trouve)??
    La solution est très simple, freddy766 avait vu juste, il suffit de le pinger.
    Je pensais que tu voulais savoir si le cable réseau était branché...

  16. #16
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    Effectivement HW, la solution de freedy766 semble la meilleur mais en fait il y a un truc bizarre :
    selon l'msdn, une des fonction utilisé pour faire le ping (IcmpSendEcho) n'est compatible que win 2000 et xp
    http://msdn.microsoft.com/library/de...mpsendecho.asp
    mais selon d'autre source que j'ai trouvé sur le net, elle est compatible avec au moins win9x et 2000:
    http://centrewd.free.fr/?page=fichea...n=IcmpSendEcho
    a tester quoi.....
    que la force soit avec toi

  17. #17
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    C'est lié à la dll. Ca a été documenté à partir de Win2K il me semble, en tous cas y'a les sources dans le SDK pour utiliser la dll depuis ce temps là seulement. Avant on chargeais à la main la dll...
    Le mieux est de faire ton programme, et de tester...

  18. #18
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    re,

    voici une fonction permettant de savoir si un pc distant est allumé ou connecté au réseau avec pour paramètre passé à celle-ci :
    • - char *szAddr qui spécifie l'adresse de l'ordinateur distant

    • - int nTimeOut qui lui spécifie le TimeOut en millisecondes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    bool IsConnected( const char *szAddr, const int nTimeOut)
    {
        bool bRetour = false;
    
        PIP_ECHO_REPLY pIpe = NULL;
        HINSTANCE hIcmp     = NULL;
        HANDLE hIP          = NULL;
    
        WSAData wsaData;
        if ( WSAStartup( MAKEWORD( 2, 0), &wsaData) == 0) {
            hIcmp = LoadLibrary( "ICMP.DLL");
            if( hIcmp) {
                struct hostent* phe = gethostbyname( szAddr);
                if( phe) {
                    typedef HANDLE (WINAPI* pfnHV)(void);
                    typedef BOOL (WINAPI* pfnBH)(HANDLE);
                    typedef DWORD (WINAPI* pfnDHDPWPipPDD)(HANDLE, DWORD, LPVOID, WORD,
                            PIP_OPTION_INFORMATION, LPVOID, DWORD, DWORD);
                    pfnHV pIcmpCreateFile = (pfnHV)GetProcAddress(hIcmp, "IcmpCreateFile");
                    pfnBH pIcmpCloseHandle = (pfnBH)GetProcAddress(hIcmp, "IcmpCloseHandle");
                    pfnDHDPWPipPDD pIcmpSendEcho = (pfnDHDPWPipPDD)GetProcAddress( hIcmp, "IcmpSendEcho");
                    if(  ( pIcmpCreateFile)
                      && ( pIcmpCloseHandle)
                      && ( pIcmpSendEcho)) {
                        hIP = pIcmpCreateFile( );
                        if( hIP != INVALID_HANDLE_VALUE) {
                            char acPingBuffer[64];
                            memset(acPingBuffer, '\xAA', sizeof(acPingBuffer));
                            pIpe = ( PIP_ECHO_REPLY)GlobalAlloc( GMEM_FIXED | GMEM_ZEROINIT,
                                                                 sizeof( IP_ECHO_REPLY) + sizeof( acPingBuffer));
                            if( pIpe) {
                                pIpe->Data = acPingBuffer;
                                pIpe->DataSize = sizeof( acPingBuffer);
    
                                DWORD dwStatus = pIcmpSendEcho( hIP,
                                                                *((DWORD*)phe->h_addr_list[0]),
                                                                acPingBuffer,
                                                                sizeof( acPingBuffer),
                                                                NULL,
                                                                pIpe,
                                                                sizeof( IP_ECHO_REPLY) + sizeof( acPingBuffer),
                                                                nTimeOut);
                                if( dwStatus) {
                                    bRetour = true;
                                }
                            }
                            pIcmpCloseHandle( hIP);
                        }
                    }
                }
            }
        }
    
        if( pIpe) GlobalFree( pIpe);
        if( hIcmp) FreeLibrary( hIcmp);
        WSACleanup( );
    
        return( bRetour);
    }
    que la force soit avec toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/03/2014, 13h37
  2. [Active Directory] Savoir si un utilisateur est connecté
    Par bl4ckwolf dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 15/08/2006, 16h14
  3. Savoir si l'utilisateur est connecté au Web
    Par Spartan03 dans le forum C++
    Réponses: 14
    Dernier message: 27/07/2006, 21h17
  4. Réponses: 17
    Dernier message: 14/02/2006, 00h21
  5. voir si un ordi est connecté au réseau ?
    Par devmat dans le forum C++
    Réponses: 7
    Dernier message: 13/09/2005, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo