觅风论坛

标题: 取网卡信息源码,解决各种兼容问题 [打印本页]

作者: AbdulMolin    时间: 2024-10-18 14:47
标题: 取网卡信息源码,解决各种兼容问题
   最近在搞nei网穿透,用到cha询网卡信息并修改,翻了论坛,下载的一些都有些问题,比如兼容性不好,有的在win10是好的,我拿到win7或者windows server2008,2019上去,网卡就枚举有问题了,哎,所以就有了这个dll,c#弄 的,兼容win7~11,server等平台。


  1. .版本 2
  2. .支持库 spec

  3. .程序集 窗口程序集_启动窗口

  4. .子程序 __启动窗口_创建完毕
  5. .局部变量 a, 整数型
  6. .局部变量 i, 整数型

  7. a = 获取网卡数量 ()
  8. ' 编辑框1.内容 = 到文本 (获取网卡信息 (4))
  9. .计次循环首 (a, i)
  10.     调试输出 (获取网卡信息 (i - 1))
  11.     i = i + 1
  12. .计次循环尾 ()
  13. 调试输出 (获取当前联网网卡信息 ())
  14. 调试输出 (设置网卡 (“WLAN”, “10.36.0.199”, “255.255.255.0”, “10.36.0.1”))
复制代码

  1. .版本 2

  2. .DLL命令 获取网卡数量, 整数型, "NetworkInfoDll.dll", "GetNetworkAdaptersCount", 公开, 获取网卡数量:返回值 >= 0: 表示找到的网卡数量,返回值 < 0: 表示出现错误

  3. .DLL命令 获取网卡信息, 文本型, "NetworkInfoDll.dll", "GetNetworkAdapterInfo", 公开, 获取网卡信息:网卡索引 (从0开始),每一组网卡信息字符串格式:"连接名称|网卡名称|连接状态|IP地址|子网掩码|网关",分隔符是|
  4.     .参数 网卡索引, 整数型, , 网卡索引 (从0开始)

  5. .DLL命令 获取当前联网网卡信息, 文本型, "NetworkInfoDll.dll", "GetActiveNetworkAdapterInfo", 公开

  6. .DLL命令 设置网卡, 文本型, "NetworkInfoDll.dll", "SetNetworkAdapterInfo", 公开, 修改网络设置需要管理员权限,注意修改IP等信息是根据“连接名称“来的
  7.     .参数 连接名称, 文本型
  8.     .参数 新IP, 文本型
  9.     .参数 新掩码, 文本型
  10.     .参数 新网关, 文本型
复制代码
  1. using System;
  2. using System.Net.NetworkInformation;
  3. using System.Runtime.InteropServices;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Management;
  7. using RGiesecke.DllExport;

  8. namespace NetworkInfoDll
  9. {
  10.     public class NetworkInfo
  11.     {
  12.         private static List<NetworkInterface> networkInterfaces;

  13.         [DllExport("GetNetworkAdaptersCount", CallingConvention = CallingConvention.StdCall)]
  14.         public static int GetNetworkAdaptersCount()
  15.         {
  16.             networkInterfaces = new List<NetworkInterface>(NetworkInterface.GetAllNetworkInterfaces());
  17.             return networkInterfaces.Count;
  18.         }

  19.         [DllExport("GetNetworkAdapterInfo", CallingConvention = CallingConvention.StdCall)]
  20.         [return: MarshalAs(UnmanagedType.LPStr)]
  21.         public static string GetNetworkAdapterInfo(int index)
  22.         {
  23.             if (networkInterfaces == null || index < 0 || index >= networkInterfaces.Count)
  24.             {
  25.                 return "Error: Invalid index";
  26.             }

  27.             NetworkInterface nic = networkInterfaces[index];
  28.             return GetNetworkAdapterInfoByInterface(nic);
  29.         }

  30.         [DllExport("GetActiveNetworkAdapterInfo", CallingConvention = CallingConvention.StdCall)]
  31.         [return: MarshalAs(UnmanagedType.LPStr)]
  32.         public static string GetActiveNetworkAdapterInfo()
  33.         {
  34.             NetworkInterface activeNic = GetActiveNetworkInterface();
  35.             if (activeNic == null)
  36.             {
  37.                 return "Error: No active network adapter found";
  38.             }

  39.             return GetNetworkAdapterInfoByInterface(activeNic);
  40.         }

  41.         [DllExport("SetNetworkAdapterInfo", CallingConvention = CallingConvention.StdCall)]
  42.         [return: MarshalAs(UnmanagedType.LPStr)]
  43.         public static string SetNetworkAdapterInfo(string connectionName, string ipAddress, string subnetMask, string gateway)
  44.         {
  45.             try
  46.             {
  47.                 if (!IsAdministrator())
  48.                 {
  49.                     return "Error: 需要管理员权限来修改网络设置";
  50.                 }

  51.                 using (var networkConfigMng = new ManagementClass("Win32_NetworkAdapter"))
  52.                 {
  53.                     using (var networkConfigs = networkConfigMng.GetInstances())
  54.                     {
  55.                         foreach (ManagementObject networkAdapter in networkConfigs)
  56.                         {
  57.                             string netConnectionID = networkAdapter["NetConnectionID"] as string;
  58.                             if (netConnectionID == connectionName)
  59.                             {
  60.                                 uint index = (uint)networkAdapter["Index"];
  61.                                 using (var networkConfigMng2 = new ManagementClass("Win32_NetworkAdapterConfiguration"))
  62.                                 {
  63.                                     using (var networkConfigs2 = networkConfigMng2.GetInstances())
  64.                                     {
  65.                                         foreach (ManagementObject networkConfig in networkConfigs2)
  66.                                         {
  67.                                             if ((uint)networkConfig["Index"] == index)
  68.                                             {
  69.                                                 ManagementBaseObject newIP = networkConfig.GetMethodParameters("EnableStatic");
  70.                                                 newIP["IPAddress"] = new string[] { ipAddress };
  71.                                                 newIP["SubnetMask"] = new string[] { subnetMask };

  72.                                                 ManagementBaseObject newGateway = networkConfig.GetMethodParameters("SetGateways");
  73.                                                 newGateway["DefaultIPGateway"] = new string[] { gateway };

  74.                                                 ManagementBaseObject setIP = networkConfig.InvokeMethod("EnableStatic", newIP, null);
  75.                                                 ManagementBaseObject setGateway = networkConfig.InvokeMethod("SetGateways", newGateway, null);

  76.                                                 if ((uint)setIP["ReturnValue"] == 0 && (uint)setGateway["ReturnValue"] == 0)
  77.                                                 {
  78.                                                     return "Success: 网络设置已更新";
  79.                                                 }
  80.                                                 else
  81.                                                 {
  82.                                                     return $"Error: 设置IP返回值 {setIP["ReturnValue"]}, 设置网关返回值 {setGateway["ReturnValue"]}";
  83.                                                 }
  84.                                             }
  85.                                         }
  86.                                     }
  87.                                 }
  88.                             }
  89.                         }
  90.                     }
  91.                 }

  92.                 return $"Error: 未找到名为 '{connectionName}' 的网络连接";
  93.             }
  94.             catch (Exception ex)
  95.             {
  96.                 return $"Error: {ex.Message}";
  97.             }
  98.         }

  99.         private static NetworkInterface GetActiveNetworkInterface()
  100.         {
  101.             return NetworkInterface.GetAllNetworkInterfaces()
  102.                 .OrderByDescending(nic => nic.Speed)
  103.                 .FirstOrDefault(nic =>
  104.                     nic.OperationalStatus == OperationalStatus.Up &&
  105.                     nic.NetworkInterfaceType != NetworkInterfaceType.Loopback &&
  106.                     nic.GetIPProperties().UnicastAddresses.Any(addr => addr.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork));
  107.         }

  108.         private static string GetNetworkAdapterInfoByInterface(NetworkInterface nic)
  109.         {
  110.             IPInterfaceProperties properties = nic.GetIPProperties();

  111.             string connectionName = nic.Name;
  112.             string adapterName = nic.Description;
  113.             string status = GetChineseStatus(nic.OperationalStatus);
  114.             string ipAddress = "";
  115.             string subnetMask = "";
  116.             string gateway = "";

  117.             foreach (UnicastIPAddressInformation ip in properties.UnicastAddresses)
  118.             {
  119.                 if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
  120.                 {
  121.                     ipAddress = ip.Address.ToString();
  122.                     subnetMask = ip.IPv4Mask.ToString();
  123.                     break;
  124.                 }
  125.             }

  126.             if (properties.GatewayAddresses.Count > 0)
  127.             {
  128.                 gateway = properties.GatewayAddresses[0].Address.ToString();
  129.             }

  130.             return $"{connectionName}|{adapterName}|{status}|{ipAddress}|{subnetMask}|{gateway}";
  131.         }

  132.         private static string GetChineseStatus(OperationalStatus status)
  133.         {
  134.             switch (status)
  135.             {
  136.                 case OperationalStatus.Up:
  137.                     return "已连接";
  138.                 case OperationalStatus.Down:
  139.                     return "已断开";
  140.                 case OperationalStatus.Testing:
  141.                     return "正在测试";
  142.                 case OperationalStatus.Unknown:
  143.                     return "未知";
  144.                 case OperationalStatus.Dormant:
  145.                     return "休眠";
  146.                 case OperationalStatus.NotPresent:
  147.                     return "不存在";
  148.                 case OperationalStatus.LowerLayerDown:
  149.                     return "底层已断开";
  150.                 default:
  151.                     return status.ToString();
  152.             }
  153.         }

  154.         private static bool IsAdministrator()
  155.         {
  156.             System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
  157.             System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
  158.             return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
  159.         }
  160.     }
  161. }
复制代码



作者: qqq00123    时间: 2024-10-19 05:55
66666666666666666666
作者: 无敌少爷    时间: 2024-10-19 21:03
人设人阿松大
作者: 小一    时间: 2024-10-20 12:11
这就是传说中的好资源吗?赶紧看看去!
作者: 小一    时间: 2024-10-21 03:20
学习了,这就去试试
作者: 小白    时间: 2024-10-21 18:28
必须支持。。。。。。。
作者: 596093774    时间: 2024-10-22 03:34
学习了,这就去试试

作者: yu1616    时间: 2024-10-23 10:25
多上传一点源码
作者: 123456    时间: 2024-10-24 17:15
66666666666666666666
作者: 养猪大户    时间: 2024-10-26 00:06
的法国风格化规范化
作者: 斯蒂芬    时间: 2024-10-27 06:56
学习一下!十分感谢
作者: 123456    时间: 2024-10-28 13:47
不错哦  喜欢 嘿嘿
作者: 5555    时间: 2024-10-29 10:33
感谢感谢分享
作者: haobaba45    时间: 2024-10-30 07:20
想学唉,可惜现在的我啥都不会
作者: 5555    时间: 2024-10-31 04:07
学习了!!!!
作者: 骑着蚂蚁兜风    时间: 2024-11-1 00:54
好像还不错!
作者: 张杰    时间: 2024-11-1 21:41
这个不错,谢谢共享
作者: qq1354596367    时间: 2024-11-2 16:08
我知道错了,感谢大神分享
作者: 刘小凯    时间: 2024-11-3 10:36
66666666666666666666
作者: 幻之灭    时间: 2024-11-4 05:04
好东西,一定要进行学习
作者: 216341564213    时间: 2024-11-4 23:31
666学习了!!
作者: 31235634    时间: 2024-11-5 17:59
必须支持。。。。。。。
作者: 小天    时间: 2024-11-7 01:34
我知道错了,感谢大神分享
作者: 啊啊啊啊啊    时间: 2024-11-8 09:10
谢谢分享,下载测试
作者: 小天    时间: 2024-11-9 16:45
不错!顶LZ
作者: 天汇    时间: 2024-11-11 00:20
学习了,这就去试试
作者: a895830975    时间: 2024-11-12 07:56
这个不错,谢谢共享
作者: sxy19931021    时间: 2024-11-13 06:28
提示: 作者被禁止或删除 内容自动屏蔽
作者: 小白    时间: 2024-11-14 05:00
觅风论坛需要你
作者: zzq6689@qq.com    时间: 7 天前
提示: 作者被禁止或删除 内容自动屏蔽
作者: zzq6689@qq.com    时间: 6 天前
提示: 作者被禁止或删除 内容自动屏蔽
作者: NUNU    时间: 5 天前
抢楼了,前排第一次啊
作者: daduke7902    时间: 5 天前
支持一下。




欢迎光临 觅风论坛 (https://www.eyyba.com/) Powered by Discuz! X3.4