Wireshark dissector plugin for the Dash cryptocurrency protocol

October 11, 2019 ยท View on GitHub

A Dash protocol dissector converted from the bitcoin built-in dissector and updated to include Dash specific commands (based on outdated protocol documentation and source code). All messages are now dissected in significant detail.

Current limitations:

  • Governance object (govobj) data field is not dissected
  • The script field of TxOuts is not dissected

To Build (on Linux Mint 17.3)

  • Clone Wireshark from https://github.com/wireshark/wireshark
  • Clone this plugin repository
  • From this repository, copy CMakeListsCustom.txt / the plugins folder and paste into the root of the cloned Wireshark folder
  • Follow the Wireshark build instructions

Note: This was built with Wireshark 2.3. To use with Wireshark 2.2 it is necessary to build using the master-2.2 branch of this repository

Releases

  • Currently the plugin has only been built on Linux Mint 64 bit. A binary can be downloaded from the releases page.

Capture screenshot

This shows a dissected Masternode Ping message. The packet also contains a Governance Vote.

Dash specific protocol implementation status (excludes items shared with the Bitcoin protocol)

NameRecognizedDissectedStatusDescription
blocktxnYYBlock Transactions (compact block-related)
cmpctblockYYCompact Block
dsaYYDarksend Accept
dscYYDarksend Complete
dsegYYMasternode List/Entry Sync
dsfYYDarksend Final Transaction
dsiYYDarksend Entry
dsqYYDarksend Queue
dssYYDarksend Sign Final Transaction
dssuYYMixing Pool Status Update
dstxYYDarksend Broadcast
getblocktxnYYGet block transaction(s) (compact block-related)
govobjYYGovernance Object
govobjvoteYYGovernance Vote
govsyncYYGovernance Object Sync
ixYYTransaction Lock Request (InstantSend)
mnbYYMasternode Broadcast
mngetYYMasternode Payment Sync
mnpYYMasternode Ping
mnvYYMasternode Verify
mnwYYMasternode Payment Vote
mnwbYNAInventory onlyMasternode Payment Block (no message - inventory only)
sendcmpctYYSend compact blocks
sporkYYSpork status
sscYYSync Status Count
txlvoteYYTransaction Lock Vote

Example display filter

This example of using display filters shows how to show messages related to a PrivateSend session.

ip.addr == 217.182.229.150 && (dash.dsa || (dash.dsq.ready==1) || dash.dsi || \
  dash.dsf || dash.dss || dash.dsc || dash.dssu || dash.dstx)