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
}
using System.Management;
string query = "SELECT * FROM Win32_NetworkAdapterConfiguration";
ManagementObjectSearcher moSearch = new ManagementObjectSearcher(query);
ManagementObjectCollection moCollection = moSearch.Get();// Every record in this collection is a network interface
foreach (ManagementObject mo in moCollection)
{
// Do what you need to here....
}
6条答案
按热度按时间83qze16e1#
最简单的方法是:
字符串
现在,如果你想要NetworkInterface对象,你可以做如下操作:
型
另一种选择是使用P/Invoke并调用GetBestInterface()来获取接口索引,然后再次遍历所有网络接口。和前面一样,您必须深入研究
GetIPProperties()
才能找到IPv4InterfaceProperties.Index
属性)。ercv8c1e2#
这两个接口都不会给OP提供他想要的信息--他想知道哪个接口将被用来到达给定的目的地。一种方法是使用System.Diagnostics.Process类执行route命令,然后对输出进行屏幕抓取。
route PRINT (destination IP)
会给你一些有用的东西。这可能不是最好的解决方案,但这是我现在唯一能给予你的。ccgok5k53#
您所需的信息将在WMI中。
这个使用WMI的例子可能会让你大部分的方式:
字符串
Win32_NetworkAdapterConfiguration类将为您提供有关适配器配置的信息,例如:IP地址等。
您还可以查询Win32_NetworkAdapter类以了解每个适配器的“静态”信息(最大速度、制造商等)
mdfafbf14#
至少你可以从这开始,给你所有的地址从dns的本地机器。
字符串
4szc88ey5#
只是为了给予一个完整的画面:另一种方法是使用
Socket.IOControl( SIO_ROUTING_INTERFACE_QUERY, ... )
ConferenceXP包含了相当全面的功能,可以使用IPv4/6和多播地址:https://github.com/conferencexp/conferencexp/blob/master/MSR.LST.Net.Rtp/NetworkingBasics/utility.cs#L84
gg58donl6#
这是一个古老的线程,但今天我正在寻找这个,但找到一个更好的答案,我想。
字符串
今天,为我工作!(当ifIndex为-1时,未找到接口)