Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: ['1.24']
go-version: ['1.26']

steps:
- name: Checkout code
Expand Down Expand Up @@ -56,7 +56,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.24'
go-version: '1.26'
cache: true
cache-dependency-path: go.sum

Expand All @@ -77,7 +77,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.24'
go-version: '1.26'
cache: true
cache-dependency-path: go.sum

Expand All @@ -99,7 +99,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.24'
go-version: '1.26'
cache: true
cache-dependency-path: go.sum

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.24'
go-version: '1.26'
cache: true
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v6
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.24'
go-version: '1.26'
cache: true
- name: Test GoReleaser Build
uses: goreleaser/goreleaser-action@v6
Expand Down
9 changes: 4 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@ mping

![CI](https://github.com/servak/mping/actions/workflows/ci.yml/badge.svg)

**mping** is a multi-target, multi-protocol network monitoring tool that extends traditional ping functionality. Monitor multiple hosts and services simultaneously with real-time statistics and an interactive terminal UI.
**mping** is a `ping` built for network operators: sweep entire subnets, mix ICMP/HTTP/TCP/DNS/NTP checks in a single command, and watch live pass/fail stats in a terminal dashboard — right from the SSH session you're already in.

![Demo](demo/mping.gif)

## Features

- 🧰 **Built for network ops**: CIDR subnet sweeps, mixed-protocol checks, and a terminal-native dashboard for SSH sessions and jump hosts
- 🎯 **Multi-target monitoring**: Monitor dozens of hosts simultaneously
- 🌐 **Multi-protocol support**: ICMP, HTTP/HTTPS, TCP, DNS, and NTP monitoring
- 📊 **Real-time statistics**: Live success rates, response times, and packet loss
Expand All @@ -25,10 +28,6 @@ mping
| **DNS** | `dns://[server[:port]]/domain[/record_type]` | `dns://8.8.8.8/google.com/A`, `dns:///google.com` | DNS query monitoring |
| **NTP** | `ntp://[server[:port]]` | `ntp://pool.ntp.org`, `ntp://time.google.com:123` | Network Time Protocol monitoring |

## Demo

![Demo](mping.gif)

## Install

https://github.com/servak/mping/releases
Expand Down
6 changes: 4 additions & 2 deletions cmd/mping/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@ func Execute() {
command.NewConfigCmd(),
)
cmd.CompletionOptions.HiddenDefaultCmd = true
cmd.SetOutput(os.Stdout)
cmd.SetOut(os.Stdout)
cmd.SetErr(os.Stdout)

if err := cmd.Execute(); err != nil {
cmd.SetOutput(os.Stderr)
cmd.SetOut(os.Stderr)
cmd.SetErr(os.Stderr)
cmd.Println(err)
os.Exit(1)
}
Expand Down
53 changes: 53 additions & 0 deletions demo/demo.tape
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Regenerate demo/mping.gif (run from the repo root):
# go build -o mping ./cmd/mping/
# sudo chown root mping && sudo chmod u+s mping # once, so ICMP works without sudo below
# vhs demo/demo.tape

Output demo/mping.gif

Set Shell "bash"
Set FontSize 16
Set Width 1500
Set Height 560
Set Padding 20
Set Theme "Dracula"
Set TypingSpeed 30ms

# Subnet expansion (CIDR notation expands to individual ICMP targets)
Type "./mping -i 100 192.168.1.1 8.8.8.8 github.com 192.168.1.108/31"
Sleep 1s
Enter
Sleep 2s
Type "v"
Sleep 2s
Type "j"
Sleep 1s
Type "j"
Sleep 1s
Type "j"
Sleep 2s

Type "q"
Sleep 1s

# Multi-protocol monitoring
Type@10ms "./mping 192.168.1.1 https://google.com tcp://google.com:443 dns://8.8.8.8/google.com/A ntp://time.cloudflare.com"
Sleep 1500ms
Enter
Sleep 1s
Type "v"
Sleep 3s
Type "j"
Sleep 1s
Type "j"
Sleep 1s
Type "j"
Sleep 1s

Type "s"
Sleep 1500ms
Type "s"
Sleep 1500ms

Type "q"
Sleep 1s
Binary file added demo/mping.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 17 additions & 17 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
module github.com/servak/mping

go 1.24
go 1.26

require (
github.com/gdamore/tcell/v2 v2.8.1
github.com/jedib0t/go-pretty/v6 v6.4.6
github.com/miekg/dns v1.1.66
github.com/rivo/tview v0.0.0-20250625164341-a4a78f1e05cb
github.com/spf13/cobra v1.7.0
golang.org/x/net v0.41.0
github.com/gdamore/tcell/v2 v2.13.10
github.com/jedib0t/go-pretty/v6 v6.8.2
github.com/miekg/dns v1.1.72
github.com/rivo/tview v0.42.0
github.com/spf13/cobra v1.10.2
golang.org/x/net v0.56.0
gopkg.in/yaml.v3 v3.0.1
)

require (
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
github.com/gdamore/encoding v1.0.1 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/lucasb-eyer/go-colorful v1.4.0 // indirect
github.com/mattn/go-runewidth v0.0.24 // indirect
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/testify v1.8.2 // indirect
golang.org/x/mod v0.25.0 // indirect
golang.org/x/sync v0.15.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/term v0.32.0 // indirect
golang.org/x/text v0.26.0 // indirect
golang.org/x/tools v0.33.0 // indirect
github.com/spf13/pflag v1.0.10 // indirect
golang.org/x/mod v0.37.0 // indirect
golang.org/x/sync v0.21.0 // indirect
golang.org/x/sys v0.46.0 // indirect
golang.org/x/term v0.44.0 // indirect
golang.org/x/text v0.38.0 // indirect
golang.org/x/tools v0.47.0 // indirect
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
)
Loading
Loading