2009-10-15 87 views
3

我试图找到一个系统的“主要IP地址是什么”的神奇答案。我的研究已经确定的答案,“最佳”的意思是:如何确定Windows上使用.NET的网络接口的绑定顺序?

  1. 看[system.Net.NetworkInformation.NetworkInterface] :: GetAllNetworkInterfaces()用于分配的默认网关的接口。如果你只找到一个,那么你就完成了。
  2. 如果存在多个路由表,则必须查看路由表中最低指标的路由表(查看0.0.0.0网络条目)。
  3. 如果公制中的绑定匹配,则绑定顺序最低的适配器将获胜。

我的问题是:你如何确定使用.NET的绑定顺序?我见过solution看着注册表,这没什么,但我希望有一个更漂亮的界面。

PowerShell示例的加分,因为这是我选择的语言。 :)

+0

有这样另一个线程已经http://stackoverflow.com/questions/567905/how-do-you-get-the-host-machines-primary-ip-address – Jaykul 2009-10-15 16:23:36

+0

我开始喜欢越来越多的注册表方法... – halr9000 2009-10-15 18:07:16

+0

您的解决方案链接已死亡。 – ZeroBugBounce 2012-06-14 17:05:49

回答

2

就我个人而言,我看到注册表解决方案更优雅,更可靠。该link you posted已经使用PowerShell的,所以它看起来像你一个完美的解决方案......


的替代,基于注册表的解决方案exists here

+0

这个链接现在已经死了,顺便说一句。 – ZeroBugBounce 2012-06-14 17:05:36

+0

@ZeroBugBounce刚刚添加了替代版本 – 2012-06-14 17:11:12

+0

更新的原始链接 – halr9000 2012-06-19 18:42:43

1

一个好的起点似乎是这个API方法:EnumBindingPaths,但它需要C++或C#/ VB + P /调用知识才能使用该方法及其帮助程序。在Microsoft KB article 894564中,建议使用这种方法和其他一些方法来查找或操纵绑定。该方法可能无法在Vista/W7上运行,但我不确定。

从API方法到PowerShell将会有一些工作要做。该方法本身可能在内部使用注册表,并不确定它是否真的比当前的方法有优势。

0

试试这个:

$IpAddress = (Test-Connection $env:computername -count 1).IPv4address.IPAddressToString 

$NetworkAdapter = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter 'ipenabled = "true"'| where {$_.Ipaddress -contains $IpAddress} 

$NetworkAdapter.properties| select -Property Name,Value 
相关问题