Pro DJ Link Dissector#
A thorough Wireshark dissector for the Pioneer DJ / AlphaTheta "Pro DJ Link" sync & communications protocol
Installation#
if you're on MacOS, easiest is to run copy_plugin.sh.
otherwise, copy the Lua file into your Wireshark's local plugins folder. look in "About Wireshark -> Folders" to find this i'm pretty sure.
Usage Tips#
your network#
mirroring switch#
You'll want a switch that offers traffic mirroring to get the most out of this, as you need it to see the traffic sent between players. use the switch's management interface to mirror traffic on all but one ethernet port to the last port, and connect your computer to that last port.
bridge network backup#
If you lack a mirroring switch, you can see traffic sent directly to/from a single XDJ/CDJ by connecting to the bridge network inside of it, via the usb port on the player. This port is usb-b, so you are likely to need to adapter to a more common usb format. You can also see broadcast packets on the local switch, but can't see other players talking to each other. it's also just more annoying to use in my experience, vs. the mirroring switch.
Display Filters#
use the following strings as Wireshark display filters to narrow down traffic, which can be noisy with multiple players.
All (known) Pro DJ Link traffic#
pdjl
All Relevant Traffic#
this filter is highly recommended, as it shows everything in a reasonbly clean view. can be noisy, but provides the full picture.
we add the nfs filter because players share files betwen each other using NFSv2, which wireshark has a built-in dissector for.
pdjl || nfs
Pro DJ Link traffic (without database / menu)#
pdjl && udp
Pro DJ Link database / menu traffic#
(pdjl && tcp) || (tcp and not (tcp.analysis.retransmission or tcp.analysis.fast_retransmission or tcp.analysis.spurious_retransmission or tcp.analysis.duplicate_ack or tcp.analysis.keep_alive or tcp.analysis.keep_alive_ack or !tcp.ack.nonzero))
CDJ/XDJ status packets#
pdjl && len(udp.payload) == 292
CDJ/XDJ discovery / keep-alive packet#
the ip filter shuold always work, but if your network's broadcast address is diff, you can change or remove it.
pdjl && len(udp.payload) == 54 && ip.dst_host contains ".255.255"
Status#
Currently Supported#
- Channel Claims
- CDJ/XDJ Status
- Discovery broadcast packets
- Menu Requests
- Analysis tag requests
- QueryContext setup
Missing#
- Anything to do with mixers
Credits#
Thank you to DeepSymmetry for all the protocol-level work and documentation.