2

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

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

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


    }

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

4

3 回答 3

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();
}
于 2009-10-22T19:49:16.647 回答
1

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

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

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

我希望这有帮助。

于 2017-10-24T15:36:39.273 回答
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

于 2009-10-23T12:29:57.947 回答