如何使用.NET确定Windows上网络接口的绑定顺序?

4
我正在寻找系统“主IP地址”的神奇答案。我的研究发现,“最佳”答案意味着以下内容:
  1. 查看 [system.Net.NetworkInformation.NetworkInterface] :: GetAllNetworkInterfaces(),以获取分配了默认网关的接口。如果只找到一个,则完成。
  2. 如果有多个,则必须查看路由表以找到具有最低度量值的接口(查看0.0.0.0网络条目)。
  3. 如果度量值相同,则具有最低绑定顺序的适配器获胜。
我的问题是:如何使用.NET确定绑定顺序?我看到了一个solution,它查看注册表,这还不错,但我希望有一个更漂亮的界面。
如果提供PowerShell示例,则可获得额外加分,因为这是我选择的语言。 :)

已经有类似的线程了 https://dev59.com/UEbRa4cB1Zd3GeqP2KA8 - Jaykul
我越来越喜欢注册表方法了... - halr9000
3个回答

3

就我个人而言,我认为注册表解决方案更加优雅、可靠。你所提供的链接已经使用了PowerShell,因此对于您来说,这似乎是一个完美的解决方案...


另一种基于注册表的解决方案可在这里找到。


@ZeroBugBounce 刚刚添加了一个备选版本。 - Reed Copsey

1
一个好的起点似乎是这个API方法:EnumBindingPaths,但是使用该方法及其辅助工具需要C++或C#/VB + P/Invoke知识。在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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接