IPR Daemon (later referred to as iprd) is an ASIC miner listener, sniffing IP report messages live on the wire from a LAN.
iprd serves as a LAN-wide listening backend for ASIC miners by sniffing IP report packets sent by the miners. It captures the received IP & MAC addresses along with the miner type over an TCP stream for easy reading and integration with front-ends/applications like its sister project bitcap-ipr.
iprd is designed to run on a local server/PC with direct access to the LAN. Instead of running UDP listeners on specific ports, it looks at ALL local UDP packets in real-time and processes each one to determine if its a valid IP report packet.
Effectively, works exactly like WireShark but specificly for IP Report packets.
As it receives IP Report messages, it will send the data over a TCP broadcast/stream that is accessible over an configurable port (default: port 7788).
- IP Report listening/sniffing across LAN (even miners within VLANS!)
- TCP Broadcasting for easy front-end/app integration
- Duplicate packet handling
- Wide OS support
Currently, it supports UNIX-based distros (FreeBSD/pfSense/OPNsense, Ubuntu, MacOS) and Windows! Pre-built binaries are available in Releases!
- Go (>=1.24.0)
- make (Optional)
To build locally, simply run
go build -o iprd cmd/main.go
# or
makeTo see the iprd binary in action, simply run:
sudo ./iprd -i "eth0"where, -i is specifying the system interface name to listen on.
Note
If running on Windows, supply the network device name (i.e. "Ethernet Instance 0"). Run ipconfig in cmd/pswh to see all interface names.
It also worth noting that iprd requires running under the root user to run.
To configure the TCP stream port, use -p to supply:
sudo ./iprd -i "eth0" -p <SOME_PORT>Also see iprd -h for a list of all available options.
By default, the TCP broadcast listens on port 7788.
To start listening for messages, send the message {"command": "iprd_subscribe"} after initial connection to the broadcast.
See cmd/example/tcp_listener.go for an example golang implementation or can use netcat nc:
echo '{"command": "iprd_subscribe"}' | nc localhost 7788Replacing localhost with host IP address if required.
In theory, it should receive any ASIC miner IP Report message since it isn't bound to any specific UDP ports.
The only thing that iprd looks at is the destination port of the packet for a known ASIC miner "hint" (not all miner types have unique port destinations) and the data payload for if it contains its own source IP address.
This is designed to be as open-ended as possible to accept any IP Report message/output from ASIC miners. One caveat is the possibility of false positives from other devices on the network.
minerPorts = map[int]MinerTypeHint{
14235: Antminer, // Assume antminer but could be a multitude of miner types (i.e. Volcminer, Hammer)
11503: Iceriver,
8888: Whatsminer,
1314: Goldshell,
18650: Sealminer,
9999: Elphapex,
12345: Auradine,
}The core tooling/functionality of IPR Daemon can be found in pkg/iprd.
See README for more details on how to use within your own programs!
For documentation, see:
go doc -http ./pkg/iprd