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

时间:2024-09-29 15:38:24

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 长度、设备是否支持分段传输,以及设备的供应商信息。

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