2009-10-21 142 views
1

我想获得安装了3个虚拟机(VM Ware)的计算机的当前IP地址。我想获得那台计算机的LAN地址。获取我的机器C#的虚拟机安装IP地址

当前代码,我已经返回给我一个数组,但如何识别当前的计算机局域网地址?

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


    } 

AddressList中返回的3个IP地址

+0

列出的3个地址是什么?你可以排除127.0.0.1例如... – 2009-10-21 06:23:09

+0

他们也是相同的网络。 虚拟机192.168.3.44 以太网192.168.3.111 – 2009-10-21 06:26:27

回答

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; 
    } 

这是100%的工作,真正的问题是,这是在计算返回长地址抛出错误。错误代码是10045

+0

在这里,我们只获取有效的IP地址,但问题仍然存在如何获得活动IP地址?当我们调用返回long的.Address函数时,某些VM IPV6会引发错误。 – 2009-10-23 12:32:15

+0

如何区分虚拟机IP和这台电脑的IP? – 2009-10-23 12:36:39

+0

问:为什么要进行subsring? 如果IP地址是192.168.1.1,我只想要“192.168.1”。我将手动添加范围扫描说1至254 – 2009-10-23 12:38:32

3

数组你可以尝试NetworkInterface类,并尝试匹配的名称或LAN连接的物理地址,以找出真正的一个。也许在这个班级内搜索,它的成员,你可以找到适合你的需求的东西。

这里有一个简单的方法来提供一些使用信息:

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

获取网卡的位置(例如:PCI插槽10(PCI总线3,设备0,功能0))如果它返回空,这意味着它是一个虚拟NIC,您可以放弃它。 – 2009-10-26 09:39:28

1

我已经尝试了上述所有解决方案,但无法从我的“真实”机器获得IP而不是虚拟机。我已经成功地使用这个从我的虚拟机获取IP:

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

为什么我用这种方式是,该函数返回Dns.GetHostAddresses给定主机的不会忽略,所以如果你使用的原因Dns.GetHostName()函数会返回虚拟机名称而不是本地计算机,但使用可以使用以下环境找到的计算机名称:Environment.ExpandEnvironmentVariables(“%CLIENTNAME%”),您可以获得客户端名称而不是虚拟机名称,这样您就可以获得本地计算机的真实IP。

我希望这会有所帮助。

相关问题