[Réseaux]+[wxWidgets] bonne méthode pour scanner un port ?

bonne méthode pour scanner un port ? [Réseaux]+[wxWidgets] - Divers - Programmation

Marsh Posté le 07-04-2007 à 01:38:07    

l-o
 
Je suis en train de développer une application qui doit me permettre de me connecter aux différents serveurs vns dispos sur mon réseau. Pour cela, j'aimerais scanner mon sous-réseau pour voir quels sont les hôtes dispos.
Je ne sais pas trop quelle méthode est la plus appropriée pour ça... ayant utilisé nmap, je me souviens d'affaire de "connexion TCP initiée" (confirmé par une relecture du man). Alors je tente, mais ça marche pas à tous les coups et sans réel raison... enfin du moins, je n'arrive pas à me les expliquer.
Tout d'abord le code :

Code :
  1. wxIPV4address addrLocale;
  2. wxString reseauLocal;
  3. wxIPV4address addrDistante;
  4. wxArrayString listeServeursVNC;
  5. wxSocketClient sktcltVNC;
  6. //détection du réseau
  7.     this->lstctrlServeursVNC->Clear();
  8. addrLocale.AnyAddress();
  9. addrLocale.Hostname(addrLocale.Hostname()); // récupère l'IP du localhost
  10. reseauLocal = addrLocale.IPAddress().BeforeLast('.'); // sauvegarde l'IP du sous-réseau
  11. this->txtctrllblReseau->SetValue(reseauLocal + ".0" );
  12. //scan du sous-réseau
  13. for(int i=90 ; i<=99 ; i++) {
  14.     wxString addrTest = reseauLocal + "." + wxString::Format("%d", i); // construit l'IP à tester
  15.     addrDistante.Hostname(addrTest);
  16.     addrDistante.Service(5800);
  17.         sktcltVNC.Connect(addrDistante, false); // ouvre un socket sur l'IP distante
  18.         sktcltVNC.WaitOnConnect(0,10); // attends 10ms
  19.         if(sktcltVNC.IsConnected()) listeServeursVNC.Add(addrTest); // stocke l'IP si la connexion a eu lieue
  20.         sktcltVNC.Close();
  21. }
  22.     this->lstctrlServeursVNC->InsertItems(listeServeursVNC, 0);


Comme vous pouvez le voir, je scanne sur la plage [90;99] et ça marche, mais pas à tous les coups. Si je scanne sur une plus grande plage ([80;99]), ça ne marche jamais. J'ai aussi essayé divers temps de connexion (jusqu'à 5 secondes - dans le programme, à 10ms ça marche pas plus mal qu'à 1s)
Je ne comprends pas trop...
Où merde-je ? Ma solution est-elle inadéquate ?
 
Merci d'avance. :)


Message édité par trevor le 07-04-2007 à 01:45:20

---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
Reply

Marsh Posté le 07-04-2007 à 01:38:07   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed