Partage
  • Partager sur Facebook
  • Partager sur Twitter

Trouver IP d'une machine en LAN => C#

    8 janvier 2020 à 13:51:52

    Bonjour,

    J'ai une machine connecté via un câble Ethernet à mon ordinateur et j'aimerais bien trouvé son IP grâce à un programme en C#.

    J'arrive à Ping ma carte Ethernet mais pas la machine (je connais l'IP de la machine avec un autre logiciel, mais je souhaite l'a trouvé seulement en C# pour automatiser un peu).

    De ce que j'ai compris, la carte Ethernet serait la passerelle entre mon ordinateur et la machine mais comment faire pour les faire communiquer ?

    Merci de votre aide ;-)

    -
    Edité par Guiguix77 8 janvier 2020 à 13:58:43

    • Partager sur Facebook
    • Partager sur Twitter
      8 janvier 2020 à 14:26:35

      Il y a beaucoup d'erreur de vocabulaire, vous ne maitrisez pas assez le sujet et cela rend votre demande assez confuse.

      >J'ai une machine connecté via un câble Ethernet à mon ordinateur

      C'est quoi votre "machine" si ce n'est pas aussi un ordinateur ?

      >j'aimerais bien trouvé son IP grâce à un programme en C#.

      C# est un langage de haut niveau, utilisant des API de haut niveau, comme les sockets.

      Les bidouilles sur le routage des packets IP, c'est de la responsabilité du l'OS normalement, qui s'en charge généralement très bien, sans que vous alliez y mettre votre grain de sel dans ces tables de routage.

      Les bidouilles sont possibles en C# mais cela sera largement moins confortable que les API de haut niveau.

      Êtes-vous vraiment sûr d'avoir besoin de ce niveau de contrôle ???

      >J'arrive à Ping ma carte Ethernet

      On ne peut pas "pinger" une carte Ethernet, ping est un utilitaire utilisant le protocole ICMP de niveau 4 de l'ISO qui fonctionne au-dessus de IP, donc déjà avec une adresse IP.

      Une carte Ethernet n'a pas d'adresse IP, elle a, au mieux, une adresse MAC. L'association adresse IP adresse MAC est logicielle et faites par chaque machine du réseau.

      Bon, vous cherchez des explications sur une solution mais vous ne nous indiquez pas le vrai problème initial ?

      C'est quoi, découvrir les IP des machine sur le LAN ?

      Si c'est le cas, regardez du côté du protocole ARP:

      https://stackoverflow.com/questions/1148778/how-do-i-access-arp-protocol-information-through-net

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        8 janvier 2020 à 14:46:13

        Oui, il est vrai que je ne m'y connais pas beaucoup... voir quasiment pas.

        Je vais donc essayer d'être le plus précis possible.

        En faite j'ai une machine/un système d'acquisition branché avec un câble Ethernet à mon ordinateur.

        Je cherche "juste" à récupérer son adresse IP dans un programme en C#.

        En faite lorsque j'aurais récupéré cette IP, je lui demanderais de changer cette IP en une IP personnalisé par un utilisateur accompagné d'une demande de reboot.

        Je voudrais juste savoir dans un premier temps si je peux justement accéder à cette IP et si oui comment.

        Merci encore pour votre aide ! :)

        • Partager sur Facebook
        • Partager sur Twitter
          8 janvier 2020 à 15:15:57

          >un système d'acquisition branché avec un câble Ethernet à mon ordinateur.

          C'est un câble Ethernet ou un câble croisé utilisant des prises RJ45 ???

          Ethernet n'accepte pas de connexion physique en point à point.

          Vous ne passez pas par un appareil comme un switch ou un hub ?

          Si c'est vraiment de l'Ethernet, votre "système d'acquisition" doit avoir une adresse MAC qui est fixe.

          Utilisez ARP (cf. mon précédent mail) pour connaitre l'adresse IP correspondant à l'adresse MAC.

          Si la table ARP ne se rempli pas automatiquement, il faudra peut-être recourir à RARP

          https://stackoverflow.com/questions/2204318/mac-address-to-ip-address-on-same-lan-in-c-sharp

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            8 janvier 2020 à 16:24:14

            Il s'agit d'un câble Ethernet, exactement le même que sur un ordinateur.

            Oui il s'agit bien d'une prise rj45 sur le système d'acquisition.

            Merci pour la doc!

            • Partager sur Facebook
            • Partager sur Twitter
              8 janvier 2020 à 16:43:10

              >Oui il s'agit bien d'une prise rj45 sur le système d'acquisition.

              Et sur votre ordinateur ???

              Si c'est une carte réseau, c'est pas très clair, vous pouvez donner les références de votre "système d'acquisition" ?

              >exactement le même que sur un ordinateur.

              La différence entre un câble croisé et un câble droit Ethernet, ça se voit pas à l’œil nu.

              Votre "système d'acquisition" est vu comment sous Windows, comme une machine ou comme un périphérique ?

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                10 janvier 2020 à 15:01:26

                Bonjour,

                J'ai cherché et fait plusieurs tests et ça marche ! :)

                Maintenant il faudrait que je réussisse à envoyer un ordre de reboot à ma machine.

                Pour ce faire j'utilise un socket et le protocole UDP.

                Voici un bout du code ;)

                Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
                            ProtocolType.Udp);
                            sock.DontFragment = true;
                            sock.EnableBroadcast = true;
                
                            IPAddress serverAddr = IPAddress.Parse("192.168.20.50");
                
                            IPEndPoint endPoint = new IPEndPoint(IPAddress.Broadcast, 1201);
                            this._nLength = 0;
                            this._aBytes = new byte[256];
                            this._aBytes[this._nLength++] = 0x23;
                            this._aBytes[this._nLength++] = 0x14;
                            this._aBytes[this._nLength++] = 0x0E;
                            
                            string sText = "imcDev__10 130866";
                            this._nLength += Encoding.Default.GetBytes(sText, 0, sText.Length, this._aBytes, this._nLength);
                            this._aBytes[this._nLength++] = 0;
                sock.SendTo(this._aBytes, 0, this._nLength, SocketFlags.None, endPoint);



                Je m'étais inspiré du code d'un de mes collègues aujourd'hui partie en retraite et je dois finir le boulot :)

                Sur l'autre logiciel on peut demander une demande de reboot (qui fonctionne), j'ai donc installé wireshark pour voir ce qu'il s'y passe et voilà le dit paquet intéressant :


                Je dois donc "imiter" ce paquet pour redémarrer ma machine.

                Pouvez m'aider à comprendre/traduire l'image wireshark ci-jointe ?

                Merci

                -
                Edité par Guiguix77 10 janvier 2020 à 15:04:49

                • Partager sur Facebook
                • Partager sur Twitter
                  10 janvier 2020 à 18:35:59

                  >Pouvez m'aider à comprendre/traduire l'image wireshark ci-jointe ?

                  Il manque pas mal d'info dans la partie supérieure que vous ne montrez pas. o_O

                  La ligne 6 du code source ne sert à rien, vous faite du Broadcast.

                  Votre code semble coller assez bien à la trace wireshark.

                  Pouvez-vous faire un delta (calcul de la différence) entre le paquet envoyé par "l'autre logiciel" et le vôtre ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                  Trouver IP d'une machine en LAN => C#

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown