// HackTricks · Network Services

47808/udp - BACnet

47808/udp - BACnet

Protocol Information

BACnet is a vendor-independent data-communications protocol for building automation and control networks. It is standardized as ANSI/ASHRAE 135 and ISO 16484-5 and supports systems such as HVAC, lighting, access control, elevators, security, and fire detection.[1]

Default port: 47808

PORT      STATE SERVICE
47808/udp open  bacnet  Building Automation and Control Networks

Enumeration

BAC0

The BAC0 Python library can issue a Who-Is broadcast and read properties from discovered devices. The host generally needs network reachability to the target BACnet/IP network.[2]

pip3 install BAC0
pip3 install netifaces
import BAC0
import time

myIP = '<YOUR_IP>/<MASK>'  # Example: '192.168.1.4/24'
bacnet = BAC0.connect(ip=myIP)
bacnet.whois()  # Broadcast a BACnet Who-Is request
time.sleep(5)   # Wait for devices to respond
for i, (deviceId, companyId, devIp, numDeviceId) in enumerate(bacnet.devices):
    print(f"-------- Device #{numDeviceId} --------")
    print(f"Device:     {deviceId}")
    print(f"IP:         {devIp}")
    print(f"Company:    {companyId}")
    readDevice = bacnet.readMultiple(f"{devIp} device {numDeviceId} all")
    print(f"Model Name: {readDevice[11]}")
    print(f"Version:    {readDevice[2]}")
    # print(readDevice)  # List all available device information

Automatic

nmap --script bacnet-info --script-args full=yes -sU -n -sV -p 47808 <IP>

The Nmap script does not register as a BACnet foreign device. It sends standard BACnet requests directly to an IP-addressable device and reports properties such as its vendor, instance number, firmware, model, and description.[3]

Shodan

  • port:47808 instance
  • "Instance ID" "Vendor Name"

References