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: