觅风论坛
标题:
取网卡信息源码,解决各种兼容问题
[打印本页]
作者:
AbdulMolin
时间:
2024-10-18 14:47
标题:
取网卡信息源码,解决各种兼容问题
最近在搞nei网穿透,用到cha询网卡信息并修改,翻了论坛,下载的一些都有些问题,比如兼容性不好,有的在win10是好的,我拿到win7或者windows server2008,2019上去,网卡就枚举有问题了,哎,所以就有了这个dll,c#弄 的,兼容win7~11,server等平台。
.版本 2
.支持库 spec
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 a, 整数型
.局部变量 i, 整数型
a = 获取网卡数量 ()
' 编辑框1.内容 = 到文本 (获取网卡信息 (4))
.计次循环首 (a, i)
调试输出 (获取网卡信息 (i - 1))
i = i + 1
.计次循环尾 ()
调试输出 (获取当前联网网卡信息 ())
调试输出 (设置网卡 (“WLAN”, “10.36.0.199”, “255.255.255.0”, “10.36.0.1”))
复制代码
.版本 2
.DLL命令 获取网卡数量, 整数型, "NetworkInfoDll.dll", "GetNetworkAdaptersCount", 公开, 获取网卡数量:返回值 >= 0: 表示找到的网卡数量,返回值 < 0: 表示出现错误
.DLL命令 获取网卡信息, 文本型, "NetworkInfoDll.dll", "GetNetworkAdapterInfo", 公开, 获取网卡信息:网卡索引 (从0开始),每一组网卡信息字符串格式:"连接名称|网卡名称|连接状态|IP地址|子网掩码|网关",分隔符是|
.参数 网卡索引, 整数型, , 网卡索引 (从0开始)
.DLL命令 获取当前联网网卡信息, 文本型, "NetworkInfoDll.dll", "GetActiveNetworkAdapterInfo", 公开
.DLL命令 设置网卡, 文本型, "NetworkInfoDll.dll", "SetNetworkAdapterInfo", 公开, 修改网络设置需要管理员权限,注意修改IP等信息是根据“连接名称“来的
.参数 连接名称, 文本型
.参数 新IP, 文本型
.参数 新掩码, 文本型
.参数 新网关, 文本型
复制代码
using System;
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using RGiesecke.DllExport;
namespace NetworkInfoDll
{
public class NetworkInfo
{
private static List<NetworkInterface> networkInterfaces;
[DllExport("GetNetworkAdaptersCount", CallingConvention = CallingConvention.StdCall)]
public static int GetNetworkAdaptersCount()
{
networkInterfaces = new List<NetworkInterface>(NetworkInterface.GetAllNetworkInterfaces());
return networkInterfaces.Count;
}
[DllExport("GetNetworkAdapterInfo", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.LPStr)]
public static string GetNetworkAdapterInfo(int index)
{
if (networkInterfaces == null || index < 0 || index >= networkInterfaces.Count)
{
return "Error: Invalid index";
}
NetworkInterface nic = networkInterfaces[index];
return GetNetworkAdapterInfoByInterface(nic);
}
[DllExport("GetActiveNetworkAdapterInfo", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.LPStr)]
public static string GetActiveNetworkAdapterInfo()
{
NetworkInterface activeNic = GetActiveNetworkInterface();
if (activeNic == null)
{
return "Error: No active network adapter found";
}
return GetNetworkAdapterInfoByInterface(activeNic);
}
[DllExport("SetNetworkAdapterInfo", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.LPStr)]
public static string SetNetworkAdapterInfo(string connectionName, string ipAddress, string subnetMask, string gateway)
{
try
{
if (!IsAdministrator())
{
return "Error: 需要管理员权限来修改网络设置";
}
using (var networkConfigMng = new ManagementClass("Win32_NetworkAdapter"))
{
using (var networkConfigs = networkConfigMng.GetInstances())
{
foreach (ManagementObject networkAdapter in networkConfigs)
{
string netConnectionID = networkAdapter["NetConnectionID"] as string;
if (netConnectionID == connectionName)
{
uint index = (uint)networkAdapter["Index"];
using (var networkConfigMng2 = new ManagementClass("Win32_NetworkAdapterConfiguration"))
{
using (var networkConfigs2 = networkConfigMng2.GetInstances())
{
foreach (ManagementObject networkConfig in networkConfigs2)
{
if ((uint)networkConfig["Index"] == index)
{
ManagementBaseObject newIP = networkConfig.GetMethodParameters("EnableStatic");
newIP["IPAddress"] = new string[] { ipAddress };
newIP["SubnetMask"] = new string[] { subnetMask };
ManagementBaseObject newGateway = networkConfig.GetMethodParameters("SetGateways");
newGateway["DefaultIPGateway"] = new string[] { gateway };
ManagementBaseObject setIP = networkConfig.InvokeMethod("EnableStatic", newIP, null);
ManagementBaseObject setGateway = networkConfig.InvokeMethod("SetGateways", newGateway, null);
if ((uint)setIP["ReturnValue"] == 0 && (uint)setGateway["ReturnValue"] == 0)
{
return "Success: 网络设置已更新";
}
else
{
return $"Error: 设置IP返回值 {setIP["ReturnValue"]}, 设置网关返回值 {setGateway["ReturnValue"]}";
}
}
}
}
}
}
}
}
}
return $"Error: 未找到名为 '{connectionName}' 的网络连接";
}
catch (Exception ex)
{
return $"Error: {ex.Message}";
}
}
private static NetworkInterface GetActiveNetworkInterface()
{
return NetworkInterface.GetAllNetworkInterfaces()
.OrderByDescending(nic => nic.Speed)
.FirstOrDefault(nic =>
nic.OperationalStatus == OperationalStatus.Up &&
nic.NetworkInterfaceType != NetworkInterfaceType.Loopback &&
nic.GetIPProperties().UnicastAddresses.Any(addr => addr.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork));
}
private static string GetNetworkAdapterInfoByInterface(NetworkInterface nic)
{
IPInterfaceProperties properties = nic.GetIPProperties();
string connectionName = nic.Name;
string adapterName = nic.Description;
string status = GetChineseStatus(nic.OperationalStatus);
string ipAddress = "";
string subnetMask = "";
string gateway = "";
foreach (UnicastIPAddressInformation ip in properties.UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
ipAddress = ip.Address.ToString();
subnetMask = ip.IPv4Mask.ToString();
break;
}
}
if (properties.GatewayAddresses.Count > 0)
{
gateway = properties.GatewayAddresses[0].Address.ToString();
}
return $"{connectionName}|{adapterName}|{status}|{ipAddress}|{subnetMask}|{gateway}";
}
private static string GetChineseStatus(OperationalStatus status)
{
switch (status)
{
case OperationalStatus.Up:
return "已连接";
case OperationalStatus.Down:
return "已断开";
case OperationalStatus.Testing:
return "正在测试";
case OperationalStatus.Unknown:
return "未知";
case OperationalStatus.Dormant:
return "休眠";
case OperationalStatus.NotPresent:
return "不存在";
case OperationalStatus.LowerLayerDown:
return "底层已断开";
default:
return status.ToString();
}
}
private static bool IsAdministrator()
{
System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
}
}
}
复制代码
作者:
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