Pinging.net - Monitor Your Internet Connection

Related tags

Editors pinging
Overview

Pinging.net

Screenshot

Pinging.net quickly determines if you are online by running multiple tests. It then continues to monitor your connection via repeated tests including a "web ping" every second to help identify intermittent network issues.

Project goals

  • Reliable. Do not make the user guess if the website isn't loading because of their internet or if the website is down.
  • Fast website. Do not make the user wait, even on a slow connection. Time to first paint, total page size, and time to first test result should all be minimal.
  • Provide multiple tests that all work with just the browser.
  • Possible to understand test results for non-technical users.
  • Provide concise educational descriptions and links to learn more.
  • Allow for hosting outside of pinging.net (e.g. on private clouds).

Non-goals (currently):

  • Speed test. There are many websites that provide this and the hosting costs would increase dramatically.

The Tests

Web Ping

A Web Ping is sent every second. Ping is a common network testing utility. A packet is sent to a computer over the network which replies with a response packet. If and how fast a response is received help determine network connection quality. Normally ping packets are sent using the ICMP protocol but that is not possible from a web page. Instead a WebRTC data channel message is sent to and returned from the server. UDP is used for the underlying transport mechanism so dropped messages are not retried which is desired in order to determine packet loss.

The round trip time of each ping is graphed as a dark green horizontal line for each second. It is also displayed in milliseconds for the last received ping and the average for all successful pings.

Packet loss is when a ping response is not received. It is graphed as a red square. The percent of all pings that were lost is also displayed. Packet loss is caused by many different factors and potentially indicates issues with your internet connection.

HTTP Test

Makes a HTTP POST request with a random string body and verifies it is returned properly. Caching of the request is also explicitly disabled. This test is run every 30 seconds.

DNS Test

Test DNS is working by making a HTTP GET request to a [random-number]dns-check.pinging.net. Caching is explicitly disabled and the random number part of the subdomain prevents common caching of the DNS lookup. This test is run every 30 seconds.

Browser Check

Web browsers report if they believe you are offline. If this check is failing it means you are likely not connected to your WiFi, cellular connection or ethernet cord. This is a basic check and it will often pass even if you are not connected. This check is continuously monitored by your browser.

Initial Load Check

Caching is disabled for this site so if this site loads it is a strong indication your internet is working at the time of loading the site.

Architecture

The backend is a single binary written in Rust that handles static file serving, APIs (including WebRTC), and www and https redirects. The frontend is static html and TypeScript. Pinging.net is deployed to inexpensive virtual private servers in multiple data centers and a DNS load balancer (currently CloudFlare) is used to route traffic to the closest server.

Since there is no protocol level load balancer (e.g. HTTP/WebRTC) or reverse proxy (e.g. no nginx), deployments are done by spinning up a new server and switching the DNS load balancer to use the new IP. The old IP is kept running for an hour to allow DNS caches to update and existing clients to refresh to the new server.

Building and Running

Ensure the following dependencies are installed:

  • rust
  • nodejs
  • npm
  • jq

Then run scripts/build (build only), scripts/run_locally (build and run locally), or scripts/deploy (build then deploy to IP address).

Currently only Linux is tested. I am open to contributions to help with developing or running on other platforms.

Contributing

Contributions are welcome. Thanks in advance for your help.

Acknowledgements

Thanks to all of the authors of the dependencies and utilities that made pinging possible.

License and Copyright

Licensed under Apache-2.0. Copyrights are retained by their contributors.

Comments
  • build(deps): bump terser from 5.14.1 to 5.14.2 in /frontend

    build(deps): bump terser from 5.14.1 to 5.14.2 in /frontend

    Bumps terser from 5.14.1 to 5.14.2.

    Changelog

    Sourced from terser's changelog.

    v5.14.2

    • Security fix for RegExps that should not be evaluated (regexp DDOS)
    • Source maps improvements (#1211)
    • Performance improvements in long property access evaluation (#1213)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • build(deps): bump axum-core from 0.2.6 to 0.2.8 in /backend

    build(deps): bump axum-core from 0.2.6 to 0.2.8 in /backend

    Bumps axum-core from 0.2.6 to 0.2.8.

    Release notes

    Sourced from axum-core's releases.

    axum-core - v0.2.8

    Security

    • breaking: Added default limit to how much data Bytes::from_request will consume. Previously it would attempt to consume the entire request body without checking its length. This meant if a malicious peer sent an large (or infinite) request body your server might run out of memory and crash.

      The default limit is at 2 MB and can be disabled by adding the new DefaultBodyLimit::disable() middleware. See its documentation for more details.

      This also applies to String which used Bytes::from_request internally.

      (#1346)

    #1346: tokio-rs/axum#1346

    axum-core - v0.2.7

    • fix: Fix typos in RequestParts docs (#1147)

    #1147: tokio-rs/axum#1147

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies rust 
    opened by dependabot[bot] 0
  • Display message if WebRTC Control extension is blocking web pings

    Display message if WebRTC Control extension is blocking web pings

    Its confusing if Web Pings show up as yellow just because WebRTC is blocked but the internet connection is fine. Lets try to make it more clear.

    From https://www.reddit.com/r/HomeNetworking/comments/vmvuuu/comment/ie3xlwi/

    opened by benhansen-io 0
  • Reduce HTML duplication

    Reduce HTML duplication

    There is some duplication between the index.html, about.html and locations.html that could be reduced with Parcel's PostHTML support. https://parceljs.org/languages/html/#posthtml

    frontend 
    opened by benhansen-io 0
  • Test and handle clock changes better

    Test and handle clock changes better

    I haven't made a lot of effort to handle system time going forwards or backwards by substantial amounts. We should either detect it and ask the user to reload or handle it gracefully.

    frontend 
    opened by benhansen-io 0
  • Reduce UI affects on reported latency

    Reduce UI affects on reported latency

    Scrolling a lot can cause the latency to increase for some packets. I suspect this is an implementation artifact and not actually an increase in the network latency. Maybe we can run the latency gathering code in a web worker or something to reduce the effect?

    frontend 
    opened by benhansen-io 0
Owner
Ben Hansen
Ben Hansen
Sweeten your JavaScript.

Hygienic Macros for JavaScript! Macros allow you to build the language of your dreams. Sweeten JavaScript by defining new syntax for your code. Curren

null 4.6k Dec 29, 2022
Enjoy creating cover image for your hashnode blog like never before, get started in seconds 🎉

Slickr ✨️ View Demo · Report Bug · Request Feature Introducing Slickr ✌️ Slick is the most powerful and the easiest app to create beautiful cover imag

Savio Martin 469 Dec 21, 2022
Create elegant screenshots of your source code. Built with SolidJS

Create elegant code screenshots of your source code. Introduction CodeImage is the newest tool to help developers to create beautiful screenshots of t

Riccardo Perra 602 Jan 3, 2023
Customize your README.md file with ready-to-use sections in a simple way with the web editor

myreadme Customize your README.md file with ready-to-use sections in a simple way with the web editor Docker version Docker Hub docker run -p 7000:300

Nelson Hernández 7 Jul 25, 2022
Test your internet connection speed and ping using speedtest.net from the CLI

speed-test Test your internet connection speed and ping using speedtest.net from the CLI Install Ensure you have Node.js version 8+ installed. Then ru

Sindre Sorhus 3.8k Jan 7, 2023
Check if the internet connection is up

is-online Check if the internet connection is up Works in Node.js and the browser (with a bundler). In the browser you have navigator.onLine, but it's

Sindre Sorhus 1.1k Jan 1, 2023
DNS-Blocklists: For a better internet - keep the internet clean!

DNS Blocklists - For a better internet! Multi - Cleans the Internet and protects your privacy! An all in one blocklist based on the OISD blocklist, ba

Gerd 280 Jan 2, 2023
Open-source NFID SDK for Internet Identity, a blockchain authentication system for the Internet Computer.

NFID-SDK is an open source software development kit that contains examples and packages for developers to integrate NFID into your application

Internet Identity Labs 15 Dec 23, 2022
Talk to anyone connected to your network, be it LAN or your hotspot. Doesn't require internet.

Apophis CLI to talk to anyone connected to your network, be it LAN or your hotspot. Doesn't require internet. Installation Make sure you have NodeJS (

Saurav Pal 3 Oct 16, 2022
Modular Redis connection and PUBSUB subscription manager for node. Easily extendable. Built for performance, powered by ioredis.

RediBox Redis connection and PUBSUB subscription manager for node. Built for performance, powered by ioredis (for now). Maintained by TeamFA. What is

RediBox 83 Dec 15, 2022
Very minimalistic boilerplate to start most Typescript Express projects. Includes Mongodb connection via Mongoose with a sample post model.

Minimalist express-typescript-boilerplate Available Scripts - `tsc' - builds the tsc project to the dist folder - `build` - cleans the previous build

Black Axe 16 Dec 13, 2022
💻 ssher.vim is interacting remote machines(only linux) through ssh connection

?? ssher.vim is interacting remote machines(only linux) through ssh connection

Luma 3 Feb 21, 2022
CyberGraph is a 3D-graph based, user based social connection explorer

CyberGraph is a 3D-graph based, user based social connection explorer. It has some cool features like 3d node graph, dynamic loading bar, immersive user experience, cyber mode(10-hops friendship network display) and focus mode(aggregated connection display).

CyberConnect 16 Nov 25, 2022
Run SPARQL/SQL queries directly on Virtuoso database with connection pool support.

?? virtuoso-connector Package that allows you to create a direct connection to the Virtuoso database and run queries on it. Connection can be used to

Tomáš Dvořák 6 Nov 15, 2022
The user interface of the Restreamer for the connection to the Core application.

Restreamer-UI The user interface of the Restreamer for the connection to the Core application. React Material-UI (MUI) Development For the Restreamer

datarhei 12 Dec 21, 2022
A remake of the famous Google Chrome Dinosaur game that comes-up when we're out of connection.

Dino Game Preview: Project: This is a remake of the classic "easter egg" T-Rex game that we can play on Google Chrome when we're out of connection. Ho

Marlon James 4 Nov 9, 2022
A clean-looking, secure, MySQL/MariaDB remote connection terminal made in NodeJS

NodeJS MySQL/MariaDB Terminal NodeJS MySQL/MariaDB Terminal is a remote terminal for MySQL/MariaDB databases, which works in the same way as the offic

TeknoSenpai 5 Jun 24, 2022
An abstraction layer on top of @replit/crosis that makes Repl connection management and operations so easy, a Furret could do it! 🎉

Crosis4Furrets An abstraction layer on top of @replit/crosis that makes Repl connection management and operations so easy, a Furret could do it! ?? In

Ray 18 Dec 29, 2022
NestJS implementation of client and strategy hasn't enough features for work with RabbitMQ so i developed this one (basically, just a wrapper for amqp-connection-manager)

NestJS RabbitMQ Client and strategy NestJS implementation of client and strategy hasn't enough features for work with RabbitMQ so i developed this one

ilink 5 Sep 6, 2022
to choose the best one of Gcore‘IPs for connection with lowest latency.

GcoreCDNIPSelector to choose the best IP from Gcore-CDN to reach the lowest latency and stable connections. Background Gcore's CDN provide a smooth ex

Bruce 6 Nov 5, 2022