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

C# Discussion :

[C#] Comment lister les ordinateurs du Reseau ?


Sujet :

C#

  1. #1
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut [C#] Comment lister les ordinateurs du Reseau ?
    Bonjour à Tous,

    Je continu dans ma quête d'apprentissage et après avoir bien cherché sur Internet, je n'ai pas trouvé mon bonheur

    Donc je me tourne vers developpez.com.

    Je voudrai à partir de mon application arriver à lister les ordinateurs présents sur le réseau(par le nom) et ainsi en acquérir leur IP.

    Alors j'ai pensé à utiliser la commande :

    Puis récupérer les noms de ordis dans le fichier texte, puis essayer d'en découvrir leur IP... mais c'est un vrai pétrin

    N'existerai t'il pas, alors, une jolie fonction qui permette de se faciliter la vie,
    en utilisant les System.Net, System.Net.Sockets...

    Je suis preneur de toutes solutions

    Merci

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Citation Envoyé par ArHacKnIdE
    après avoir bien cherché sur Internet, je n'ai pas trouvé mon bonheur
    en cherchant bien, on trouve toujours

    Un début de réponse ici peut-etre http://nico-pyright.developpez.com/t...ms/#Lform_load

  3. #3
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Merci mais le début ne me dit rien là, pour quelles raisons ?

    - C'est du C++

    - Peu de programmation Reseau

    - Je ne sait pas comment l'exploiter

    - Je n'y vois pas ce que je cherche ? (Peut être suis-je aveugle)

    Mais Merci quand même

    Il y a bien(dans ton code) le ListBox2, mais je ne vois pas ou et comment tu lui mets du contenu

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    ok, c'est du c++ c'est sur, mais ca ressemble de loin à du c#

    tu veux récuperer la liste des ordinateurs d'un domaine ? j'ai bien compris ?

    cette partie là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    listOfComputer = gcnew System::Collections::ArrayList();
     
    System::String ^ domainName = "WORKGROUP";
    System::DirectoryServices::DirectoryEntry ^ domainEntry =  gcnew
     System::DirectoryServices::DirectoryEntry(System::String::Format
    ("WinNT://{0}", domainName));
    domainEntry->Children->SchemaFilter->Add("computer");
    entries = domainEntry->Children;
    le plus important, tu construis la liste des éléments (DirectoryEntries) à partir du nom de domaine (Workgroup dans l'exemple), tu boucles dessus avec un for each

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for each(System::DirectoryServices::DirectoryEntry ^ entry in entries)
    {
        try
        {
            System::Net::IPHostEntry ^ ip = System::Net::Dns::GetHostEntry
    (entry->Name);
            listOfComputer->Add(entry->Name);
        }
        catch (System::Exception ^ ex)
        {
        }
    }
    et là, avec GetHostEntry tu obtiens les infos que tu veux (ici je m'en servais pour vérifier que l'ordinateur était bien présent, mais ca permet de récuperer d'autres infos.

    Après, la traduction en c# c'est assez facile, meme neguib sait faire (désolé )

    remarque, tu peux plutot utiliser une liste générique List<String ^> plutot qu'un Arraylist non typé.

  5. #5
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Grand Merci pour ta réponse

    Mais je suis deja pas un as en C# alors si il me faut convertir du C++

    neguib est plus fort que moi.

    Pour rester dans mon idée de départ, j'ai ça(certe plus simple ) :

    using System.Net;
    using System;
    using System.Net.Sockets;



    class Connection : object
    {

    public static void Main()
    {
    string Adresse;
    long i;

    Console.WriteLine("Entrez l'adresse : ");
    Adresse = Console.In.ReadLine();

    try
    {
    TcpClient MonClient = new TcpClient();
    IPAddress adressIp = Dns.Resolve(Adresse).AddressList[0];
    Console.WriteLine("Son Ip est : {0}", adressIp);
    }
    catch (SocketException)
    {
    Console.WriteLine("Non valide !");

    }
    Console.In.ReadLine();

    }
    }
    Mais me faudrait lire ces fameux noms de PC à partir de ma requete :

    net view > liste.txt
    Et c'est encore une autre histoire

    Encore Merci

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    et ca te tente pas d'essayer comme je te propose ? juste pour voir ?

    après, si tu préferes executer une commande dos, c'est assez simple de lire le fichier texte en sortie

  7. #7
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Citation Envoyé par nico-pyright(c)
    et ca te tente pas d'essayer comme je te propose ? juste pour voir ?

    après, si tu préferes executer une commande dos, c'est assez simple de lire le fichier texte en sortie

    Bien je n'ose même pas tenter, je te remercie de ton aide, mais j'ai pas la capacité de faire cette conversion


    Pour lire le fichier texte, je n'ai jamais travaillé les fichiers et en fait il me faudrait :

    - lire à partir d'une certaine ligne
    - assigner une ligne à une variable pour les noms de PC

    Et arreter l'assignement quand une ligne vide arrive

    Voilà, Merci

    Mais je pense que je peux trouver plus de documentations sur les fichiers que sur le reseau

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    tiens, comme je suis d'humeur sympa aujourd'hui, je t'ai fait la traduction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            struct Ordi
            {
                public string name;
                public IPAddress ip;
            }
    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
     
                List<Ordi> listOfComputer = new List<Ordi>();
                String domainName = "WORKGROUP";
                DirectoryEntry domainEntry = new DirectoryEntry(String.Format
    ("WinNT://{0}", domainName));
                domainEntry.Children.SchemaFilter.Add("computer");
                DirectoryEntries entries = domainEntry.Children;
                foreach (DirectoryEntry entry in entries)
                {
                    try
                    {
                        IPHostEntry ip = Dns.GetHostEntry(entry.Name);
                        IPAddress[] ipAddr = Dns.GetHostAddresses(entry.Name);
                        Ordi currOrdi;
                        currOrdi.name = entry.Name;
                        currOrdi.ip = ipAddr[0];
                        listOfComputer.Add(currOrdi);
                    }
                    catch (Exception ex)
                    {
                    }
                }
    à changer "workgroup" par ton domaine bien sur

  9. #9
    Membre extrêmement actif
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Points : 1 921
    Points
    1 921
    Par défaut
    Mille Mercis je vais regarder ça

    J'ai juste un petit problème avec le Directory Entry, j'ai le message d'erreur suivant :

    Error 3 The type or namespace name 'DirectoryEntry' could not be found (are you missing a using directive or an assembly reference?)
    Alors j'ai essayé de mettre using System.DirectoryEntry mais ça n'a pas l'air de marcher

    En fait j'ai l'impression que j'ai pas la class DirectoryServices, c'est bête ça, je suis sous la version Express

    Merci

    EDIT : J'ai bien la dll System.DirectoryServices dans le FrameWork mais quand je l'execute en mode console il ne l'a reconnait pas

    (Re) EDIT : En Fait fallait faire un rajout d'une reference

    Ca a l'air de marcher

    Par contre je ne sais pas comment les ressortirs maintenant, les affichers en fait

    Merci

    PS : C'est bon J'ai trouvé, ENCORE MERCI

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

Discussions similaires

  1. [C#] Lister les ordinateurs du reseau
    Par alex57 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/11/2008, 12h46
  2. [VB.NET] Comment lister les ordinateurs d'un réseau
    Par Jan-t dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/03/2005, 09h44
  3. [VB6] [Réseau] Lister les ordinateurs du réseau
    Par CYFL dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/12/2002, 10h25

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