bacnet 协议栈 源码 研究 (记录)

本文记录了对BACnet协议栈源码的研究,包括Python和C版本的区别、多网卡通信、广播包分析以及使用tcpdump和Wireshark进行调试的方法。此外,还探讨了如何在Linux环境下进行C和Python程序的单步调试,并分享了VTS发送IAM消息的抓包细节。
摘要由CSDN通过智能技术生成

bacnet 协议栈 源码 研究 (记录)

https://github.com/bacnet-stack/bacnet-stack
https://github.com/bacnet-stack/bacnet-stack/archive/refs/tags/bacnet-stack-1.0.0.tar.gz

http://bacnet.sourceforge.net/

bacnet 协议
ASHRAE135-2016Standard135-2016–BACnet-ADataCommunicationProtocolforBuildingAutomationandControl.pdf

python版本

python 版本和C版本不是一个作者
所以他们的版本之间也没有什么对应关系
This project has moved to `GitHub <https://github.com/JoelBender/bacpypes>

在这里插入图片描述

111

支持 多网卡,选中一个网卡进行bacnet通信

解压之后
执行如下命令:
/home/jack/general_work/bacnet_tst/bacnet-stack-bacnet-stack-1.0.0

Linux/Unix/Cygwin

$ make clean all

cd apps/whois/
./bacwi

另起一个putty窗口:
sudo tcpdump broadcast and host 192.168.99.31
在这里插入图片描述
who is 发送的广播 是 使用的 47808 端口,是指向 192.168.99.255 这个地址
192.168.99.255
192.168.99.255是一个子网的广播地址
一般来说一个子网的广播包是不能通过路由器传播到另一个子网

测试:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
使用port 47808 作为过滤条件
使用 过滤条件 : host 192.168.99.31 and broadcast 不能过滤,
原因是 192.168.99.215 发送的是广播包,不是针对192.168.99.31这个地址的。

在这里插入图片描述
在这里插入图片描述
关于modbus协议开发与wireshark相关抓包方法可以参考清华大学出版社的:
《Modbus软件开发实践》和
《Wireshark数据包分析实战详解》

在windows 下面运行
bacnet-tools-1.0.0\bacserv.exe 没有和 上面的测试环境 通信成功,具体原因不知

如何debug呢?

make 依赖信息 如何打印?
make 编译到的文件,如何打印?
make 详细信息 如何打印?

 printf("%s %s %d\n",__func__,__FILE__,__LINE__);
默认的
 #elif defined(BACDL_BIP)
#include "bacnet/datalink/bip.h"
#include "bacnet/datalink/bvlc.h"
#include "bacnet/basic/bbmd/h_bbmd.h"

#define datalink_init bip_init
#define datalink_send_pdu bip_send_pdu
#define datalink_receive bip_receive
#define datalink_cleanup bip_cleanup
#define datalink_get_broadcast_address bip_get_broadcast_address

[jack@jack-desktop: bacnet-stack-bacnet-stack-1.0.0]$./bin/bacwi
whois main main main.c
whois main main main.c 403
/home/jack/general_work/bacnet_tst/bacnet-stack-bacnet-stack-1.0.0/ports/linux/bip-init.c 152
;Device   MAC (hex)            SNET  SADR (hex)           APDU
;-------- -------------------- ----- -------------------- ----
;
; Total Devices: 0


Send_WhoIs_To_Network
datalink_send_pdu
bip_send_pdu

双网卡可以用的

enp4s0 上外网
enp3s0 是内网 连接 bacnet 设备
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
设置环境变量,如果没有设置BACNET_IFACE ,会按照route -n的路由表,选择 enp4s0

export BACNET_IFACE=enp3s0

运行

[jack@jack-desktop: bacnet-stack-bacnet-stack-1.0.0]$./bin/bacwi
whois main main main.c
whois main main main.c 403
func file line: bip_get_broadcast_address /home/jack/general_work/bacnet_tst/bacnet-stack-bacnet-stack-1.0.0/ports/linux/bip-init.c 153
dlenv_init /home/jack/general_work/bacnet_tst/bacnet-stack-bacnet-stack-1.0.0/src/bacnet/datalink/dlenv.c 422
bip_init /home/jack/general_work/bacnet_tst/bacnet-stack-bacnet-stack-1.0.0/ports/linux/bip-init.c 771 --
BIP_Port = 49338,ifname = enp3s0
BIP: Interface: enp3s0
BIP: Address: 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
BACnet(Building Automation and Control Networks)协议是一种通信协议,用于建筑自动化和控制系统。它是一种开放的、厂商中立的协议,被广泛应用于建筑物的自动化和控制领域。 BACnet协议的源码是指实现BACnet协议的软件代码。该源码是建立BACnet通信的基础,可以在各种设备上运行,包括传感器、执行器、控制器和监测设备等。BACnet协议的源码提供了一种灵活、可扩展和互操作的解决方案,可以满足不同厂商的需求。 BACnet协议的源码通常由专业的软件工程师编写和维护。这些源码包括了实现BACnet协议所需的各种功能,如数据传输、设备发现、数据解析和处理等。此外,源码还包括了各种BACnet网络的实现,如乙太网、RS-485、LonWorks和BACnet/IP等。这些功能和网络实现使得BACnet协议在建筑自动化和控制系统中具备了强大的通信能力。 对于建筑自动化和控制系统的厂商和开发者来说,BACnet协议的源码是一种宝贵的资源。通过研究和使用这些源码,他们可以快速、方便地实现BACnet协议,构建符合标准的、高效可靠的通信系统。此外,源码还可以用于协议栈的移植和定制,满足特定应用场景的需求。 总之,BACnet协议的源码是一项重要的技术资源,对于建筑自动化和控制系统的开发和应用具有重要意义。它提供了一种开放、互操作的通信解决方案,促进了建筑设备之间的互联和数据交换,提高了建筑自动化和控制系统的效率和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值