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

MFC Discussion :

Scanner réseau local avec MFC + sockets


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 87
    Par défaut Scanner réseau local avec MFC + sockets
    Bonjour,

    J'ai fais une application MFC client/serveur avec les sockets, et je voudrais savoir quel code utilisé pour scanner un réseau local, c'est-à-dire :

    - Scanner les 255 adresses d'un réseau local en 192.168.0.0,
    - Repérer les adresses utilisé.

    Voilà

    Je vous remercie

  2. #2
    Membre chevronné Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Par défaut
    Il y a plusieurs techniques de scan, il faudra que tu choisisses la ou les méthodes que tu veux employer.
    • Scan ARP. Cela ne fonctionne que pour le réseau local. L'avantage c'est qu'en général, il n'y a pas de filtrage et donc tu auras une vision complète. L'autre avantage, c'est que c'est rapide. L'inconvénient, c'est qu'il faut que tu génères les trames à la main et que tu les décodes à la main aussi. la lib winpcap est un bon point d'entrée dans ce cas pour envoyer et recevoir des trames. Il y a aussi la fonction Windows SendARP() qui peux t'aider si tu ne veux pas trop mettre les mains dans le cambouï.
    • Scan ICMP. C'est plus classique. Tu peux aussi construire des trames à la main et décoder à la main les réponses. L'usage de Winpcap est conseillé. Tu peux aussi utiliser la fonction WIN32 IcmpSendEcho(). Tu peux être tributaire d'un éventuel filtrage par la machine destination ou bien par un routeur/firewall sur la route. Par contre, tu n'es plus limité au réseau local.
    • Scan par connexion respectuese TCP. Tu ouvres (ou tentes d'ouvrir) une connexion TCP avec un socket. Si la réponse est positive, tu le sais immédiatement. Par contre, l'abscence de réponse ne signifie pas qu'il n'y a pas de machine. Tu es encore tributaire d'un éventuel filtrage sur la route et le numéro de port à tester va aussi être fonctioin de la machine cible. Sur une machine Unix, on va plutôt tester les ports 23 ou 23, sur une machine Windows, ce sera les ports 445.
    • Scan plus agressif. Je te laisse regarder du côté de nmap pour les différentes techniques possibles. Dans ce cas, il faudra mettre les mains dans le cambouï, générer tes trames à la main, décoder les réponses et utiliser la librairie WinPcap.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 87
    Par défaut
    Bonjour,

    Merci pour la réponse, je cherche une technique de scan ou je n'aurai pas trop à mettre les mains dans le cambouï. J'ai regardé la méthode sendARP, est-elle facile de l'utilisation dans une MFC ? Je ne connais pas du tout.

    En résumé dans mon MFC je voudrais que ça ce passe comme ça :

    Par exemple :

    - 1 Button pour lancer le scan du réseau local,
    - 1 Split Button Control pour sélectionner le réseau choisi.

    Le fonctionnement :

    Scanner les 255 adresses du réseau local,
    Sélectionner les adresses ip utilisés,
    Inclure les noms des pc utilisés dans le Split Button Control (Si c'est possible, ou sinon voir une autre solution) afin d'utiliser cette adresse IP pour se connecter à un serveur par sockets.

    La connexion client/serveur par sockets fonctionne de mon coté, je veux juste pouvoir scanner le réseau et sélectionner le pc choisit, au lieu d'entrer manuellement l'adresse IP.

    Je vous remercie

  4. #4
    Membre chevronné Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Par défaut
    Citation Envoyé par LuffyyffuL Voir le message
    J'ai regardé la méthode sendARP, est-elle facile de l'utilisation dans une MFC ? Je ne connais pas du tout.
    Je ne voie pas de difficulté particulière mis à part qu'il te faudra un working thread pour le scan dans ton application MFC. Si tu ne fait pas cela, tu vas figer ton affichage et cela ne sera pas très beau (de toute façon, quelque soit la méthode de scan, il te faudra un working thread auxiliaire pour faire le scan).

    Citation Envoyé par LuffyyffuL Voir le message
    JEn résumé dans mon MFC je voudrais que ça ce passe comme ça :

    Par exemple :

    - 1 Button pour lancer le scan du réseau local,
    - 1 Split Button Control pour sélectionner le réseau choisi.
    Attention, si tu choisis la méthode de scan par SendArp(), cela ne pourra être que le réseau local. Le scan ARP est limité au réseau local, c'est un scan de niveau 2 dans la couche ISO donc il ne passe pas les routeurs.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 87
    Par défaut
    Ok merci,

    C'est quoi un working thread, c'est comme une barre de progression ?

    Je veux scanner que le réseau local donc ça devrai être bon.
    Si vous avez des tutos ou exemple d'utilisation de SendArp(), je prend avec plaisir

    Merci

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 87
    Par défaut Re
    Bonjour,

    J'ai réussi à scanner le réseau avec SendARP donc je scan bien les 255 adresses du réseau local, pour chaque adresse ok, on me renvoie bien les adresses MAC, par contre le scan est très lent. Il y a t'il un moyen de faire en sorte que le scan soit plus rapide, c'est bloquant ?

    Merci

    Le code

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    #include <winsock2.h>
    #include <iphlpapi.h>
    #include <stdio.h>
    #include <windows.h>
     
    #pragma comment(lib, "iphlpapi.lib")
    #pragma comment(lib, "ws2_32.lib")
     
    int __cdecl main(int argc, char **argv)
    {
        DWORD dwRetVal;
        IPAddr DestIp = 0;
        IPAddr SrcIp = 0;       /* default for src ip */
        ULONG MacAddr[2];       /* for 6-byte hardware addresses */
        ULONG PhysAddrLen = 6;  /* default to length of six bytes */
     
        char DestIpString[100];
    	int mac;
    	char *SrcIpString = 0;
     
        BYTE *bPhysAddr;
        int i;
     
    	/////
     
    	for (char nombre=1 ; nombre<255 ; nombre++)
    	{
     
    	sprintf (DestIpString,"172.22.1.%d",nombre);
     
    	/////
     
    	 DestIp = inet_addr(DestIpString);
     
    	 memset(&MacAddr, 0xff, sizeof (MacAddr));
     
    	  printf("Sending ARP request for IP address: %s\n", DestIpString);
     
    	  dwRetVal = SendARP(DestIp, SrcIp, &MacAddr, &PhysAddrLen);
     
    	  if (dwRetVal == NO_ERROR) {
    		   bPhysAddr = (BYTE *) & MacAddr;
    			if (PhysAddrLen) {
    			  for (i = 0; i < (int) PhysAddrLen; i++) {
    				   if (i == (PhysAddrLen - 1))
    				     printf("%.2X\n", (int) bPhysAddr[i]);
    				 else
    					   printf("%.2X-", (int) bPhysAddr[i]);
    			 }
    		 } else
    			  printf
    				 ("Warning: SendArp completed successfully, but returned length=0\n");
     
    	 } else {
            printf("Error: SendArp failed with error: %d", dwRetVal);
            switch (dwRetVal) {
            case ERROR_GEN_FAILURE:
                printf(" (ERROR_GEN_FAILURE)\n");
                break;
            case ERROR_INVALID_PARAMETER:
                printf(" (ERROR_INVALID_PARAMETER)\n");
                break;
            case ERROR_INVALID_USER_BUFFER:
                printf(" (ERROR_INVALID_USER_BUFFER)\n");
                break;
            case ERROR_BAD_NET_NAME:
                printf(" (ERROR_GEN_FAILURE)\n");
                break;
            case ERROR_BUFFER_OVERFLOW:
                printf(" (ERROR_BUFFER_OVERFLOW)\n");
                break;
            case ERROR_NOT_FOUND:
                printf(" (ERROR_NOT_FOUND)\n");
                break;
            default:
                printf("\n");
                break;
            }
        }
     
    }
        return 0;
    }

Discussions similaires

  1. Scanner un PC sur le réseau local avec AntiVirus?
    Par sohaieb dans le forum Sécurité
    Réponses: 1
    Dernier message: 05/05/2011, 19h38
  2. Réseau local avec deux abonnements ADSL
    Par gibet_b dans le forum Hardware
    Réponses: 2
    Dernier message: 03/11/2008, 15h36
  3. Partage réseau local avec wifi + ping réseau local impossible
    Par pirouette_07 dans le forum Hardware
    Réponses: 1
    Dernier message: 16/01/2007, 13h42
  4. Tester la connexion d'un pc réseau local avec un ping
    Par Revan777 dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/10/2006, 11h40
  5. Configurer un réseau local avec 3 pc Win xp
    Par stkam dans le forum Développement
    Réponses: 3
    Dernier message: 26/02/2004, 19h13

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