Vasily is a network troubleshooting utility that's a combination of ping, traceroute, and top. It repeatedly pings multiple hosts and displays the results in an easy-to-read format.
Vasily has been tested with Go 1.23 on recent versions of:
- macOS (both unprivileged ICMP and raw sockets)
- Linux (both unprivileged ICMP and raw sockets)
- FreeBSD
- OpenBSD
It will likely also work on other UNIX systems that Go supports, provided they have standard support for raw sockets. Windows is currently unsupported.
You will need Go version 1.23 or higher:
git clone https://github.com/pcekm/vasily
cd vasily
./scripts/buildrelease.shBy default, Linux and macOS use unprivileged ICMP. To force the use of raw
sockets, build with the rawsock tag:
./scripts/buildrelease.sh -tags=rawsockFor Linux and macOS systems using unprivileged ICMP, build the program and copy
it to where you want it (e.g. /usr/local/bin). (But see the caveats about
unprivileged ICMP on Linux below.)
cp vasily /usr/local/binFor other systems that use raw sockets, you will also need to adjust its ownership and permissions so that it runs setuid root.
cp vasily /usr/local/bin
chown 0:0 /usr/local/bin/vasily
chmod u+s /usr/local/bin/vasilyDepending on your distribution, you may need to adjust a setting on your Linux
machine to enable unprivileged pings. If it panics with
listen error: permission denied, change net.ipv4.ping_group_range. Something
like this, followed by a reboot should do it:
# As root:
printf 'net.ipv4.ping_group_range=0\t10000\n' >> /etc/sysctl.confSee the ICMP manpage for more information.
If you can't make it work, you can also build with the rawsock tag and install it setuid root as described above.
