BACnet协议-(基于ISO 8802-3 UDP)(2)

1、模拟设备的工具界面如下:

2、使用yet another bacnet explorer 用作服务,用于发现设备,界面如下:


3、通过wireshark 抓包如下:

(1)、整体包如下:
(2)、mac头
(3)、IP头

自动对应

(4)、UDP头
(4)、BACnet头
(5)、NPDU

BACnet NPDU 数据结构字段包含如下内容:

  1. Version (0x01):

    • 这是 BACnet NPDU 的版本号,遵循 ASHRAE 135-1995 的标准。
  2. Control (0x20):

    • 控制字段,这个字节包含一些标志位,用于指示 NPDU 的内容和功能。

    • bit7 (0): 指示 NPDU 是否包含 BACnet APDU。此值为 0,表示该 NPDU 包含 APDU。

    • bit6 (0): 保留位,必须为 0。

    • bit5 (1): 目的地址标识符为 DNET、DLEN 和 Hop Count,这表明该帧有目的网络信息。

    • bit4 (0): 保留位,必须为 0。

    • bit3 (0): 源地址字段缺失。

    • bit2 (0): 无需期待应答。

    • bit1 (0): 该消息的优先级为普通消息。

    • bit0 (0) : 此位为优先级控制字段,值为 0,表示这不是一个生命安全或关键设备消息。

      Bit Description If 1 If 0
      7 APDU NPDU 传递网络层消息 NPDU 包含 BACnet APDU
      6 Reserved Reserved Reserved
      5 Destination Specifier 包含DNET DLEN DADR 不包含DNET DLEN DADR
      4 Reserved Reserved Reserved
      3 Source Specifier 包含SNET SLEN SADR 不包含SNET SLEN SADR
      2 Expecting reply 等待回复 不用回复
      1,0 Priority 11=生命安全,10=关键设备,01=紧急 00=正常
  3. Destination Network Address (65535):

    • 这是目的网络地址,设置为 65535,表示广播到目标网络。
  4. Destination MAC Layer Address Length (0):

    • 此字段长度为 0,表示目标网络是广播,无需具体的 MAC 地址。
  5. Hop Count (255):

    • 路由跳数被设置为 255,这意味着该消息可以通过 255 个路由器传输,这是 BACnet 允许的最大跳数。
(6)、APDU-Who-Is

一个未确认的 Who-Is 请求

(7)、APDU-I-Am

一个未确认的I-Am请求

APDU 分析:

  1. APDU Type: Unconfirmed-REQ (1):

    • 该帧类型为未确认请求 (Unconfirmed-REQ),值为 1。
    • 这是 BACnet 协议中一种未确认服务请求消息。
  2. Unconfirmed Service Choice: I-Am (0):

    • 未确认服务选择为 I-Am(值为 0)。
    • I-Am 消息用于设备向网络广播其存在以及设备标识信息。
  3. Object Identifier:

    • Object Type: device (8)
    • Instance Number: 3473435
    • 对象标识符指示了设备对象,类型为 device,实例号为 3473435。该标识符用于唯一标识网络中的设备。
    • C4 //应用程序标记 12(对象标识符),长度 4;
      高4bit是对象标识符,低4bit是长度4,
    • 02 35 00 1b // 对象标识符指示了设备对象,
      高10bit是类型,=0b0000 0010 00 = 8 为 类型device,
      低22bit为实例号,为=0b11 0101 0000 0000 0001 1011 = 0x35001b = 3473435 该标识符用于唯一标识网络中的设备。
  4. Maximum APDU Length Accepted:

    • 值为 1464
    • 这表示该设备支持的最大 APDU 长度为 1464 字节。
      22 //Application Tag 2 (Unsigned Integer), length 2,高4bit表示数据类型(Unsigned Integer),低4bit数据长度
      05 b8 //最大 APDU 长度: 480
  5. Segmentation Supported:

    • 值为 segmented-both (0)
    • 表明设备支持分段传输(segmented-both),意味着设备可以在发送和接收时都支持数据分段。
      91 //Application Tag 9 (Enumerated), length 1,高4bit表示数据类型(Enumerated枚举),低4bit数据长度
      00 //设备支持分段传输(segmented-both
  6. Vendor ID:

    • Vendor Identifier 为 260,标识符表示该设备的供应商为 BACnet Stack at SourceForge
      22 //Application Tag 2 (Unsigned Integer), length 2,高4bit表示数据类型(Unsigned Integer),低4bit数据长度
      01 04 //Vendor Identifier 为 260,标识符表示该设备的供应商为 BACnet Stack at

该 APDU 是一个未确认的 I-Am 请求,广播设备的存在以及一些关键信息,如设备的唯一对象标识符、最大支持的 APDU 长度、设备是否支持分段传输,以及设备的供应商信息。

这些数据表明设备正在向网络中的其他设备声明其身份和能力,并不要求应答。这种消息通常用于初始发现或服务请求广播的场景。

相关推荐
学习前端的小z13 小时前
【C语言】传值调用与传址调用:深度解析与实现
c
群联云防护小杜21 小时前
如何解决DDoS导致服务器宕机?
网络·网络协议·安全·web安全·udp
学习前端的小z21 小时前
【C语言】深入解析自定义my_strlen函数的设计与实现细节
c
学习前端的小z1 天前
【C语言】野指针问题详解及防范方法
c
沥川同学1 天前
跨平台应用开发框架(1)----Qt(组件篇)
c++·qt·udp·线程·tcp·qt5·qt6.3
时光の尘1 天前
C语言菜鸟入门·关键字·int的用法
c语言·开发语言·数据结构·c++·单片机·链表·c
佑冰2 天前
C++ 矩阵旋转
数据结构·c++·算法·c
时光の尘2 天前
C语言菜鸟入门·关键字·union的用法
运维·服务器·c语言·开发语言·c·printf
丁总学Java2 天前
netstat -tuln | grep 27017(显示所有监听状态的 TCP 和 UDP 端口,并且以数字形式显示地址和端口号)
网络协议·tcp/ip·udp
java_heartLake2 天前
网络协议之UDP
网络·网络协议·udp