SNMP 协议实战:从基础概念到高效开发指南
1. 从零开始认识SNMP它到底是什么能帮你做什么如果你管理过机房或者负责过几台服务器那你大概率听过SNMP这个词。很多朋友第一次接触它都是在一些监控软件的配置里看到要填一个叫“团体名”的东西或者是一串像天书一样的数字“1.3.6.1.2.1.1.1.0”。然后照着教程配完发现设备的状态、流量、CPU使用率就神奇地出现在监控大屏上了。这背后默默工作的就是SNMP协议。SNMP全称是简单网络管理协议。我特别喜欢它的名字——“简单”。它设计之初的目标就是让网络管理这件事变得足够简单和标准化。你可以把它想象成一个“设备信息查询与遥控”的通用语言。无论你管理的是思科的路由器、华为的交换机、戴尔的服务器还是某台网络打印机只要它支持SNMP你就可以用同一种“语言”去问它“嘿你CPU现在忙不忙”“你的第三个网口流量是多少”“把你的主机名改成‘核心交换机-01’”。这样一来我们就不用为每一种设备都去学习一套专用的命令行或者管理界面大大降低了运维的复杂度。那么谁在用SNMP呢它的应用场景其实非常广泛。最典型的就是集中监控系统比如Zabbix、Prometheus通过SNMP Exporter、SolarWinds这些它们都是通过定期向设备发送SNMP查询来收集性能数据、生成图表和告警。其次是在自动化运维中比如用脚本批量修改一批交换机的VLAN配置。甚至在**物联网IoT**领域很多智能设备也内置了SNMP代理方便被统一管理。所以无论你是运维工程师、开发需要开发监控或管理平台还是对网络自动化感兴趣的技术爱好者掌握SNMP都是一项非常实用的技能。简单来说SNMP就是一个让你能用一套标准方法去“读”和“写”网络上各种设备信息的工具。它不负责传输文件也不负责建立连接它的核心任务就是管理信息。接下来我们就深入它的内部看看这套机制是怎么运转起来的。2. 深入SNMP核心架构、工作模式与信息库要玩转SNMP开发光知道它能干啥还不够得搞清楚它的“游戏规则”。这套规则主要围绕三个核心概念管理者-代理架构、几种基本操作以及管理信息库MIB。理解了这三块你就能明白数据是怎么流动的以及你写的每一行代码到底在跟谁对话、在操作什么。2.1 管理者与代理经典的“问答”模型SNMP采用的是非常直观的客户端-服务器模型在这里我们叫它管理者Manager和代理Agent。代理Agent它是常驻在被管理设备里的一个“服务”或“守护进程”。你可以把它想象成设备的一个“信息管家”。这个管家手里有一本详细的“设备档案”也就是MIB里面记录了设备的所有可管理信息比如接口列表、CPU负载、内存大小、系统运行时间等等。代理的职责就是守着这本档案随时准备应答管理者的查询或者按照管理者的指令修改档案里的某些条目。几乎所有的网络设备路由器、交换机、防火墙和服务器操作系统Linux的snmpdWindows的SNMP Service都内置或可以安装SNMP代理。管理者Manager这就是我们通常要开发的程序角色。它运行在我们的监控服务器或者运维工作站上是一个主动的“询问者”和“指挥者”。管理者会向指定的设备代理发起请求比如“请把系统描述发给我”或者“请把端口1的状态设为关闭”。然后它接收代理的回复并对数据进行处理、存储或展示。它们之间的通信默认使用UDP的161端口代理接收请求和162端口代理发送陷阱给管理者。用UDP是因为这些管理消息通常都很短小追求快速和低开销。2.2 五种核心操作不只是“读”和“写”很多人刚开始以为SNMP只有“Get”读和“Set”写两种操作其实它有五种基本操作这让你能更灵活地与设备交互GetRequest最常用的操作。管理者向代理请求一个或多个特定OID的值。比如“告诉我OID为1.3.6.1.2.1.1.5.0系统名称的值是什么”GetNextRequest这个操作非常关键用于“遍历”或“浏览”MIB树。你给它一个OID它返回MIB树中按字典序“下一个”OID的值。这是实现“获取一张表的所有行”比如所有接口信息的基础。SetRequest管理者用这个操作来修改代理MIB中某个可写的对象值。这是实现配置管理的核心使用时需要谨慎并且代理端通常有写权限控制。GetBulkRequestSNMPv2c/v3引入可以看作是GetNextRequest的批量高效版。它能一次性请求获取多个连续的OID值极大地减少了在获取大量数据比如整张ARP表时网络往返的次数提升了效率。Trap / InformRequest这是由代理主动发起的通知。当设备上发生某些预定义的事件时比如接口宕机、温度过高、用户登录失败代理会主动向管理者发送一条Trap消息。InformRequest是SNMPv2c/v3中增强的Trap它要求管理者必须回复一个确认确保通知送达更可靠。在实际开发中Get、GetNext/GetBulk和Trap接收是最常打交道的部分。2.3 MIB与OID信息的“地图”与“门牌号”这是SNMP学习曲线中最陡峭但也最重要的一部分。你可以把全世界的网络设备信息想象成一棵巨大的、不断生长的树这棵树就是MIB管理信息库。它定义了所有可以被管理对象的类型、状态、含义以及它们之间的关系。这棵树是标准化的由国际组织定义。而OID对象标识符就是这棵树上每一个节点即每一个可管理对象的全球唯一“身份证号码”。它是一个用点分隔的数字序列从树的根节点一路指向目标对象。例如1.3.6.1.2.1.1.1.0这个OID它的路径解读是1iso1.3org1.3.6dod1.3.6.1internet1.3.6.1.2mgmt1.3.6.1.2.1mib-2—— 这是最常用的一组标准管理对象1.3.6.1.2.1.1system—— 系统组1.3.6.1.2.1.1.1sysDescr—— 系统描述对象1.3.6.1.2.1.1.1.0—— 表示sysDescr这个标量对象的实例通常标量对象实例用.0表示所以当你请求这个OID时你就是在问设备“请告诉我你的系统描述信息”。设备会回复一段字符串比如“Cisco IOS Software, C3560CX Software...”。MIB文件通常是.mib或.txt文件就是这棵树的“地图说明书”。它用文本方式定义了OID树的结构、每个节点的名字、数据类型整数、字符串、计数器等和描述。开发时我们不需要记住所有OID但需要学会查阅MIB文件找到我们需要的对象名然后通过库函数将其转换为OID。很多集成开发环境IDE或SNMP浏览器工具都能加载MIB文件让你通过名称如sysDescr.0而不是纯数字来操作这方便多了。3. 动手前的准备版本选择、开发环境与安全考量在开始敲代码之前有几件重要的事情需要确定好。这就像出门旅行前要选好交通工具、查好天气一样能让你后面的开发之路更顺畅少踩坑。3.1 协议版本v1/v2c还是v3安全是首要考虑SNMP有三个主要版本选择哪一个很大程度上取决于你的网络环境对安全的要求。SNMPv1这是元老级版本现在基本已经退役了。它使用一种非常简单的认证方式——团体名Community String。你可以把它理解成一个“密码”但它是明文传输的。常见的默认团体名是public只读和private读写。因为没有任何加密攻击者很容易在网络上窃听到这个团体名然后伪装成管理者来读取甚至修改你的设备配置。除非在绝对封闭、安全的测试环境否则不建议使用。SNMPv2c你可以把它看作是v1的功能增强版。它增加了GetBulkRequest等高效操作错误处理也更丰富。但是它在安全性上没有任何改进依然使用明文的团体名认证。由于它功能实用、配置简单在大量内部监控场景比如监控服务器性能指标中仍然被广泛使用前提是你要确保监控网络本身是隔离或可信的。SNMPv3这是目前强烈推荐在生产环境中使用的版本。它引入了完整的基于用户的安全模型USM提供了三种关键的安全特性认证Authentication验证消息来源的真实性确保不是伪造的。通常使用SHA或MD5算法。加密Privacy/Encryption对传输的数据进行加密防止窃听。通常使用AES或DES算法。访问控制可以精细控制不同用户能访问哪些MIB对象是只读还是可写。 SNMPv3的配置比v2c复杂一些需要定义用户名、认证密码、加密密码等但这是值得的。它能有效防止信息泄露和未授权访问。我的经验是在测试和内部非敏感监控中用v2c图个方便但凡涉及设备配置或生产环境监控尤其是数据需要跨越非完全信任的网络时务必使用SNMPv3。很多安全扫描软件会把使用v1/v2c默认团体名的设备列为高风险项。3.2 搭建你的开发环境语言与工具选择SNMP开发对操作系统没有特殊要求Windows、Linux、macOS都可以。核心是选择一个你熟悉的编程语言和对应的成熟开发库。Python pysnmp这是快速上手和原型开发的首选。Python语法简洁pysnmp库的API设计得非常人性化同步和异步操作都支持。对于写监控脚本、采集数据、做自动化测试来说效率极高。你可以用pip install pysnmp轻松安装。Java snmp4j如果你在开发企业级、高并发的网络管理平台NMSJava生态是一个稳健的选择。snmp4j库功能强大且成熟对SNMPv3的支持非常完善。它更适合构建需要长期运行、稳定可靠的后台服务。其他语言像Go、C/C、C#等也都有相应的SNMP库你可以根据项目现有的技术栈来选择。开发工具就是你的常用IDE比如PyCharm、VS Code、IntelliJ IDEA、Eclipse等。我强烈建议在IDE里安装能查看MIB文件的插件或者准备一个独立的MIB浏览器工具如iReasoning MIB Browser它能让你直观地浏览设备支持的MIB树执行临时的Get/Set操作来验证这对开发调试帮助巨大。3.3 获取并理解MIB文件在开发针对特定设备如某型号交换机的功能时你经常需要设备厂商提供的私有MIB文件。这些文件定义了该设备特有的管理对象比如风扇状态、电源电压、特定硬件错误码等。你需要从设备厂商的官网下载这些MIB文件并将其导入到你的MIB浏览器或开发环境中。这样你才能知道该用哪个OID去查询你想要的信息。理解MIB文件的结构需要一点时间。一个MIB文件里会包含很多OBJECT-TYPE定义每个定义描述了对象的名称、语法类型、访问权限read-only, read-write等、状态current, deprecated和描述。多读几个标准MIB如IF-MIB用于接口信息HOST-RESOURCES-MIB用于主机资源的文件你会很快熟悉这种模式。4. 实战开发四步走从需求到代码的完整流程理论准备就绪现在我们进入实战环节。开发一个SNMP功能模块通常遵循一个清晰的流程。我会结合我踩过的一些坑把这个过程拆解给你看。4.1 第一步明确需求定义“要什么”这一步看似简单却决定了后续所有工作的方向。不要一上来就想着写代码先花时间把问题定义清楚。场景你是要做一个服务器CPU使用率的监控采集器还是要批量配置交换机的SNMP只读团体名或者是接收路由器发送的“链路断开”陷阱并触发告警目标设备你要管理的是Linux服务器、Windows主机、思科交换机还是华为防火墙不同设备的SNMP代理实现、支持的MIB和OID可能有所不同。具体信息你需要获取哪些精确的OID例如监控服务器负载你可能需要1.3.6.1.4.1.2021.10.1.3.1UCD-SNMP-MIB中的laLoad.1表示1分钟平均负载。如果你不确定就需要去查设备的MIB文档或用MIB浏览器去探索。操作类型主要是读Get还是需要写Set或者是监听Trap把这些写成文档或注释。例如“需求开发一个Python脚本每5分钟采集一次IP为192.168.1.1的交换机上所有端口的入方向流量ifInOctets并写入数据库。使用SNMPv2c团体名为internal_monitor。”4.2 第二步设计通信与处理逻辑根据需求设计你的程序结构。是简单的单次查询脚本还是一个长期运行的服务单次/周期性任务比如数据采集。逻辑是建立连接 - 发送请求 - 解析响应 - 处理数据存储、计算- 关闭连接/等待下次循环。事件驱动服务比如Trap接收器。逻辑是启动一个守护进程在162端口上监听 - 收到Trap报文 - 解析Trap中的OID和值 - 根据预定义的规则匹配并触发动作发邮件、调用API。错误处理网络超时怎么办认证失败怎么办代理返回“noSuchName”错误OID不存在怎么办必须在代码中考虑这些异常情况并做好日志记录和重试机制。我遇到过因为设备繁忙导致SNMP请求超时如果没有重试和报警就会造成数据缺失。4.3 第三步编写与调试代码以Python pysnmp为例现在让我们用代码把上面的想法实现出来。这里我给出比基础示例更丰富、更贴近实战的代码片段。场景1安全地获取多个系统信息使用SNMPv3from pysnmp.hlapi import * from datetime import datetime def get_device_info_v3(ip, username, auth_key, priv_key): 使用SNMPv3获取设备基本信息 # 配置SNMPv3用户参数使用SHA认证和AES加密 auth_protocol usmHMACSHAAuthProtocol # 认证协议SHA priv_protocol usmAesCfb128Protocol # 加密协议AES-128 user_data UsmUserData( userNameusername, authKeyauth_key, authProtocolauth_protocol, privKeypriv_key, privProtocolpriv_protocol ) # 定义要获取的OID列表系统描述、运行时间、联系人、主机名 oids [ ObjectType(ObjectIdentity(1.3.6.1.2.1.1.1.0)), # sysDescr ObjectType(ObjectIdentity(1.3.6.1.2.1.1.3.0)), # sysUpTime (单位百分之一秒) ObjectType(ObjectIdentity(1.3.6.1.2.1.1.4.0)), # sysContact ObjectType(ObjectIdentity(1.3.6.1.2.1.1.5.0)), # sysName ] errorIndication, errorStatus, errorIndex, varBinds next( getCmd(SnmpEngine(), user_data, UdpTransportTarget((ip, 161), timeout3, retries2), # 设置超时和重试 ContextData(), *oids) # 一次性发送多个OID请求 ) if errorIndication: print(f[{datetime.now()}] 错误指示: {errorIndication}) return elif errorStatus: print(f[{datetime.now()}] 响应错误: {errorStatus.prettyPrint()} at {errorIndex}) return else: print(f[{datetime.now()}] 成功获取设备 {ip} 信息:) for varBind in varBinds: oid_str varBind[0].prettyPrint() value varBind[1] # 对sysUpTime进行友好格式化 if 1.3.6.1.2.1.1.3.0 in oid_str: # 将百分之一秒转换为天、时、分、秒 hundredths int(value) seconds hundredths // 100 days, remainder divmod(seconds, 86400) hours, remainder divmod(remainder, 3600) minutes, seconds divmod(remainder, 60) print(f - 系统运行时间: {days}天 {hours}小时 {minutes}分钟 {seconds}秒) else: print(f - {oid_str}: {value}) # 使用示例 if __name__ __main__: # 替换为你的设备信息和v3凭据 get_device_info_v3( ip192.168.1.1, usernamemy_snmp_user, auth_keyMyAuthPass123, priv_keyMyPrivPass456 )场景2高效遍历接口表使用GetBulk获取单个值用Get但获取一张表的所有行比如所有网络接口的信息用GetBulk是标准做法它能减少网络往返次数。from pysnmp.hlapi import * def get_interfaces_table(ip, community): 使用SNMPv2c GetBulk操作获取接口表的主要信息 iterator bulkCmd( SnmpEngine(), CommunityData(community, mpModel1), # mpModel1 表示v2c UdpTransportTarget((ip, 161)), ContextData(), 0, # nonRepeaters: 不重复的OID数通常设为0 10, # maxRepetitions: 一次请求希望返回的最大后续OID数可调整 ObjectType(ObjectIdentity(IF-MIB, ifDescr)), # 从接口描述开始遍历 lexicographicModeFalse # 设置为False表示到达表末尾时停止 ) interfaces [] for errorIndication, errorStatus, errorIndex, varBinds in iterator: if errorIndication: print(f遍历错误: {errorIndication}) break elif errorStatus: print(f响应错误: {errorStatus.prettyPrint()} at {errorIndex}) break else: # varBinds可能包含多个变量绑定对应同一行的多个列 # 这里简单打印实际应用中可解析并存储到结构体中 for varBind in varBinds: oid_parts varBind[0].prettyPrint().split(.) # 提取接口索引通常是OID的最后一部分数字 if_index oid_parts[-1] if oid_parts[-1].isdigit() else N/A print(f接口索引 {if_index}: {varBind[0].getLabel()} {varBind[1]}) # 你可以在这里判断如果OID已经超出ifTable的范围可以主动break print(接口表遍历结束。) if __name__ __main__: get_interfaces_table(192.168.1.1, public)调试技巧先用工具验证在写代码前用MIB浏览器或命令行工具如Linux的snmpwalk先手动测试一下确保你的OID、团体名/用户信息是正确的。开启调试日志pysnmp库可以设置调试输出能看到收发的原始报文对排查复杂问题非常有帮助。处理超时和重试网络不稳定是常事务必在UdpTransportTarget中设置合理的timeout和retries参数。注意数据类型SNMP返回的数据类型如Counter32,Gauge32,IpAddress需要正确转换。pysnmp通常会帮你处理好但自己了解一下没坏处。4.4 第四步进阶技巧与性能优化当你的脚本开始稳定工作后你可能会考虑更高级的应用和优化。异步操作如果你需要同时监控成百上千台设备同步的getCmd会非常慢因为它是串行等待每台设备的响应。pysnmp提供了异步接口sendNotification等或者你可以结合Python的asyncio和多线程/多进程库实现并发采集将采集时间从几分钟缩短到几秒钟。数据持久化与告警采集到的数据可以写入时序数据库如InfluxDB、Prometheus方便绘图也可以写入关系型数据库。更重要的是设置告警逻辑比如当ifOperStatus接口操作状态从up(1)变为down(2)时立即触发一个告警事件。开发Trap接收器让我们的程序不仅能“问”还能“听”。下面是一个简单的Trap接收服务示例from pysnmp.carrier.asyncore.dispatch import AsyncoreDispatcher from pysnmp.carrier.asyncore.dgram import udp from pysnmp.entity import engine, config from pysnmp.entity.rfc3413 import ntfrcv from pysnmp.proto import api import threading def trap_receiver_listener(snmp_engine, listen_address, port162): 启动一个SNMP Trap接收器 # 配置传输层在UDP端口上监听 config.addTransport( snmp_engine, udp.domainName (1,), udp.UdpTransport().openServerMode((listen_address, port)) ) # 配置接收Trap的社区名v1/v2c或用户v3。这里允许接收任何v2c Trap安全环境测试用。 # 生产环境应配置特定的社区名或v3用户。 config.addV1System(snmp_engine, my-area, public) # 仅为示例public不应用于生产 def cbFun(snmp_engine, state_reference, context_engine_id, context_name, var_binds, cb_ctx): 收到Trap时的回调函数 print(f\n 收到Trap通知 ) # 解析发送者地址等信息 exec_context snmp_engine.observer.getExecutionContext( rfc3412.receiveMessage:request ) print(f来自: {exec_context[transportAddress]}) # 打印Trap中的所有变量绑定 for name, val in var_binds: print(f{name.prettyPrint()} {val.prettyPrint()}) print( Trap结束 \n) # 注册回调函数 ntfrcv.NotificationReceiver(snmp_engine, cbFun) snmp_engine.transportDispatcher.jobStarted(1) # 启动任务 print(fTrap接收器已启动正在监听 {listen_address}:{port} ...) try: snmp_engine.transportDispatcher.runDispatcher() # 进入事件循环 except KeyboardInterrupt: print(\n正在停止接收器...) snmp_engine.transportDispatcher.closeDispatcher() if __name__ __main__: # 创建SNMP引擎 snmp_engine engine.SnmpEngine() # 在后台线程中运行监听器防止阻塞 listener_thread threading.Thread( targettrap_receiver_listener, args(snmp_engine, 0.0.0.0, 162), # 监听所有接口的162端口 daemonTrue ) listener_thread.start() print(主线程可继续执行其他任务。按 CtrlC 停止程序。) try: listener_thread.join() # 等待监听线程结束 except KeyboardInterrupt: pass这个Trap接收器启动后当网络设备发生故障并发送Trap时你的程序就能实时捕获并处理这些信息实现主动告警。错误处理与日志将打印语句替换为正式的日志模块如logging记录信息、警告和错误。对不同的SNMP错误类型如noSuchName,genError,timeout进行区分处理并加入重试机制。使用MIB解析不要硬编码OID数字。使用pysnmp的ObjectIdentity时可以传入MIB对象名如IF-MIB, ifDescr库会自动加载MIB文件进行转换使代码更易读、易维护。开发SNMP功能是一个从“能用”到“好用”再到“稳定高效”的迭代过程。先从一个小而具体的需求开始实现它测试它然后逐步增加功能和优化代码。在这个过程中多查阅官方库文档、多使用MIB浏览器进行探索你会积累下宝贵的经验。记住网络环境是复杂的你的代码需要有足够的健壮性来处理各种异常情况。

相关新闻

科研党收藏!AI论文网站 千笔 VS 云笔AI,专科生写作神器!

科研党收藏!AI论文网站 千笔 VS 云笔AI,专科生写作神器!

随着人工智能技术的迅猛迭代与普及,AI辅助写作工具已逐步渗透到高校学术写作场景中,成为专科生、本科生、研究生完成毕业论文不可或缺的辅助手段。越来越多面临毕业论文压力的学生,开始依赖各类AI工具简化写作流程、提升创作效率。但与此同时…

2026/7/5 3:07:57 阅读更多 →
TranslucentTB透明任务栏修复全攻略:从故障排查到完美运行

TranslucentTB透明任务栏修复全攻略:从故障排查到完美运行

TranslucentTB透明任务栏修复全攻略:从故障排查到完美运行 【免费下载链接】TranslucentTB 项目地址: https://gitcode.com/gh_mirrors/tra/TranslucentTB 问题定位:当透明任务栏梦想遭遇现实阻碍 想象一下这样的场景:你刚刚完成了W…

2026/7/3 9:28:31 阅读更多 →
OFA图文蕴含模型实战教程:构建图文匹配效果评估Dashboard

OFA图文蕴含模型实战教程:构建图文匹配效果评估Dashboard

OFA图文蕴含模型实战教程:构建图文匹配效果评估Dashboard 1. 项目概述与核心价值 今天我们来聊聊一个特别实用的技术——如何用OFA模型构建一个图文匹配效果评估系统。如果你曾经需要手动检查图片和文字是否匹配,或者想要自动化这个流程,那…

2026/7/4 7:27:48 阅读更多 →

最新新闻

智能汽车板级接口与存储系统核心技术解析

智能汽车板级接口与存储系统核心技术解析

1. 智能汽车板级接口技术全景解析 作为一名在汽车电子领域深耕多年的工程师,我见证了车载电子系统从简单的ECU控制到如今复杂域控制器的演进历程。现代智能汽车的"大脑"——域控制器内部,各类芯片间的通信架构设计直接决定了系统性能上限。让我…

2026/7/5 10:37:10 阅读更多 →
AI服务合规网关实战:GDPR日志脱敏、国密SM4加密与审计追踪

AI服务合规网关实战:GDPR日志脱敏、国密SM4加密与审计追踪

1. 项目概述:一场迫在眉睫的合规风暴最近在排查一个线上AI服务的问题时,我遇到了一个典型的报错:cc switch deepseek unexpected status 502 bad gateway: unknown error, url: ht...。这个错误本身指向的是服务网关的切换或配置问题&#xf…

2026/7/5 10:35:10 阅读更多 →
光伏逆变器LVRT技术:Boost+NPC拓扑设计与控制策略

光伏逆变器LVRT技术:Boost+NPC拓扑设计与控制策略

1. 光伏逆变器低电压穿越技术概述 光伏发电系统在电网电压骤降时能否保持并网运行,直接关系到整个电力系统的稳定性。低电压穿越(LVRT)技术就是让逆变器在电网电压跌落时,不仅不脱网还能向电网提供无功功率支撑的关键能力。传统方案中,当检测…

2026/7/5 10:33:10 阅读更多 →
Allen Bradley 80190-378-51/12控制器板功能与应用解析

Allen Bradley 80190-378-51/12控制器板功能与应用解析

1. Allen Bradley 80190-378-51/12控制器板概述Allen Bradley 80190-378-51/12控制器板是罗克韦尔自动化旗下Allen-Bradley品牌推出的一款工业级控制电路板。作为自动化控制系统中的核心组件,它主要负责信号采集、逻辑运算和设备控制等功能。这款控制器板采用成熟的…

2026/7/5 10:31:10 阅读更多 →
解锁网易云音乐加密格式:ncmdump工具的全面应用指南

解锁网易云音乐加密格式:ncmdump工具的全面应用指南

解锁网易云音乐加密格式:ncmdump工具的全面应用指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经遇到过这样的困扰:在网易云音乐下载的歌曲只能在特定应用内播放,无法在其他设备或播…

2026/7/5 10:31:10 阅读更多 →
I型NPC三电平逆变器SVPWM仿真设计与控制策略

I型NPC三电平逆变器SVPWM仿真设计与控制策略

1. I型NPC三电平逆变器SVPWM仿真设计概述在电力电子领域,三电平逆变器因其输出电压谐波含量低、开关损耗小等优势,已成为中高压大功率应用的首选拓扑结构。I型NPC(Neutral Point Clamped)三电平逆变器通过钳位二极管将直流母线中点…

2026/7/5 10:29:09 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻