获取我的机器C#的虚拟机安装IP地址
我想获得安装了3个虚拟机(VM Ware)的计算机的当前IP地址。我想获得那台计算机的LAN地址。获取我的机器C#的虚拟机安装IP地址
当前代码,我已经返回给我一个数组,但如何识别当前的计算机局域网地址?
public static string getThisCompIPAddress()
{
IPAddress[] addresslist = Dns.GetHostAddresses(Dns.GetHostName());
return (addresslist[0].ToString());
}
AddressList中返回的3个IP地址
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
在这里,我们只获取有效的IP地址,但问题仍然存在如何获得活动IP地址?当我们调用返回long的.Address函数时,某些VM IPV6会引发错误。 – 2009-10-23 12:32:15
如何区分虚拟机IP和这台电脑的IP? – 2009-10-23 12:36:39
问:为什么要进行subsring? 如果IP地址是192.168.1.1,我只想要“192.168.1”。我将手动添加范围扫描说1至254 – 2009-10-23 12:38:32
数组你可以尝试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();
}
获取网卡的位置(例如:PCI插槽10(PCI总线3,设备0,功能0))如果它返回空,这意味着它是一个虚拟NIC,您可以放弃它。 – 2009-10-26 09:39:28
我已经尝试了上述所有解决方案,但无法从我的“真实”机器获得IP而不是虚拟机。我已经成功地使用这个从我的虚拟机获取IP:
IPAddress[] addresslist = Dns.GetHostAddresses(Environment.ExpandEnvironmentVariables("%CLIENTNAME%"));
为什么我用这种方式是,该函数返回Dns.GetHostAddresses给定主机的不会忽略,所以如果你使用的原因Dns.GetHostName()函数会返回虚拟机名称而不是本地计算机,但使用可以使用以下环境找到的计算机名称:Environment.ExpandEnvironmentVariables(“%CLIENTNAME%”),您可以获得客户端名称而不是虚拟机名称,这样您就可以获得本地计算机的真实IP。
我希望这会有所帮助。
列出的3个地址是什么?你可以排除127.0.0.1例如... – 2009-10-21 06:23:09
他们也是相同的网络。 虚拟机192.168.3.44 以太网192.168.3.111 – 2009-10-21 06:26:27