如何获取默认网卡连接名重要编辑:又回到这个话题。如您所说,应该没有默认网卡,我想了解是否有办法检测实际连接的所有网卡。拥有我的物理接口的MAC地址是否有一种编程方式来获取接口名称/接口状态/等...例如,我的XP机器:设备RealtekRTL8139系列PCI快速以太网NICMACXXXX-XXXX-XXXXXXXX-XXXX-XXXX是根据我对这个设备的了解,我使用“本地连接”连接(所有信息都与网关、子网等相关)所以我正在搜索XXXX-XXXX-XXXX和本地连接。希望现在一切都清楚了。谢谢你们!PS抱歉耽误了...给大家+1票,请耐心等待!老问题大家好,我想用命令netsh更改“本地连接”的IP。我的问题是有一种编程方式来获取默认连接名称(即准确的“本地连接”)?谢谢编辑:我不需要所有连接名称的列表,只需要默认的。访问注册表我得到了列表,默认情况下它似乎被标记为*。不幸的是,在控制台上打印它们我得到10个不同的“本地连接”,例如...本地连接*136TO4适配器VMware网络适配器VMnet1无线网络连接2可重复使用的ISATAP接口{483968F2-DBF9-4596-B8BE-725FAAB89F93}本地区域连接*3本地连接*2可重复使用的Microsoft6To4适配器本地连接*7VMware网络适配器VMnet8本地连接*8isatap.replynet.prv本地连接*9本地连接*12isatap.{FAA80CE0-D641-408A-83F8-5F9C394FFD76}蓝牙网络连接本地连接*4isatap.{40156BF9-6599-4912-A315-62DE5342B452}isatap.{7651F2F5-4888-4258-92C5-6822C506D726}本地连接*5isatap0.{348F5F7-4421-AE24-131BA2DC3458}LocalAreaConnection*LocalAreaConnection*10LocalAreaConnectionLocalAreaConnection*6WirelessNetworkConnectionetc...EDIT2:@ho1运行您的代码以更改不存在的FriendlyName您将获得的名称类似于以下列表,不幸的是它似乎不是预期的输出0-WANMiniport(SSTP)1-WANMiniport(IKEv2)2-WAN微型端口(L2TP)3-WAN微型端口(PPTP)4-WAN微型端口(PPPOE)5-WAN微型端口(IPv6)6-WAN微型端口(网络监视器)7-RealtekRTL8168C(P)/8111C(P)系列PCI-E千兆以太网NIC(NDIS6.20)8-WAN微型端口(IP)9-MicrosoftISATAP适配器10-RAS异步适配器11-Broadcom802.11g网络适配器12-Microsoft6to4适配器13-用于VMnet1的VMware虚拟以太网适配器14-MicrosoftISATAP适配器#315-适用于VMnet8的VMware虚拟以太网适配器16-MicrosoftISATAP适配器#217-MicrosoftISATAP适配器#418-Microsoft虚拟WiFi微型端口适配器19-MicrosoftISATAP适配器#520-MicrosoftISATAP适配器22-蓝牙设备(个人区域网络))23-Microsoft6to4Adapter24-Microsoft6to4Adapter#325-Microsoft6to4Adapter#2这是一种肮脏的方式,因为它可以通过使用System.Net.NetworkInformation合并LINQ等进行优化;列表接口=newList();foreach(varnicinNetworkInterface.GetAllNetworkInterfaces()){if(nic.OperationalStatus==OperationalStatus.Up){Interfaces.Add(nic);}}网络接口结果=null;foreach(NetworkInterfacenicinInterfaces){if(result==null){result=nic;}else{if(nic.GetIPProperties().GetIPProperties()!=null){if(nic.GetIPProperties().GetIPv4Properties().Index您可能希望使用nic.GetIPProperties()和nic.GetIPProperties()的结果.GetIPv4Properties()自定义结果nic.GetIPProperties().GetIPv4Properties()正如其他人提到的,Windows中没有“默认”NIC适配器。使用的NIC是根据目标网络(地址)和指标选择的。对于例如,如果您有两个NIC和两个不同的网络:10.1.10.1-本地连接(公制20)10.1.50.1-本地连接2(公制10)并且您想要连接到10.1.10.15,Windows将选择本地连接和路由方式。相反,如果你想连接到10.1.50.30,Windows将选择本地连接2。现在,如果你尝试连接到74.125.67.106(google.com),Windows将选择本地连接2因为它具有较低的度量值。编辑:这是一篇解释路由的好文章-http://www.windowsnetworking.com/articles_tutorials/Making-Sense-Windows-Routing-Tables.html编辑2:拼写。希望这可以帮助。您可以使用WMI类Win32_NetworkAdapter枚举所有适配器,它有一个Index属性,这可能意味着索引为0或1的索引是默认属性,或者其他属性之一可能有助于找到默认属性。这样的事情可能是:编辑:修复损坏的代码(这至少更有可能起作用)。但是按照abatishchev所说的,我认为您可能需要使用Win32_NetworkAdapterConfiguration.IPConnectionMetric来查找默认适配器...ManagementClassmc=newManagementClass("Win32_NetworkAdapter");foreach(ManagementObjectmoinmc.GetInstances()){intindex=Convert.ToInt32(mo["Index"]);字符串名称=mo["NetConnectionID"]作为字符串;如果(!string.IsNullOrEmpty(name))textBox1.Text+=name+Environment.NewLine;}使用System.Linq;使用系统。网络信息;varnic=NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(i=>i.NetworkInterfaceType!=NetworkInterfaceType.Loopback&&i.NetworkInterfaceType!=NetworkInterfaceType.Tunnel);varname=nic.Name;或者更优雅的解决方案:.Where(i=>!(new[]{NetworkInterfaceType.Loopback,NetworkInterfaceType.Tunnel}.Contains(i.NetworkInterfaceType)))或者如果你想在LINQ中练习:staticIEnumerableGetAllNetworkInterfaces(IEnumerableexcludeTypes){varall=NetworkInterface.GetAllNetworkInterfaces();varexclude=all.Where(我=>excludeTypes.Contains(i.NetworkInterfaceType));返回所有。除了(排除);}用法:varnic=GetAllNetworkInterfaces(new[]{NetworkInterfaceType.Tunnel,NetworkInterfaceType.Loopback});我的一个朋友(CiroDA)有同样的问题玩弄c#,我们似乎找到了一种方法来跳过dummy(Ip并没有真正连接):我们不只是在寻找那些没有它,还有那些有虚拟(0.0.0.0)人的人。在我的机器上,这些最终只是两个Vm-Ware虚拟适配器。publicstaticvoidDisplayIPAddresses(){Console.WriteLine("rn******************************");Console.WriteLine("IPAddresses");Console.WriteLine("******************************");StringBuildersb=newStringBuilder();//获取所有网络接口的列表(通常每个网卡、拨号和VPN连接一个)NetworkInterface[]networkInterfaces=NetworkInterface.GetAllNetworkInterfaces();foreach(networkInterfaces中的NetworkInterface网络){如果(network.OperationalStatus==OperationalStatus.Up){如果(network.NetworkInterfaceType==NetworkInterfaceType.Tunnel)继续;//网关IP地址信息收集GATE=network.GetIPProperties().GatewayAddresses;//读取每个网络的IP配置IPInterfacePropertiesproperties=network.GetIPProperties();//丢弃那些没有真正网关的人if(properties.GatewayAddresses.Count>0){boolgood=false;foreach(属性中的GatewayIPAddressInformationgInfoies.GatewayAddresses){//不是真正的网关(VmWareLan)if(!gInfo.Address.ToString().Equals("0.0.0.0")){sb.AppendLine("GATEAWAY"+gInfo.Address.ToString());好=真;休息;}}if(!good){继续;}}else{继续;}//每个网络接口可能有多个IP地址foreach(IPAddressInformationaddressinproperties.UnicastAddresses){//我们现在只对IPv4地址感兴趣if(address.Address.AddressFamily!=AddressFamily.InterNetwork)continue;//忽略环回地址(例如127.0.0.1)if(IPAddress.IsLoopback(address.Address))continue;如果(!address.IsDnsEligible)继续;如果(地址。IsTransient)继续;sb.AppendLine(address.Address.ToString()+"("+network.Name+")nType:"+network.NetworkInterfaceType.ToString());}}}Console.WriteLine(sb.ToString());您可以获得它们的列表,但不是默认值(也许您可以假设它是第一个条目)以上就是C#学习教程:如何获取默认网卡连接名分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望你多多关注—staticvoidMain(string[]args){foreach(varncinNetworkInterface.GetAllNetworkInterfaces()){Console.WriteLine(nc.姓名);}控制台.ReadLine();}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
