在.NET应用程序中,如何识别用于与给定IP地址通信的网络接口?
我在具有多个网络接口,IPv4和v6的工作站上运行,我需要获取用于流量到我给定数据库服务器的"正确"接口的地址.
最简单的方法是:
UdpClient u = new UdpClient(remoteAddress, 1); IPAddress localAddr = ((IPEndPoint)u.Client.LocalEndPoint).Address;
现在,如果您想要NetworkInterface对象,您可以执行以下操作:
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) { IPInterfaceProperties ipProps = nic.GetIPProperties(); // check if localAddr is in ipProps.UnicastAddresses }
另一种选择是使用P/Invoke并调用GetBestInterface()来获取接口索引,然后再次遍历所有网络接口.和以前一样,你必须挖掘GetIPProperties()
才能到达IPv4InterfaceProperties.Index
酒店.
这些都不会给OP提供他正在寻找的信息 - 他想知道哪个接口将用于到达给定目的地.执行所需操作的一种方法是使用System.Diagnostics.Process类转发到route命令,然后屏幕截取输出. route PRINT (destination IP)
会给你一些可用的东西.这可能不是最好的解决方案,但它是我现在唯一可以给你的解决方案.