在安装了虚拟机的情况下获取我的计算机C#的IP

时间:2009-10-21 06:21:21

标签: c# ip virtual-machine lan

我想获得安装了3台虚拟机(VM Ware)的计算机的当前IP地址。我想得到那台电脑的局域网地址。

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

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


    }

addresslist返回一个包含3个IP地址的数组

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:1)

我已经尝试了上面的所有解决方案,但无法从我的“真实”机器获取IP而不是虚拟机器。我已经设法使用它从我的虚拟机中获取IP:

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

我之所以这样使用它是因为函数Dns.GetHostAddresses返回给定主机的地址,所以如果使用Dns.GetHostName()函数,它将返回虚拟机名称而不是本地机器,但使用您可以找到的机器名称:Environment.ExpandEnvironmentVariables(“%CLIENTNAME%”)您可以获取客户端名称而不是虚拟机名称,这样您就可以获得本地的真实IP机。

我希望这会有所帮助。

答案 2 :(得分: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%工作,真正的问题是它在计算返回long的地址时抛出错误。错误代码为10045