导读
易语言5.6完美版,可静态编译,绿色无后门

学习易语言 讲究的是系统,如果你正在四处闲逛,你懂的永远是皮毛! 觅风论坛正在为每个困惑的对易语言 详细

[源码] 取网卡信息源码,解决各种兼容问题

[复制链接]

微信扫一扫 分享朋友圈

AbdulMolin 发表于 2024-10-18 14:47:32 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

马上注册,结交更多易友,享用更多功能,让你轻松玩转觅风论坛。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
   最近在搞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. }
复制代码


游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

精彩评论32

qqq00123 发表于 2024-10-19 05:55:41 | 显示全部楼层
66666666666666666666
回复 支持 反对

使用道具 举报

无敌少爷 发表于 2024-10-19 21:03:50 | 显示全部楼层
人设人阿松大
回复 支持 反对

使用道具 举报

小一 发表于 2024-10-20 12:11:59 | 显示全部楼层
这就是传说中的好资源吗?赶紧看看去!
回复 支持 反对

使用道具 举报

小一 发表于 2024-10-21 03:20:08 | 显示全部楼层
学习了,这就去试试
回复 支持 反对

使用道具 举报

小白 发表于 2024-10-21 18:28:16 | 显示全部楼层
必须支持。。。。。。。
回复 支持 反对

使用道具 举报

596093774 发表于 2024-10-22 03:34:41 | 显示全部楼层
学习了,这就去试试
回复 支持 反对

使用道具 举报

yu1616 发表于 2024-10-23 10:25:10 | 显示全部楼层
多上传一点源码
回复 支持 反对

使用道具 举报

123456 发表于 2024-10-24 17:15:39 | 显示全部楼层
66666666666666666666
回复 支持 反对

使用道具 举报

养猪大户 发表于 2024-10-26 00:06:08 | 显示全部楼层
的法国风格化规范化
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们:觅风论坛与你快乐分享

收藏本站

用心服务做个非盈利公益编程网站

www.eyyba.com

服务人:觅风论坛

Email:eyyba@foxmail.com

Powered by WWW.EYYBA.COM X3.4© 2001-2023 Inc.   版权所有   

觅风论坛  疆ICP备15020893号-1