2009-10-21 10 views
1

Je veux obtenir l'adresse IP actuelle de l'ordinateur qui a dit 3 machines (VM Ware) virtuels installés. Je veux obtenir l'adresse LAN de cet ordinateur.Get IP de ma machine C# avec machine virtuelle installée

code actuel que j'ai me renvoie un tableau, mais la façon d'identifier l'adresse lan informatique actuelle?

public static string getThisCompIPAddress() 
    { 
     IPAddress[] addresslist = Dns.GetHostAddresses(Dns.GetHostName()); 
     return (addresslist[0].ToString()); 


    } 

addresslist retourne un tableau de 3 adresses IP

+0

les 3 adresses Que faites la liste? Vous pouvez exclure 127.0.0.1 par exemple ... –

+0

Ils sont également du même réseau. VM 192.168.3.44 Ethernet 192.168.3.111 –

Répondre

0
public static ArrayList getThisCompIPAddress() 
    { 
     ArrayList strArrIpAdrs = new ArrayList(); 
     ArrayList srtIPAdrsToReturn = new ArrayList(); 
     addresslist = Dns.GetHostAddresses(Dns.GetHostName()); 
     for (int i = 0; i < addresslist.Length; i++) 
     { 
      try 
      { 
       long ip = addresslist[i].Address; 
       strArrIpAdrs.Add(addresslist[i]); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 

     } 

     foreach (IPAddress ipad in strArrIpAdrs) 
     { 

      lastIndexOfDot = ipad.ToString().LastIndexOf('.'); 
      substring = ipad.ToString().Substring(0, ++lastIndexOfDot); 
      if (!(srtIPAdrsToReturn.Contains(substring)) && !(substring.Equals(""))) 
      { 
       srtIPAdrsToReturn.Add(substring); 
      } 
     } 

     return srtIPAdrsToReturn; 
    } 

cela est 100% de travail, le vrai problème est qu'il vomissait erreur lors du calcul adresse qui retourne longtemps. Le code d'erreur est 10045

+0

Ici, nous obtenons seulement des adresses IP valides, mais le problème est toujours là comment obtenir l'adresse IP active ??? Certains VM IPV6 renvoie une erreur lorsque nous appelons la fonction .Address qui renvoie long. –

+0

Comment différencier entre VM IP et cet IP de l'ordinateur? –

+0

Q: Pourquoi faire des sous-vêtements? Si l'adresse IP est 192.168.1.1, je veux juste "192.168.1." et je vais ajouter manuellement plage pour scanner dire entre 1 et 254 –

3

Vous pouvez essayer la classe NetworkInterface, et essayer de faire correspondre le nom ou l'adresse physique de la connexion au réseau local pour savoir le vrai. Peut-être chercher dans cette classe et ses membres, vous pouvez trouver quelque chose qui convient à vos besoins.

Voici une méthode simple pour fournir des informations d'utilisation:

using System.Net.NetworkInformation; 

... 

static void ViewNetworkInfo() 
{ 
    NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces(); 
    foreach (NetworkInterface nw in networks) 
    { 
     Console.WriteLine(nw.Name); 
     Console.WriteLine(nw.GetPhysicalAddress().ToString()); 

     IPInterfaceProperties ipProps = nw.GetIPProperties(); 
     foreach (UnicastIPAddressInformation ucip in ipProps.UnicastAddresses) 
     { 
      Console.WriteLine(ucip.Address.ToString()); 
     } 

     Console.WriteLine(); 
    } 
    Console.ReadKey(); 
} 
+0

Get Emplacement de carte réseau (par exemple: emplacement PCI 10 (bus PCI 3, dispositif 0, fonction 0)) si elle renvoie la valeur null cela signifie qu'il est une carte réseau virtuel et vous pouvez le jeter. –

1

J'ai essayé toutes les solutions ci-dessus mais je n'ai pas pu obtenir l'IP de ma "vraie" machine et non de la machine virtuelle. J'ai réussi à l'utiliser pour obtenir l'adresse IP de ma machine virtuelle:

IPAddress[] addresslist = Dns.GetHostAddresses(Environment.ExpandEnvironmentVariables("%CLIENTNAME%")); 

La raison pour laquelle je l'ai utilisé de cette façon est que la fonction Dns.GetHostAddresses renvoient les adresses de l'hôte donné, donc si vous utilisez la Dns.GetHostName() fonction, il retourne le nom de machine virtuelle et non la machine locale, mais en utilisant le nom de la machine où vous pouvez trouver en utilisant les: Environment.ExpandEnvironmentVariables (« % CLIENTNAME% ») vous pouvez obtenir le client nom et pas le nom de la machine virtuelle, de cette façon vous pouvez obtenir l'adresse IP réelle de votre machine locale.

J'espère que cela aide.

Questions connexes