Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Support ] Netprobe

Featured Replies


Github:
https://github.com/bmartino1/NetProbe_Python

Docker Hub:
https://hub.docker.com/r/bmmbmm01/netprobe

Netprobe 2.0 – Internet Quality Dashboard

Netprobe 2.0 is a lightweight, container-friendly network probe and web UI for home / lab internet monitoring.

It periodically:

  • Pings your gateway, router and a list of “anchor” sites.

  • Measures packet loss, latency and jitter.

  • Measures DNS lookup latency per DNS server.

  • Runs scheduled and manual Speedtest.net tests.

  • Stores everything in SQLite and renders a dark-mode dashboard with Chart.js.

The goal is a simple “drop in and forget it” quality monitor that you can run on Unraid, Proxmox, Docker, etc.

Python gunicorn / flask app for a web server
Python code to get and test networks...

image.png

  • Author

If you don't want to use a single sql file for the database, I have just finished edits to use either SQLite or Postgres, adding additional docker variables to a new docker tag.
bmmbmm01/netprobe:postgres16
*This image can be used with the Unriad CA by changing the repo setting and still use sqlite!

This would require a standalone Postgres database running. for ease of deployment to use the docker compose with Postgres built in...
I would recommend cloning the github and using the docker compose file and data there...

cd /mnt/user/appdata/
git clone https://github.com/bmartino1/NetProbe_Python.git netprobe
mkdir -p /mnt/user/appdata/netprobe/{postgres,sqlite}
cd /mnt/user/appdata/netprobe
ls
rm docker-compose.yml
ls 

The above command will premade the necessary volume mounts within the cloned project page... to make the needed folders for the host volume database...
/mnt/user/appdata/netprobe/postgres

/mnt/user/appdata/netprobe/sqlite


this will also pre setup for the file below... github docker compose file is a general all around OS version...

and more the one here is more for the auto env ui stack labels and settings:
image.png

Now onto Unraid Setup:
Then with the docker compose plugin installed, we link the folder /mnt/user/appdata/netprobe

image.png

Then edit the stack. It should autoload the github version... this version will build the docker for you to run so if you want to make html js or even python changes to the probe.. Be my guest...

image.png

Here is a compose file for Postgres all in one:

#version: "3.8"

services:
  postgres:
    image: postgres:16-alpine
    container_name: netprobe-postgres
    restart: unless-stopped
    # If you want to keep config in a file: use .env via compose plugin...
    #env_file:
    #  - ./probe/config.env
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-netprobe}
      POSTGRES_USER: ${POSTGRES_USER:-netprobe}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-netprobe}
    volumes:
      - netprobe_pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-netprobe} -d ${POSTGRES_DB:-netprobe}"]
      interval: 10s
      timeout: 5s
      retries: 5
    labels:
      - "net.unraid.docker.icon=https://raw.githubusercontent.com/sgraaf/Unraid-Docker-Templates/main/postgresql16/icon.png"
      - "folder.view=netprobe"
      - "net.unraid.docker.managed=composeman"

  netprobe:
    #build: ./probe
    # Image exists... if you edit the gitclone of the project use build over image instead:
    image: bmmbmm01/netprobe: latest
    container_name: NetProbe
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    # If you want to keep config in a file:
    # env_file:
    #   - ./probe/config.env
    environment:
      WEB_PORT: ${WEB_PORT:-8080}

      #Use Postgres docker variables...
      USE_POSTGRES: ${USE_POSTGRES:-true}
      DB_ENGINE: ${DB_ENGINE:-postgres}
      
      # Postgres connection details (match the postgres service above via env file...)
      POSTGRES_HOST: ${POSTGRES_HOST:-postgres}
      POSTGRES_PORT: ${POSTGRES_PORT:-5432}
      POSTGRES_DB: ${POSTGRES_DB:-netprobe}
      POSTGRES_USER: ${POSTGRES_USER:-netprobe}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-netprobe}
      
      #Probe Data. Most are default unless specified...
      PROBE_INTERVAL: ${PROBE_INTERVAL:-30}
      PING_COUNT: ${PING_COUNT:-4}
      APP_TIMEZONE: ${APP_TIMEZONE:-UTC}

      # Ping targets
      SITES: ${SITES:-fast.com,google.com,youtube.com}
      ROUTER_IP: ${ROUTER_IP:-}

      # DNS config
      DNS_TEST_SITE: ${DNS_TEST_SITE:-google.com}
      DNS_NAMESERVER_4: ${DNS_NAMESERVER_4:-My_DNS_Server}
      DNS_NAMESERVER_4_IP: ${DNS_NAMESERVER_4_IP:-192.168.1.1}
      
      # Speedtest configuration
      SPEEDTEST_ENABLED: ${SPEEDTEST_ENABLED:-True}
      SPEEDTEST_INTERVAL: ${SPEEDTEST_INTERVAL:-14400}

    ports:
      - "${WEB_PORT:-8080}:8080"

    # Volume only really used if you ever switch to sqlite, but safe to keep..
    volumes:
      - netprobe_data:/data

    labels:
      - "folder.view=netprobe"
      - "net.unraid.docker.managed=composeman"
      - "net.unraid.docker.webui=http://[IP]:[PORT:8080]"
      - "net.unraid.docker.icon=https://github.com/bmartino1/unraid-docker-templates/blob/main/images/netprobe.png?raw=true"

    # Optional: if ping needs extra caps in your environment
    #cap_add:
    #  - NET_RAW
    #  - NET_ADMIN
    #  - SYS_ADMIN

    # Optional: use an existing host network on Unraid (e.g. br0) Best in bridgemode.. 
    #networks:
    #  default:
    #    external: true
    #    name: br0

volumes:
  netprobe_data:
     driver: local
     driver_opts:
       type: none
       device: /mnt/user/appdata/netprobe/sqlite
       o: bind

  netprobe_pgdata:
     driver: local
     driver_opts:
       type: none
       device: /mnt/user/appdata/netprobe/postgres
       o: bind

and a example env file:
image.png

# ---------------------------------------
# NetProbe + Postgres (.env for Unraid)
# This file is read automatically by the
# Docker Compose (compose.manager) plugin
# ---------------------------------------

# -------------------------------
# Core Netprobe settings
# -------------------------------
WEB_PORT=8080
APP_TIMEZONE=UTC

# Probe timing (you can leave defaults if you want)
PROBE_INTERVAL=30
PING_COUNT=4

# -------------------------------
# Database backend (Postgres)
# -------------------------------
# Use Postgres docker variables...
USE_POSTGRES=true
DB_ENGINE=postgres

# Postgres connection details (must match postgres service)
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=netprobe
POSTGRES_USER=netprobe
POSTGRES_PASSWORD=netprobe

# -------------------------------
# Ping targets
# -------------------------------
# Comma-separated list of external sites to ping
SITES=fast.com,google.com,youtube.com

# Router IP on your LAN
ROUTER_IP=192.168.1.1

# -------------------------------
# DNS config
# -------------------------------
DNS_TEST_SITE=google.com

# Only overriding DNS #4 to be your LAN DNS;
# DNS 1–3 will fall back to built-in defaults.
DNS_NAMESERVER_4=My_DNS_Server
DNS_NAMESERVER_4_IP=192.168.1.1

# -------------------------------
# Speedtest configuration
# -------------------------------
SPEEDTEST_ENABLED=True
# 4 hours in seconds
SPEEDTEST_INTERVAL=14400

If Building, I recoined using the update stack button ...
then you can load the web page...

image.png

image.png

Edited by bmartino1
Compose tag change

  • Author

reserved

Installed and working.. Very slick so far.

My need has abated since I moved from flakey point-to-point to buried fiber but still. Nice work.

  • 2 months later...

Hi. Trying this out and I added a bunch of sites to ping.

Should I be able to see the ping latency, jitter, and packet loss to the individual targets in the web gui? I see that the feature is available for the DNS servers.

When I look at the log files, I can see that each of the sites is being pinged.

I wanted to ask since I couldn't find any obvious setting and before I started poking around in the code.

I know it seems like a lot of sites, but I just like to know if there are any problems hitting sites anywhere around the world...

Thanks for any suggestions and all the programming! Seems like a nifty app!

2026-02-04 14:03:58,562 [INFO] ping fast.com -> loss=0.0% avg=31.1ms jitter=0.5ms
2026-02-04 14:04:01,651 [INFO] ping google.com -> loss=0.0% avg=20.2ms jitter=0.9ms
2026-02-04 14:04:04,685 [INFO] ping reddit.com -> loss=0.0% avg=3.9ms jitter=0.8ms
2026-02-04 14:04:07,713 [INFO] ping youtube.com -> loss=0.0% avg=20.4ms jitter=0.5ms
2026-02-04 14:04:10,760 [INFO] ping us-qas-as14907.anchors.atlas.ripe.net -> loss=0.0% avg=36.9ms jitter=0.7ms
2026-02-04 14:04:13,790 [INFO] ping us-atl-as2637.anchors.atlas.ripe.net -> loss=0.0% avg=20.3ms jitter=0.6ms
2026-02-04 14:04:16,843 [INFO] ping us-chi-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=44.0ms jitter=0.6ms
2026-02-04 14:04:19,889 [INFO] ping us-dal-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=36.9ms jitter=0.5ms
2026-02-04 14:04:22,966 [INFO] ping us-lax-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=67.9ms jitter=0.7ms
2026-02-04 14:04:25,997 [INFO] ping us-mia-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=21.8ms jitter=0.8ms
2026-02-04 14:04:29,034 [INFO] ping us-nyc-as14061.anchors.atlas.ripe.net -> loss=0.0% avg=29.1ms jitter=0.5ms
2026-02-04 14:04:32,120 [INFO] ping us-pao-as32.anchors.atlas.ripe.net -> loss=0.0% avg=77.8ms jitter=1.8ms
2026-02-04 14:04:35,205 [INFO] ping us-sjc-as55002.anchors.atlas.ripe.net -> loss=0.0% avg=81.7ms jitter=1.0ms
2026-02-04 14:04:38,456 [INFO] ping us-sea-as55002.anchors.atlas.ripe.net -> loss=0.0% avg=244.8ms jitter=0.6ms
2026-02-04 14:04:41,505 [INFO] ping us-dca-as11039.anchors.atlas.ripe.net -> loss=0.0% avg=37.9ms jitter=1.0ms
2026-02-04 14:04:44,624 [INFO] ping uk-lon-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=110.3ms jitter=0.5ms
2026-02-04 14:04:47,743 [INFO] ping de-fra-as14061.anchors.atlas.ripe.net -> loss=0.0% avg=111.2ms jitter=0.4ms
2026-02-04 14:04:50,873 [INFO] ping ch-zrh-as62371.anchors.atlas.ripe.net -> loss=0.0% avg=124.5ms jitter=7.6ms
2026-02-04 14:04:54,008 [INFO] ping se-sto-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=126.8ms jitter=0.6ms
2026-02-04 14:04:57,230 [INFO] ping au-syd-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=215.2ms jitter=1.6ms
2026-02-04 14:05:00,405 [INFO] ping jp-tyo-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=167.2ms jitter=0.4ms
2026-02-04 14:05:03,656 [INFO] ping sg-sin-as63949-client.anchors.atlas.ripe.net -> loss=0.0% avg=243.3ms jitter=0.5ms
2026-02-04 14:05:13,480 [INFO] Probe ts=1770231826 score=90.58 loss=0.00% latency=75.8ms jitter=0.9ms dns=817.9ms
  • Author
6 minutes ago, MatthewGP said:

Hi. Trying this out and I added a bunch of sites to ping.

Should I be able to see the ping latency, jitter, and packet loss to the individual targets in the web gui? I see that the feature is available for the DNS servers.

When I look at the log files, I can see that each of the sites is being pinged.

I wanted to ask since I couldn't find any obvious setting and before I started poking around in the code.

I know it seems like a lot of sites, but I just like to know if there are any problems hitting sites anywhere around the world...

Thanks for any suggestions and all the programming! Seems like a nifty app!

2026-02-04 14:03:58,562 [INFO] ping fast.com -> loss=0.0% avg=31.1ms jitter=0.5ms
2026-02-04 14:04:01,651 [INFO] ping google.com -> loss=0.0% avg=20.2ms jitter=0.9ms
2026-02-04 14:04:04,685 [INFO] ping reddit.com -> loss=0.0% avg=3.9ms jitter=0.8ms
2026-02-04 14:04:07,713 [INFO] ping youtube.com -> loss=0.0% avg=20.4ms jitter=0.5ms
2026-02-04 14:04:10,760 [INFO] ping us-qas-as14907.anchors.atlas.ripe.net -> loss=0.0% avg=36.9ms jitter=0.7ms
2026-02-04 14:04:13,790 [INFO] ping us-atl-as2637.anchors.atlas.ripe.net -> loss=0.0% avg=20.3ms jitter=0.6ms
2026-02-04 14:04:16,843 [INFO] ping us-chi-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=44.0ms jitter=0.6ms
2026-02-04 14:04:19,889 [INFO] ping us-dal-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=36.9ms jitter=0.5ms
2026-02-04 14:04:22,966 [INFO] ping us-lax-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=67.9ms jitter=0.7ms
2026-02-04 14:04:25,997 [INFO] ping us-mia-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=21.8ms jitter=0.8ms
2026-02-04 14:04:29,034 [INFO] ping us-nyc-as14061.anchors.atlas.ripe.net -> loss=0.0% avg=29.1ms jitter=0.5ms
2026-02-04 14:04:32,120 [INFO] ping us-pao-as32.anchors.atlas.ripe.net -> loss=0.0% avg=77.8ms jitter=1.8ms
2026-02-04 14:04:35,205 [INFO] ping us-sjc-as55002.anchors.atlas.ripe.net -> loss=0.0% avg=81.7ms jitter=1.0ms
2026-02-04 14:04:38,456 [INFO] ping us-sea-as55002.anchors.atlas.ripe.net -> loss=0.0% avg=244.8ms jitter=0.6ms
2026-02-04 14:04:41,505 [INFO] ping us-dca-as11039.anchors.atlas.ripe.net -> loss=0.0% avg=37.9ms jitter=1.0ms
2026-02-04 14:04:44,624 [INFO] ping uk-lon-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=110.3ms jitter=0.5ms
2026-02-04 14:04:47,743 [INFO] ping de-fra-as14061.anchors.atlas.ripe.net -> loss=0.0% avg=111.2ms jitter=0.4ms
2026-02-04 14:04:50,873 [INFO] ping ch-zrh-as62371.anchors.atlas.ripe.net -> loss=0.0% avg=124.5ms jitter=7.6ms
2026-02-04 14:04:54,008 [INFO] ping se-sto-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=126.8ms jitter=0.6ms
2026-02-04 14:04:57,230 [INFO] ping au-syd-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=215.2ms jitter=1.6ms
2026-02-04 14:05:00,405 [INFO] ping jp-tyo-as12008.anchors.atlas.ripe.net -> loss=0.0% avg=167.2ms jitter=0.4ms
2026-02-04 14:05:03,656 [INFO] ping sg-sin-as63949-client.anchors.atlas.ripe.net -> loss=0.0% avg=243.3ms jitter=0.5ms
2026-02-04 14:05:13,480 [INFO] Probe ts=1770231826 score=90.58 loss=0.00% latency=75.8ms jitter=0.9ms dns=817.9ms


Q/A

  1. Should I be able to see the ping latency, jitter, and packet loss to the individual targets in the web gui? I see that the feature is available for the DNS servers.

    *Only in the log the script run a formula to calculate it and adds to the chart web page and SQLite/Postgres engine database, then display it on the container website/chart.

    Example:
    image.png

  2. When I look at the log files, I can see that each of the sites is being pinged.


*This is by design to help with what's happening script-wise and what is running to generate the data...

  1. I wanted to ask since I couldn't find any obvious setting and before I started poking around in the code.
    ?ask what exactly I'm not getting a clear question here. Where to add the extra dns names?

    see docker env:
    https://github.com/bmartino1/NetProbe_Python?tab=readme-ov-file#environment-variables

    by default I only have 1 dns name for it
    image.png

image.png


In theory, you could change and/or add more, but atm I think its set to uses only one DNS location, as one was enough to grab the data required...
https://github.com/bmartino1/NetProbe_Python/blob/main/probe/app.py

I would have to edit some Python variables to open it up for ?csv style dns names? simalr to sites...
like google.com,fast.com,etc...

Code work for me later...
what I'm doing to get the data: line 638
# ---------- DNS probes ----------

dns_times = []

dns_per_server = {}

for server_ip in DNS_SERVERS:

t = measure_dns_latency(DNS_TEST_SITE, server_ip, count=3)

if t is not None:

dns_times.append(t)

dns_per_server[server_ip] = t

avg_dns = statistics.mean(dns_times) if dns_times else 0.0


Currently I'm using sites only for ping to grab that data... not dns. as ping is what would give me the latency / jitter....
image.png

I will look into editing and adding more than one dns for probing. There is quite a bit that would need to be updated, including database integration and website display for more than 1 target...
(Currently I don't have plans to edit / update.)

  1. I know it seems like a lot of sites, but I just like to know if there are any problems hitting sites anywhere around the world...
    sites to ping depend on the internet at large, really. It's why,why by default, I hit speed test locations (speedtest.net,fast.com). IPv6 ping is on by default. ipv4 wants ping off for security against ISP scanning and other surface level attacks.

    sites to check dns like dig xyz... ping is where the latency comes from anyway... dns is more about whether I can resolve the xyz name to a IP...
    image.png

There are additional command options you can run with ping and other python codes and modules to get some data that is already implemented. It's more on what to capture from the Docker log that you see to throw into the database and what to read to form the web html page for its chart statistics... (this is why the api stuff as mention in the github) but that a abit advanced...

  1. Thanks for any suggestions and all the programming! Seems like a nifty app!

    *Thanks, it was a updated redesign of OG Project https://github.com/plaintextpackets/netprobe_lite
    I tried to maintain their config as much as possible. as it was more a issue with database and OG project with bitnami and some things that didn't make sense being separated and multi-stacked...

    That said I highly recommend using Postgres via Compose: https://github.com/bmartino1/NetProbe_Python/blob/main/docker-compose.yml
    This way you can take a look around and set up Grafana if you want additional data outside of what the docker is doing. Generic display of what I would want in a clunky but functional interface...


    I revamped and remade this 1 to fit a nich case need, 2 as I originally was working with someone else to add this to Unraid, and at that time I couldn't devote time to code it and polish it...especially when other projects existed.
    https://forums.unraid.net/topic/163308-docker-netprobe/ and only did what i did when that became inoperable but wanted similar functionality.

    So? what exactly are you needing?

Edited by bmartino1
forum clenup - typo data

  • Author

only think i could think of would be a button to use the windows above to click to see the Docker log in the web ui to see the test for ping running for a ? live view?... something I can add as a feature later. but still have no plans to edit or update as it functions, and as time goes on I get forgetful and don't remember what I did to do what(more because I finished it going through all thigns on my road map/white paper for this docker and got it to a production level for my use case, and see no other reason to add, edit or change in it.) I have slept since then and don't remember all the things I did myself and would have to re look at all code again... See comments in code... So since time has passed, I would most likely vibe code it again later, asking ai (my local containers) to help me re review and make edits... which I don't have time for atm

while clunky. It's functional, and I've done what I can with it at the moment. so if you need something specific, I will gladly try to adapt it or assit you, add to or work around it. for me its a quick run to see network stuff when on site as a analys and pen test.

especially for side work I do with multiple sites to test networks. (stralink locations at one location, from fiber to another to make sure our network is maintained and helping to cut down on traffic.) as I work with friends in solar areas in the states.

  • 2 months later...
On 2/4/2026 at 12:33 PM, bmartino1 said:

only think i could think of would be a button to use the windows above to click to see the Docker log in the web ui to see the test for ping running for a ? live view?... something I can add as a feature later. but still have no plans to edit or update as it functions, and as time goes on I get forgetful and don't remember what I did to do what(more because I finished it going through all thigns on my road map/white paper for this docker and got it to a production level for my use case, and see no other reason to add, edit or change in it.) I have slept since then and don't remember all the things I did myself and would have to re look at all code again... See comments in code... So since time has passed, I would most likely vibe code it again later, asking ai (my local containers) to help me re review and make edits... which I don't have time for atm

while clunky. It's functional, and I've done what I can with it at the moment. so if you need something specific, I will gladly try to adapt it or assit you, add to or work around it. for me its a quick run to see network stuff when on site as a analys and pen test.

especially for side work I do with multiple sites to test networks. (stralink locations at one location, from fiber to another to make sure our network is maintained and helping to cut down on traffic.) as I work with friends in solar areas in the states.

Is there anyway you can add the ability to pick a speed test server?

  • Author
58 minutes ago, gloves259 said:

Is there anyway you can add the ability to pick a speed test server?

Kind of I'm using the default speedtest binary / python. the CLI technically, there is a way with the CLI to specify the speed test server you're testing from.
speedtest-cli: How to Specify a Server - Hivelocity Hosting

Speedtest CLI: Internet speed test for the command line

The speedtest command in the docekr should use speedtest.net and auto pick the closet / best test server automatically...

I will look into it when I have free time and add that as a potential docker environment and feature request.

Asnard above. I have slept since then and we'll need to reread the code to re-add or change features, but that should be a fairly simple change or add-on as I have to change the speed test command and add an ENV to set a site, assuming that the speed test CLI accepts custom inputs for that option.

Edited by bmartino1
data - typo

  • Author
2 hours ago, gloves259 said:

Is there anyway you can add the ability to pick a speed test server?

Feature request updates and changes in coming..

speedtest-cli --list

you will still need to run this line in the Docker to see availbe speedtest id to set it manually...
image.png


Options preferred set at docker env level

image.png

# Optional: force speedtest to use a specific server ID.

# Leave blank to use automatic best server selection.

# The web UI can override this value for a one-off manual run.

SPEEDTEST_SERVER=

you can add the Docker env and number to set the server at the Docker template or manually run them in the index page via the id number...
-Knowledge is needed beforehand thus the env will not be in the template... by default design it will still be set to auto...

There is a Docker tag update change happening soon as I bring this Docker stack back to lattest a templte update will be implemented shortly.
See release notes for updates:
https://github.com/bmartino1/NetProbe_Python/releases/tag/production-fixes

Edited by bmartino1
data - typo

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.