c# - 如何获取当前使用的网络适配器
问题描述
现在我正在尝试在我的机器上的几个网络适配器中使用网络适配器,以便我可以获得网络适配器的 ip 地址、mac 地址和适配器名称。但我没有任何运气。我找到的解决方案是Get current network adapter in use。我不认为它适用于 .Net 框架项目,而是适用于 ASP.NET Core。
我的代码如下。
public void GetIpAndMacAddress()
{
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
// Only consider Ethernet network interfaces
if (nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet &&
nic.OperationalStatus == OperationalStatus.Up)
{
IPInterfaceProperties adapterProperties = nic.GetIPProperties();
foreach (var ip in adapterProperties.UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
IPAddress = ip.Address.ToString();
}
string hexMac = nic.GetPhysicalAddress().ToString(),
regex = "(.{2})(.{2})(.{2})(.{2})(.{2})(.{2})",
replace = "$1:$2:$3:$4:$5:$6";
IPv4InterfaceProperties p = adapterProperties.GetIPv4Properties();
netAdapterName = nic.Name;
MACAddress = Regex.Replace(hexMac, regex, replace);
return;
}
}
}
解决方案
以下应该对您有所帮助。
NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces();
var activeAdapter = networks.First(x=> x.NetworkInterfaceType != NetworkInterfaceType.Loopback
&& x.NetworkInterfaceType != NetworkInterfaceType.Tunnel
&& x.OperationalStatus == OperationalStatus.Up
&& x.Name.StartsWith("vEthernet") == false);
搜索基于消除既不是环回(通常用于测试)也不是隧道(通常用于专用网络之间的安全连接)的网络适配器。操作状态确保网络接口已启动并且能够传输数据包。“vEthernet”是 Windows 通常用于Hyper-V 虚拟网络适配器的命名约定
推荐阅读
- regex - 正则表达式:在两个太长的字符串之间查找空间
- c# - 如何在单元格网格中显示不同的文本
- ruby-on-rails - ActiveRecord 产生双重消息
- python - Python|数据聚合| 多个 Excel 文件
- python - ValueError: X.shape[1] = 2 应该等于 13,训练时的特征数
- r - Pathview R:将已知转录本映射到代表 FoldChange 的 KEGG 通路图
- java - 通过前缀获取 application.properties 的子集
- github - 如何使用 webhook 更新网站
- julia - Julia 中的并行计算和错误分配的核心数
- android - 如何从 Camera2 和 ImageReader 获得正确的尺寸?