Howdy helps you discover all your local LAN machines, including macOS, Windows and Linux. It's able to tell your their mDNS names.
Howdy makes use of Apple's Bonjour
, a zero-configuration netwoork service, via Network.framework
.
It uses its very own protocol called zero
, build on top of TCP/IP
. It's a simple protocol, really.
It contains a fixed sized header of 8 bytes
that represents an UInt
, declering the size of future json
encoded hostname
(for Unicode support 😃):
![image](https://private-user-images.githubusercontent.com/10388612/292127462-56be2126-cdf6-4066-b536-1deb3b31c03c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ4NTQxNjEsIm5iZiI6MTcyNDg1Mzg2MSwicGF0aCI6Ii8xMDM4ODYxMi8yOTIxMjc0NjItNTZiZTIxMjYtY2RmNi00MDY2LWI1MzYtMWRlYjNiMzFjMDNjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODI4VDE0MDQyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQxMDdiNTI2NGVkMWM2N2RiYmViMjFhZjk2YmYzMzVlMzIzNGVjZTI0YmE2YjhhZGJkYTJmMmY5MDU2OTMzZjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.mtXKu992vTbTxJmKpHEfQVzolNMRTbauGmhr-EFEdt8)
So, every time a app instance starts, it publishes it's service on mDNS (Bonjour) and browse over other avlaible service on the local netowrk. If it finds one, it sends it's hostname via the Howdy (zero) protocol.
Here's and example of a Howdy instnace listing other three machines on the network:
![image](https://private-user-images.githubusercontent.com/10388612/292127873-6312fbca-d2ec-463f-834e-2723d5c00472.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ4NTQxNjEsIm5iZiI6MTcyNDg1Mzg2MSwicGF0aCI6Ii8xMDM4ODYxMi8yOTIxMjc4NzMtNjMxMmZiY2EtZDJlYy00NjNmLTgzNGUtMjcyM2Q1YzAwNDcyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODI4VDE0MDQyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ4NmU1MDk0OWE0NTczYmNkNGFlMTdkNzhlNjc0NGEzMGQxNGIyZjQyNGViODllMWFlNmM4ZjU2N2E4MmMzMjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.oWZICh3riwlSF6upfv4ghvLSrgx0DXw9rFdpr9z_vb4)
To simulate these machines. I've used the dns-sd
UNIX command to search for Bonjour services and resolve the port.
I've then used netcat (nc
) combined with echo to send an 8 byte UInt
header via UDP
and a plain-text string (for demo purposes):
echo -n -e '\x09\x00\x00\x00\x00\x00\x00\x00bar.local' | nc -u localhost 65172
While macOS's Finder
does a good job in listing computers, sometimes they're simply not listed (probably because of OS policies) and
not enough info is available (for example the IP Address).
Howdy
allows you to retireve all that, without lowering security, it also gives you more info.
Plans are to also allow file transfer via Howdy
this is a good alternative to file sharing, as you don't have to start a share and turn it off, for sercutity,
if all you want is to transfer.