Project log

CommProbe

Updated October 4, 2026
CommProbe logo

CommProbe is a desktop tool for testing communication links. Open a TCP server, fire UDP packets, talk to a Bluetooth device, watch a CAN bus, or query a lab instrument over GPIB, all from one window with one timestamped log.

RenamedThis project used to be called Socket Test. The packaged releases on GitHub (up to v4.1) still use the old name.
CommProbe TCP tab with a server and a client connected over loopback, and the message log on the right
5protocols, one window
5CAN interface types
1 Mbpstop CAN bitrate
1 mslog timestamp resolution

Background

From socket tester to protocol probe

CommProbe started in 2017 as Socket Test, a small PyQt utility for sending and receiving test messages over TCP and UDP. When you are bringing up a device or a piece of firmware, you often just need something on the other end of the link that shows exactly what arrives and lets you send a reply by hand.

Over the years it picked up more of the links I work with: GPIB for lab instruments, then Bluetooth, and finally CAN. By then it was no longer a socket tool, so version 5 gave it a new name, a cleaner interface, and a code base split into one handler per protocol.

  1. 2017Socket TestTCP and UDP in PyQt
  2. 2021PySide6 + GPIBInstruments through PyVISA
  3. 2022BluetoothRFCOMM server and client
  4. 2026CANFive bus backends via python-can
  5. v5CommProbeNew name, echo, repeat timers

Five Protocols

One tab each · shared log on the right

TCP Server + client

  • The server listens on any network interface and port; the client connects to an IP and port. Both sit on the same tab, so you can loop one back to the other.
  • Echo sends every received message back to the client.

UDP Listen + send

  • Listens on a chosen interface and port.
  • Sends to any target IP and port, so it works for unicast tests and for talking to devices that broadcast status packets.

Bluetooth RFCOMM

  • The server binds to a local MAC address and RFCOMM channel.
  • The client connects to a remote MAC address and channel, for serial-style links to modules and microcontrollers.

CAN python-can

  • Works with socketcan, PCAN, Vector, Kvaser, and a virtual bus for testing without hardware.
  • Bitrates of 125 k, 250 k, 500 k, and 1 Mbps.
  • Standard 11-bit or extended 29-bit arbitration IDs. IDs and data are typed in hex, with data as space-separated bytes.
  • For Vector hardware, the app registers as CANalyzer in Vector Hardware Config.

GPIB PyVISA

  • Lists every VISA resource it can find. Pick one and click Open.
  • Query writes a command and reads the reply (for example *IDN?); Write only sends.
  • Uses NI-VISA when installed, or the pure-Python pyvisa-py backend. If neither is found, the tab says so instead of failing.
CAN bus typeChannelNotes
socketcancan0Linux kernel CAN interfaces.
pcanPCAN_USBBUS1PEAK-System adapters.
vector0Zero-based channel index, mapped under the CANalyzer application.
kvaser0Zero-based channel index.
virtual0In-process bus, handy for trying the app with no adapter.

One Log for Everything

Tools shared by every tab

Timestamped logEvery message gets a millisecond timestamp, a direction arrow, and its source. Incoming traffic is shown in blue.
Repeat timerTCP and UDP can resend the last message on an interval in milliseconds, for soak tests and heartbeat checks.
Connection statusThe status bar shows who is connected to what, for the tab you are on.
Remembers your setupInterfaces, ports, addresses, and the last tab are saved to config.json and restored at launch.

How It Works

Qt front end · one worker thread per link

Main windowQt Designer layout loaded at runtime
HandlersOne module per protocol tab
WorkersSocket, CAN, or VISA I/O on a QThread
LogQt signals carry each message back

Each protocol tab has its own handler that wires up the controls and starts a worker on a separate QThread, so a slow device or a blocking socket never freezes the window. Workers report back through Qt signals, and every message goes into the same log. psutil lists the network interfaces with their IPv4 addresses, and PyInstaller packages the whole app into a folder you can run without Python installed.

PythonPySide6Qt Designerpsutilpython-canPyVISApyvisa-pyPyInstallerGitHub Actions

Get Started

Run from source on Windows or Linux

Required

PySide6 for the interface and psutil for network interfaces.

For CAN

python-can, plus the driver for your adapter.

For GPIB

pyvisa with NI-VISA, or pyvisa-py on its own.

Run

The requirements file installs everything, including the optional CAN and GPIB packages:

git clone https://github.com/rookiepeng/comm-probe.git
cd comm-probe
pip install -r requirements.txt
python commprobe.py

Build a standalone app

PyInstaller bundles the app, its layout, and its icons into dist/commprobe:

pip install pyinstaller
pyinstaller commprobe.spec

GitHub Actions builds the same package for Windows and Linux on every push.

GPL-3.0 · feedback welcome Issues · Releases · GitHub