计算机网络管理- SNMP协议报文和报文格式分析,SNMP PDU分析

news2024/11/24 2:07:57

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜

✏️write in front✏️
📝个人主页:陈丹宇jmu
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
🙉联系作者🙈by QQ:813942269🐧
🌈致亲爱的读者:很高兴你能看到我的文章,希望我的文章可以帮助到你,祝万事顺意🏳️‍🌈
✉️少年不惧岁月长,彼方尚有荣光在 🏆

📋笔记目录

🎖️验证SNMP数据包

🥇SNMP的报文分析

🥈SNMP报文格式分析

🏅SNMP PDU分析

🚩结尾


🎖️验证SNMP数据包

使用snmputilg发送SNMP数据包; 使用wireshark抓包;使用netstat -an查看代理站TCP/UDP连接表,分析并验证SNMP协议的工作过程;

如下图所示,SNMP协议通信涉及两个端口号:UDP端口号161和UDP端口号162。

其中,UDP端口号161用于SNMP代理向SNMP管理程序发送信息,也称为SNMP读端口,SNMP管理程序通过该端口获取被管理设备的状态信息;UDP端口号162用于SNMP管理程序向SNMP代理发送信息,也称为SNMP写端口,SNMP管理程序通过该端口向被管理设备发送控制和配置信息。

需要注意的是,SNMP协议使用的是UDP协议,不同于TCP协议,因此设计的端口号不同,其目的是使SNMP通信更加高效,减少网络传输的负担。

使用netstat -an查看代理站TCP/UDP连接表

对于表项的理解:

SNMP协议是基于UDP协议传输的,而UDP协议是无连接的,只是监听,并没有因为数据包的发送就成登记一条连接。


🥇SNMP的报文分析

使用 wireshark 抓包,过滤条件直接设为“snmp”,成功抓到包。

下图所示的为一次SNMP报文的交互,从抓包的结果可以看出SNMP服务采用的是C / S模式,即请求 / 响应的机制实现SNMP报文的交互。

  1. 上图中圆圈一指示的是SNMP一次管理的过程使用的PDU,即服务器端(管理站)发出请求报文(get-request),客户端(网管设备的代理系统)对管理站的请求做出响应并通过响应报文(get-response)将网管信息返回给管理站。
  2. 上图中圆圈一指示的是通过SNMP所需要获取的管理对象的OID。OID为.1.3.6.1.2.1.2.2.1.4

通过MIB Browser所给出的MIB对象实例“ifMtu”具体的使用说明如下图所示:

该对象实例具体应用在:

接口上可以发送或接收的最大数据报的大小,以八字节为单位指定。用于传输网络数据报的接口,该接口可以发送的最大网络数据报大小。

 报文发送和接收过程分析

当 SNMP 协议实体发送报文时,首先按照 ASN.1 的格式构造 PDU 交给认证进程。接着认证进程检查源和目标之间是否可以通信,如果检查通过则把有关信息(版本号、团体名、PDU)组装成报文。最后经过 BER 编码,交传输实体发送出去。

当一个 SNMP 协议实体接收到报文时,需要执行封装报文的逆过程。首先按照 BER 编码恢复 ASN.1 报文,然后对报文进行语法分析、验证版本号和认证信息等。如果通过分析和验证,则离出协议数据单元,并进行语法分析。在认证检验失败时可以生成一个陷入报文,向发送站报告通信异常情况并丢弃报文.


🥈SNMP报文格式分析

注明:下面所示的是SNMPv1版本的报文格式

 报文中每个字段的含义如下:

  • 版本(version):版本字段,写入版本字段的是版本号减1。例如,SNMP(即 SNMPv1)应写入 0。
  • 共同体(community):字符串形式,作为网络管理站 NMS 和 SNMP 代理之间的明文口令,默认为 public。
  • PDU 类型:SNMP 协议的操作类型。
    1. 值为 0,表示 get-request 操作;
    2. 值为 1,表示 get-next-request 操作;
    3. 值为 2,表示 get-response 操作;
    4. 值为 3,表示 set-request 操作;
    5. 值为 7,表示 informRequest 操作。
  • 请求标识(request-id):管理站 NMS 设置的一个整数值。SNMP 代理在发送 get-response 报文时也要返回此请求标识符。
  • 差错状态(error status):整数,由 SNMP 代理进行标注,指明有错误发生。可用的值及含义如下表所示。

  • 差错索引(error-index):当出现 noSuchName、badValue 或 readOnly 的错误时,由代理进程在回答时设置的一个整数。该数值指明引起错误的变量在变量列表中的偏移位置。
  • 名称(Object name):MIB 管理信息库中的OID。
  • 值(Value):OID对应的值。

🏅SNMP PDU分析

PDU 一共有 GetRequest-PDU、GetNextRequest-PDU、GetResponse-PDU、SetRequest-PDU、Trap-PDU 五种,这些类型在 RFC1157 的第 4 节Protocol Specification 有给出。

 RFC1157文档(SNMPv1协议的规范文件),查看SNMPv1一共有5种类型的PDU,ASN.1(抽象语法表示)如下图所示:

 通过对于《计算机网络管理》第四章有关内容的学习,我学习到了:

  1. 管理站发出的 3 种请求报文GetRequest、GetNextRequest和 SetRequest 采用的格式是一样的。
  2. 代理的应答报文格式只有一种 GetResponsePDU。
  3. 另外,还有一个Trap操作。Trap 操作相当于代理系统发送事件报告,因此 Trap 报文由代理发给管理站,不需要应答。

下面对SNMPv1版本的包结构进行分析:

根据TLVT的编码规则,解释下图SNMP协议中version的编码依据。

答:

  1. RFC1157文档(SNMPv1协议的规范文件),查看versionASN.1(抽象语法表示)

可以看出,SNMP第一个字段是version(版本号)。它是值为0的INTEGER。

2、根据BER(基本编码规则,Basic Encoding Rule)进行编码。

BER把ASN.1表示的抽象类型值编码为TLV结构的字符串。

根据前面分析:

        1)INTEGER是UNIVERSAL(通用标签),因此前两位(标签)为00。

        2)类型为INTEGER,是简单类型,因此第三位类型值为0。

        3)类型INTEGER为UNIVERSAL 2,因此后五位为00010。

        由此可见,TLV中第一个字节T的值为二进制00 0 00010,即0000 0010,对应十六进制数为02H。

        总结:【00(UNIVERSAL)+0(简单类型)+00010(INTEGER类型)】,即0000 0010B,02H。

        2.2 第二部分L表示值V的长度,1个字节,对应十六进制数为01H。

        2.3第三部分V表示值0,对应十六进制数为00H。

综上,版本号0(实际是表示使用的是SNMPv1)的BER编码为02 01 00。

根据TLVT的编码规则,解释下图SNMP协议中Community的编码依据。

答:

community 类型是 OCTET STRING 字节串为通用标签 UNIVERSAL,标签值为4。因此前两位(标签)为 00,类型为简单类型,第三位为 0,标签值为 4,后五位为 00100。T 字段为的值为 00000100,对应十六进制数为 04。Value的值有11字节,所以L字段的值为 0000 1011,十六进制为 0B。V 字段的值为cdy077cr090,也就是用 ASCII 码表示的值为63 64 79 30 37 37 63 72 30 39 30。

Community: cdy077cr090的BER编码为04 0b 63 64 79 30 37 37 63 72 30 39 30。

TLV分析:

1. T:【00(UNIVERSAL)+0(简单类型)+00100(OCTET STRING类型)】,即0000 0100B,04H。

依据:RFC1157文档中version的ASN.1语法:

2. L:值的长度为11个字节,即0bH。

3. V:值为cdy077cr090,即63 64 79 30 37 37 63 72 30 39 30H。

🚩结尾


🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
🌈写给读者:很高兴你能看到我的文章,希望我的文章可以帮助到你,祝万事顺意🏳️‍🌈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/668720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【玩转Linux操作】Linux服务管理

🎊专栏【玩转Linux操作】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 文章目录 🍔服务(service)管理⭐service管理指令 &…

《网络安全0-100》网络安全技术

网络安全技术 防火墙 入侵检测系统 防火墙(Firewall)是一种网络安全设备,用于监控和控制网络流量,以保护网络免受未经授权的访问和攻击。防火墙通过过滤网络流量,阻止潜在的攻击流量进入网络。它可以实现基于端口、协议、IP地址和应用程序的…

chatgpt赋能python:Python指定日期的后一天:介绍与解析

Python指定日期的后一天:介绍与解析 Python是广泛使用的编程语言之一,在数据科学、机器学习、人工智能和网络开发等众多领域都有重要的应用。本文将要讨论的问题是:如何使用Python来获取一个指定日期的后一天?这个问题看似简单&a…

QT找不到python27.dll或python36.dll解决办法

缺少python27.dll 点开QT时出现上述问题,一种方法就是找python27.dll文件进行替换。 1.进入网站下载相关文件 windll.com/dll/python-… 2.之后将文件移动到下面的路径里,C:\Windows\SysWOW64\ 3.然后重启 试了4种方案,把32位放在System32…

【操作系统】哲学界进餐问题实现

目录 实验原理: 实验目的: 实验数据及结果分析: 实验原理: 哲学家进餐问题可以通过限制同时进餐人数为4解决,为此需要设置一个值为4的互斥信号量sem_eaters,并且每根筷子只能同时由一个人使用,需要设置…

kafka的初步认识

什么是Kafka? Kafka的增长很快。财富500强企业中超过三分之一使用卡夫卡。这些公司包括十大旅游公司,十大银行中的七家,十大保险公司中的八家,十大电信公司中的九家,等等。LinkedIn,微软(Micro…

【CV 向】如何打造一个“数串串神器“

导言 最近,我看到了这样一个视频,觉得很有意思,就随手保存下来了。😁😁😁 之前吃串串火锅,老板数竹签不是称重就是用手慢慢数,但是称重似乎总是得不到正确的竹签数目,而…

C++技能系列 ( 7 ) - 右值引用、移动语意、完美转发

现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 右值引用、移动语意、完美转发 1、右值引用2、完美转发 1、右值引用 右值引用(rvalue refe…

Redux的纯函数、中间件

当我们的应用随着业务的发展,变得越来越复杂的时候,组件之间的状态也是越来越复杂。 reducer函数 之前说过redux中的action,是用来描述一种变化。但是完成变化并且生辰新的数据数据状态的是reducer方法。 reducer方法,必须是纯…

SQL注入攻击与防护

目录 一、SQL注入攻击概述 1.1 SQL注入概念 1.1.1 标准查询过程 1.1.2 SQL注入定义 1.2 SQL注入根本原因 1.3 SQL注入条件 1.4 SQL注入防范 1.4.1 根本原因:过滤不严 1.4.2 安全设计原则:数据与代码分离 1.5 SQL注入流程 1.6 SQL注入分类 1.…

vue3+vite+ts项目配置开发环境和生产环境 打包命令配置

开发环境和生产环境的配置和打包方式有所不同,下面是基于vue3vitets项目的开发环境和生产环境配置及打包方式的详细说明。 开发环境配置 开发环境的配置主要是为了方便开发者进行调试和测试,以下是开发环境的配置步骤: 1.1 安装依赖 首先…

DAY27:回溯算法(二)组合问题及其优化

文章目录 77.组合(一定要注意逻辑问题)思路for循环嵌套的情况回溯算法模拟for循环K层嵌套 回溯法步骤伪代码完整版debug测试逻辑问题:没有输出逻辑问题:为什么是递归传入i1而不是startIndex1?重要:为什么会…

Java-API简析_java.lang.CharSequence接口(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131318474 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

Unreal 5 实现场景

如果你拿到了一个新的场景,想将此场景应用到游戏当中,首先需要给敌人增加ai移动路径,需要添加导航体积 添加导航模型包围体积 添加了体积以后,设置包围盒的大小,将敌人可以行进的区域给区分出来,然后按键盘…

PyCharm2023开发工具activice教程(包含工具link)

PyCharm2023 前言1. 下载工具2. 选择安装方法33. 填入active code4. 效果如下 前言 PyCharm是一款由JetBrains开发的强大的Python集成开发环境(IDE)。它提供了丰富的功能和工具,旨在提高Python开发者的生产力和效率。 以下是PyCharm的一些主…

Linux操作系统体系结构 ( 3 ) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the…

FTP服务器

文章目录 FTP服务器FTP的数据传输原理FTP的功能简介不同等级的用户身份命令记录与日志文件记录限制用户活动的目录 FTP的工作流程与使用到的端口FTP主动式连接FTP被动式连接 vsftpd服务器基础设置为什么使用vsftpd所需要的软件以及软件结构vsftpd.conf 配置值说明与服务器环境比…

【入门向】CV 小白如何入门?人脸识别教程带你学习计算机视觉

导言 计算机视觉作为人工智能领域的一个重要分支,旨在让计算机能够理解和解释图像和视频数据。而OpenCV作为一款开源的计算机视觉库,为开发者提供了丰富的工具和函数,用于处理图像、视频、对象检测、特征提取等任务。对于初学者来说&#xf…

chatgpt赋能python:如何在Python中捕获kill信号

如何在Python中捕获kill信号 在编写Python代码时,我们可能需要处理一些长时间运行的进程。有时候,我们会在运行这些进程时使用kill命令杀死它们。然而,Python进程是否可以捕获kill信号呢?答案是肯定的。 在本文中,我…

基于pyqt5、mysql、yolov7、chatgpt的小麦病害检测系统v1.0

基于pyqt5、mysql、yolov7、chatgpt的小麦病害检测系统设计与实现 一、界面设计1.1安装pyqt51.2创建用户子窗体1.3创建管理员主窗体1.4创建管理员子窗体1.5创建系统登陆界面 二、环境搭建2.1pyqt5工具配置2.2mysql5.7安装 三、编程实现3.1初始化数据库3.2创建用户数据库sdk文件…