编程实现重起网卡等设备

Windos下通过Wpcap抓包实现两个网卡桥接   1. 背景:           一台电脑允许接多个网口,当然大部分只有一个网口其余都是USB扩展而来,而每个网口之间需要配置不同的网段IP,这就造成了和同一台电脑不通网口相连的设备处于不通的网段,虽然电脑与两台设备沟通无压力,但是两台设备间通信由于处于不通网段而变得相对比较困难。对于开发人员,这并不是一个问题,直接接到交换机或者HUB上一样工作。。。而且扩展性也无与伦比。。。对一般win... 阅读详情
今天 水木上有位朋友问我如何卸载 WinPCap的驱动。因为此类驱动跟网卡绑定很紧密,卸载的时候最好是要把网卡重起一下(SnifferPro就是如此)。而重起网卡的程序实现又很少有资料介绍,前段时间好容易看到一篇文章,居然是用字符串查找到控制面板下面调用applet,呵呵,够狠 -_-b。刚好前几个月有同事有类似需求,我写过一个命令行下重起网卡的小工具,就把它翻出来大概介绍一下实现思路。
     
     首先是要找到需要操作的网卡的ID,这个功能实现的方法很多:最常见的是Winpcap的packet32.c里面提供的直接从注册表中枚举的方法;另外一种方法则是使用DDK中提供的Device Installation系列函数完成。
     枚举注册表的方法需要打开HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}注册表键,{4D36E972-E325-11CE-BFC1-08002bE10318}是Net类型设备的ID,下面每个子键定义一个网络设备,但只有一部分设备是网卡。具体处理方法请参见Winpcap的PacketGetAdapterNames函数。
     使用Device Installation API则首先用SetupDiGetClassDevs函数获取所有类型的设备,或者在此指定只获取特定类型设备。因为我那个程序原意是控制所有类型设备,就没有指定类型。
 
以下为引用:

 HDEVINFO m_hDevInfo = ::SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);
 

    
     然后使用SetupDiEnumDeviceInfo枚举类型中所有的设备
 
以下为引用:

 SP_DEVINFO_DATA did = { sizeof(SP_DEVINFO_DATA) };  

 

 for(int i=0; ::SetupDiEnumDeviceInfo(m_hDevInfo, i, &did); i++)
 {
    //... 
 }
 


   

 

     在找到要处理的设备后,应该用CM_Get_DevNode_Status函数和注册表获取其状态,忽略被隐藏的设备。
 

以下为引用:

 bool CDeviceManager::IsClassHidden(const GUID *ClsGuid) const
 {
   HKEY hKeyClass = ::SetupDiOpenClassRegKey(ClsGuid, KEY_READ);
   
   bool hidden = false;
   
   if(INVALID_HANDLE_VALUE != hKeyClass)
   {
     hidden = ERROR_SUCCESS == ::RegQueryValueEx(hKeyClass, REGSTR_VAL_NODISPLAYCLASS, NULL, NULL, NULL, NULL);
     
     ::RegCloseKey(hKeyClass);
   }
   
   return hidden;
 }

 

 DWORD dwStatus = 0, dwProblem = 0;

 if(CR_SUCCESS != ::CM_Get_DevNode_Status(&dwStatus, &dwProblem, did.DevInst,0))
 {
   DisplayError("CM_Get_DevNode_Status");
   continue;
 }

 if(dwStatus & DN_NO_SHOW_IN_DM || IsClassHidden(&did.ClassGuid))
 {
   continue;
 }    
 


    
     对剩下的设备则根据其Class进行过滤,只处理Net类型设备,如果前面指定只获取Net设备则此步骤可以忽略。
 
以下为引用:

 

 const std::string CDeviceManager::GetProperty(SP_DEVINFO_DATA& did, DWORD Property) const
 {   
   std::string buf;
   DWORD dwLength = 0;

   while(!::SetupDiGetDeviceRegistryProperty(m_hDevInfo, &did, Property, NULL, 
     (PBYTE)buf.c_str(), buf.size(), &dwLength))
   {
     if(::GetLastError() == ERROR_INSUFFICIENT_BUFFER)
     {
       buf.resize(dwLength * sizeof(wchar_t));
       std::fill(buf.begin(), buf.end(), '/0');
     }
     else
     {
       break;
     }
   }
   buf.resize(strlen(buf.c_str()));

   return buf;
 }

 if(stricmp(GetProperty(did, SPDRP_CLASSGUID).c_str(), "{4d36e972-e325-11ce-bfc1-08002be10318}") == 0)
 {
   // ...
 }
 


    
     满足上述限制的设备,就是我们要处理的网卡。可以直接修改其状态:SetupDiSetClassInstallParams函数设置参数;SetupDiCallClassInstaller完成参数修改。
 
以下为引用:

 bool CDeviceManager::ChangeDeviceState(SP_DEVINFO_DATA& did, DWORD State) const
 {
   SP_PROPCHANGE_PARAMS pcp = {sizeof(SP_CLASSINSTALL_HEADER)};
   
   pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
   pcp.Scope = (State == DICS_START || State == DICS_STOP )? DICS_FLAG_CONFIGSPECIFIC : DICS_FLAG_GLOBAL;
   pcp.StateChange = State; 

 

   if(!::SetupDiSetClassInstallParams(m_hDevInfo, &did, 
     (SP_CLASSINSTALL_HEADER *)&pcp, sizeof(pcp)))
   {
     DisplayError("SetupDiSetClassInstallParams");    
     return false;
   }
   
   //
   // Call the ClassInstaller and perform the change.
   //
   if(!::SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, m_hDevInfo, &did))
   {
     DisplayError("SetupDiCallClassInstaller");
   }
   return true;
 }

 ChangeDeviceState(did, DICS_STOP);    // 停止
 ChangeDeviceState(did, DICS_START);   // 启动
 ChangeDeviceState(did, DICS_ENABLE);  // 启用
 ChangeDeviceState(did, DICS_DISABLE); // 禁用
 


     http://www.blogcn.com/user8/flier_lu/blog/1243576.html
深度解剖Linux内核【网卡设备驱动】 Linux设备驱动分三种,包括字符设备驱动、块设备驱动和网络设备驱动。字符设备只能按字节流先后顺序访问设备内存,不能随机访问。鼠标、触摸屏、LCD等是字符设备的代表。块设备可以随机访问设备内存的任意地址,硬盘、SD卡、NAND FLASH是块设备的代表。网络设备指的是网卡一类使用socket套接字进行通信的设备。本文以字符设备为例讲述相关知识。Linux字符设备驱动剖析Linux 设备文件的创建和mdev从可以看出,应用层访问设备驱动非常简单,即是通过open接口来最终获得设备驱动的操作接口集struct 阅读详情

相关推荐

关于USB无线网卡的实现

本文主要介绍了USB无线网卡的实现方案,涉及基于微软NDIS框架下的网卡驱动开发,802.11无线协议开发,USB协议开发部分。NDIS框架式微软专门针对网络设备设计的接口。由于是USB接口,所以需要一个WDM的底层作为NDIS miniport驱动的物理访问接口。作为无线网卡,对802.11协议的实现是本文很重要的一个内容。关键词:NDIS WDM USB 802.111,  项目介绍

iwub的专栏 4605

C++ 实现Windows系统设备枚举

1.枚举系统设备 HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD dwDevID; // 得到所有设备 HDEVINFO  hDevInfo = SetupDiGetClassDevs(NULL, 0, 0, DIGCF_PRESENT | DIGCF_ALLCLASSES);//根据此处参数不同可分类枚举设备,这

叶阳的博客 6505

USB无线网卡的用途及编程实现

然后,我们断开当前的WiFi连接,并创建一个新的WiFi配置文件,设置无线网络的名称、身份验证算法、加密算法和密码。通过编程实现,我们可以控制USB无线网卡,连接到无线网络并实现相关功能。为了通过编程实现USB无线网卡的功能,我们可以使用一些常见的编程语言和库来控制无线网卡。在下面的示例中,我们将使用Python编程语言和pywifi库来演示如何使用USB无线网卡连接到无线网络。移动设备的无线连接:USB无线网卡还可以用于连接移动设备,如笔记本电脑、平板电脑或智能手机,以便它们可以通过无线网络访问互联网。

DevProZ的博客 707

win c++ 枚举设备驱动状态

#include   #include #pragma comment(lib,"Setupapi.lib") bool IsDeviceDisabled(DWORD dwDevID, HDEVINFO hDevInfo, DWORD &dwStatus) { SP_DEVINFO_DATA DevInfoData = {sizeof(SP_DEVINFO_DATA)};

d2262272d的博客 2140

PowerBuilder实现网卡状态控制程序设计

应用编程接口(API)是现代操作系统与软件开发人员之间的桥梁。在网络管理的上下文中,API允许程序以标准化的方式与网络硬件交互,无论是启用还是禁用网卡。API的存在使得开发者能够专注于业务逻辑,而无需深入底层硬件的复杂性。API提供了定义良好的函数集,能够执行如获取网卡状态、修改配置、启用和禁用网卡等任务。一些常见的跨平台API和操作系统特定的API在网卡管理中扮演了重要角色。例如,Windows平台中的Win32 API提供了诸如和。

weixin_32324637的博客 1058

DELPHI编程实现网络连接管理与网卡驱动控制

本文还有配套的精品资源,点击获取 简介:在IT行业中,网络连接管理是常见任务,涉及到网卡驱动的控制。本文详细介绍了如何使用DELPHI编程语言来启用和禁用网卡驱动,实现网络的断开与连接。介绍了相关Windows API函数的使用,并提供了一个自定义组件的创建方法,用于封装网络适配器的管理功能。还讨论了如何通过用户界面组件来实现对网络适配器的控制,以及相关的权限问题。 ...

weixin_42168902的博客 938

一个可以禁用USB存储设备的程序(SetupAPI的使用方法)

一个可以禁用USB存储设备的程序(SetupAPI的使用方法)                                                                                 作者:WY.lslrt                                                                             

8874

获取网速 GetIfTable SetupDixxx 区分物理网卡

自己实现的区分物理网卡并获取其网速的程序 没有实现hook其他进程 获得网速的功能

在程序中移除U盘

转载请标明是引用于 http://blog.youkuaiyun.com/chenyujing1234  欢迎大家拍砖   代码下载(VS2008编译器):http://www.rayfile.com/zh-cn/files/4e98c7cf-25c4-11e2-aeea-0015c55db73d/ 一、实现方法 说明: cr = CM_Request_Device_Eject( DeviceIn

chenyujing1234的专栏 6952

BIDS数据存储格式介绍与dcm2bids安装与使用

BIDS格式&dcm2bids安装与使用

machinelearning_er的博客 7319

Python 上位机开发

首先,什么是上位机?上位机通常是指可以与下位机(如单片机、传感器等硬件设备)进行通信和交互,实现数据采集、控制指令发送以及数据处理和展示的计算机程序。 Python 作为一种高级编程语言,在开发上位机方面具有诸多优势。它拥有丰富的第三方库,使得开发过程变得相对简单和高效。

weixin_46807151的博客 4303

禁用启用网卡

//   Hardware.cpp   :   Implementation   of   CHardware#include   "stdafx.h"#include   "NetCA_HARDWARE.h"#include   "Hardware.h"#define   UnknownDevice   TEXT("")//////////////////////////////////////

萤火虫之光 1972

ray.tune调参学习笔记0:调参基本流程

本篇总结python中使用tune调参的整体流程

Mr_111000的专栏 2623

网卡设备驱动之虚拟网卡

网卡驱动程序框架 网卡驱动程序“收发功能”: 只要把上层的数据发给网卡,从网卡来的数据构造成包给上层即可。网卡只需要 “socket”编程,不需要打开某设备。 驱动程序都是以面向对象的思想写的,都有相关的结构体。 编程步骤 1,分配某结构体:net_device 2,设置结构体。 ①,提供一个发包函数:hard_start_xmit() ②,提供收包的功能 : net_interrupt(int ...

qq_42230338的博客 1823

AHB不对称半桥反激电路设计(三)主要器件参数规格计算

本文介绍了AHB拓扑变压器的设计步骤与核心参数计算,包括主控芯片选择、工作原理分析及参数计算。作者选择DK87XXD集成MOS方案,详细阐述了输入电压范围、反射电压限定、匝比计算、工作频率设定、原副边电流值、电感量计算、磁芯选择、匝数计算、谐振电容设计等关键步骤。通过公式推导与实例计算,展示了150W电源的变压器设计过程,最终确定匝比5.5、原边22匝、副边4匝、电感量200uH等参数。文章还讨论了谐振电容与漏感的关系,为后续调试提供理论基础。该设计方法结合理论分析与工程实践,适用于AHB拓扑电源开发。

【Simon】的博客 3339

LTSPICE仿真电路:(二十八)三极管厄利电压与输出特性曲线深度解析

本文深入解析了LTSPICE仿真电路中三极管的厄利电压与输出特性曲线,详细介绍了厄利电压的物理意义、仿真设置及实际应用。通过伏安特性曲线和厄利电压的分析,帮助读者理解三极管放大性能的关键参数,并提供了电路设计中的优化方案和故障排查技巧。

weixin_26899659的博客 149

2.8-局域网查找设备时有虚拟网卡干扰的编程处理方法(网络UDP广播包发不出去)

一、遇到问题的描述 在开发“局域网查找设备”这个功能时候,一般都会使用局域网广播技术。常见的问题时在编写程序的时候在自己电脑上使用没有问题,但是在用户或测试机器上,出现“无法查找到设备的问题”。使用WireShark软件监听局域网,可以发现是在自己软件查找设备的时候,没有正常发送出去局域网广播。 二、找到问题的真正原因 初步找到原因 既然是广播没有发送出去,那就开始调试与测试,经过在多台电脑上对...

Robert Zhang 2007

级联H桥构网型储能SVG系统设计与VSG控制策略研究

随着新能源渗透率不断提高,电力系统惯量和阻尼水平持续下降,传统跟网型控制策略在弱电网条件下的稳定性面临严峻挑战。构网型控制以电压源方式运行,能够为系统提供惯量和频率支撑,成为当前研究热点。本文针对10kV/10Mvar级联H桥构网型储能静止无功发生器(SVG),采用星形连接拓扑结构,设计了基于虚拟同步发电机(VSG)的构网型控制策略。文章从主电路拓扑设计、数学建模、VSG控制策略设计、调制策略、直流电压平衡控制、系统参数设计、仿真建模和硬件实现等八个方面展开系统论述,给出了完整的Simulink仿真模型~~

huanghm88的专栏 354

linux下多网卡加组播,linux 在多网卡下的设备的UDP 组播问题总结

参考博文:解决接收不到组播包的问题 - Justlinux2010的专栏 - 博客频道 - youkuaiyun.comhttp://blog.youkuaiyun.com/justlinux2010/article/details/111403831、问题描述实现在多网卡设备上发送组播消息,实现设备搜索,并接收通过组播返回的搜索信息。设备为多网卡nvr,有一个常规网卡和一个PPPOE口;在进行发送组播搜索ipc时,只可...

weixin_33622555的博客 2381

概率质量函数(PMF)、概率密度函数(PDF)、累积分布函数(CDF)

1.概率分布函数(Probability Distribution Functions) 笔记来源:Probability Distribution Functions (PMF, PDF, CDF) 1.1 离散型:PMF和CDF 1.2 连续型:PDF和CDF 累积分布函数的导数 === 概率密度函数的函数值 dF(x)dx=f(x) \frac{dF(x)}{dx}=f(x) dxdF(x)​=f(x) 概率密度函数与 xxx 轴围成的面积 === 累积分布函数的函数值 ∫−∞xf(x)d

一个搬运知识的笨小孩 3万+

Tesla v100 4张显卡组装机安装vllm和ollama在Ubuntu系统上的安装---AI大模型系统从零开始0032

本文提供Ubuntu22.04系统下vLLM的完整安装指南,适配4×32G Tesla显卡的单机4卡张量并行部署。教程包含:1)硬件要求(Ubuntu22.04、NVIDIA驱动≥535、CUDA12.1+);2)NVIDIA驱动自动安装方法;3)Python3.10虚拟环境配置;4)vLLM官方预编译包一键安装;5)单机4卡启动Qwen3.6-27B模型的完整参数说明(含FP8量化、多进程并行等关键配置)。文末附分布式部署的Ray集群方案参考链接,适用于多机8卡场景。

添柴程序猿的专栏 187

网卡

网卡又被称为网络适配器或网络接口卡NIC(Network Interface Card),被设计用来允许计算机在计算机网络上进行通讯的计算机硬件;是构成计算机网络系统中最基本、最重要、必不可少的连接设备,计算机依靠网卡接入网络。

笔落_惊风雨的博客 3126

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数据从网卡到应用的过程

欢迎访问陈同学博客原文 最近看的《网络是怎样连接的》非常有趣,真的是 “计算机网络概论” 图解趣味版。 本文写写数据从网卡到应用的过程,内容与图片很多整理自《网络是怎样连接的》、《Tomcat内核设计与剖析》,有的图片因清晰度不够我进行了重绘。 总览 本文围绕这张图从下至上展开。假设一个HTTP请求的数据到达网卡,那数据是如何被层层处理并到达应用呢? 网卡 网卡(Network Adapte...

码代码的陈同学 3523

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

科普篇 |什么是网卡?相比传统网卡,智能网卡(SmartNIC)有何特点?

什么是网卡?网卡,全称为网络接口卡(Network Interface Card,简称NIC),是计算机硬件中的一种设备,用于将计算机接入局域网(LAN)。它通过插在计算机主板的总线插槽中,负责将用户要传递的数据转换为网络设备能够识别的格式,并通过网络介质进行传输。网卡的基本功能包括数据的封装和解封、地址解析、数据校验等。什么是智能网卡?智能网卡(SmartNIC),也称为智能网络适配器,是在传统...

ICT系统集成实战派博主|深耕数通/云计算/网络安全/系统集成领域,聚焦华为/思科/华三/锐捷设备配置、项目排障与落地实战。 3208

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

如何编程实现启用禁用网卡

/*****************************************************************************演示如何编程实现启用禁用网卡Mady By ZwelL2004.7.29zwell@sohu.com************************************************************************...

javatoyou 617
上一篇: 对抗packer-AntiMida 1.0
下一篇: A tool to generate an NT KMD framework in C- QUICKSYS
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值