Sync all scripts from website downloads — 352 scripts total

Includes updated JS challenge scripts with Claude-User whitelist,
same-site referer bypass, Blackbox-Exporter allowed bot, and all
new exporters, cheat sheets, and automation scripts.
This commit is contained in:
2026-05-25 03:31:08 +02:00
parent dbd6bf0324
commit a1a17e81a1
332 changed files with 174509 additions and 1106 deletions
+78 -62
View File
@@ -1,31 +1,46 @@
#!/bin/bash
################################################################################
# Script Name: speedtest-metrics.sh
# Description: Prometheus exporter for internet and LAN speed metrics
#
# Collects internet speed tests via Ookla Speedtest CLI against multiple
# servers and local network tests via iperf3. Outputs Prometheus-formatted
# metrics with per-server labels.
#
# Author: Phil Connor
# Contact: contact@mylinux.work
# Website: https://mylinux.work
# License: MIT
# Version: 3.0
#
# Usage:
# # Output to stdout
# ./speedtest-metrics.sh
#
# # Textfile collector mode (atomic write)
# ./speedtest-metrics.sh --textfile
#
# # Custom output file
# ./speedtest-metrics.sh -o /path/to/metrics.prom
#
# # HTTP server mode
# ./speedtest-metrics.sh --http
#
################################################################################
#############################################################
#### Speedtest Metrics Exporter ####
#### Internet & LAN speed metrics for Prometheus ####
#### ####
#### Author: Phil Connor ####
#### Contact: contact@mylinux.work ####
#### License: MIT ####
#### Version: 2.1 ####
#### ####
#### Usage: ./speedtest-metrics.sh [OPTIONS] ####
#############################################################
set -euo pipefail
#########################
### Output Mode ###
#########################
# ============================================================================
# CONFIGURATION VARIABLES
# ============================================================================
LISTEN_PORT="${SPEEDTEST_EXPORTER_PORT:-9196}"
TEXTFILE_DIR="/var/lib/node_exporter"
OUTPUT_FILE=""
HTTP_MODE=false
HOSTNAME=$(hostname)
#########################
### Parse Arguments ###
#########################
# ============================================================================
# ARGUMENT PARSING
# ============================================================================
show_help() {
cat <<EOF
@@ -122,14 +137,20 @@ parse_args() {
parse_args "$@"
#########################
### Metrics Collection ###
#########################
# ============================================================================
# METRICS COLLECTION
# ============================================================================
TEMP_FILE="/tmp/speedtest_$$"
cleanup() {
rm -f "$TEMP_FILE"
}
trap cleanup EXIT
collect_metrics() {
# Configuration
TEMP_FILE="/tmp/speedtest_$$"
IPERF_SERVER="${IPERF_SERVER:-192.168.1.100}" # Set to your local iperf3 server IP
IPERF_PORT="${IPERF_PORT:-9182}" # iperf3 port
# Multiple speedtest servers - add/remove server IDs as needed
@@ -138,11 +159,6 @@ IPERF_PORT="${IPERF_PORT:-9182}" # iperf3 port
# New York: 3737 (Verizon), 11570 (Optimum), 17395 (Spectrum)
SPEEDTEST_SERVERS="${SPEEDTEST_SERVERS:-auto}" # Comma-separated server IDs or "auto"
cleanup() {
rm -f "$TEMP_FILE"
}
trap cleanup EXIT
# Record script start time
SCRIPT_START_TIME=$(date +%s.%N)
@@ -322,7 +338,7 @@ for i in "${!SERVER_IDS[@]}"; do
result_url="${RESULT_URLS[$i]}"
cat <<EOF
internet_speedtest_latency{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_LATENCIES[$i]}
internet_speedtest_latency{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_LATENCIES[$i]}
EOF
done
@@ -339,7 +355,7 @@ for i in "${!SERVER_IDS[@]}"; do
server_country="${SERVER_COUNTRIES[$i]}"
cat <<EOF
internet_speedtest_latency_low{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_LOWS[$i]}
internet_speedtest_latency_low{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_LOWS[$i]}
EOF
done
@@ -356,7 +372,7 @@ for i in "${!SERVER_IDS[@]}"; do
server_country="${SERVER_COUNTRIES[$i]}"
cat <<EOF
internet_speedtest_latency_high{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_HIGHS[$i]}
internet_speedtest_latency_high{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_HIGHS[$i]}
EOF
done
@@ -373,7 +389,7 @@ for i in "${!SERVER_IDS[@]}"; do
server_country="${SERVER_COUNTRIES[$i]}"
cat <<EOF
internet_speedtest_jitter{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_JITTERS[$i]}
internet_speedtest_jitter{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PING_JITTERS[$i]}
EOF
done
@@ -390,7 +406,7 @@ for i in "${!SERVER_IDS[@]}"; do
server_country="${SERVER_COUNTRIES[$i]}"
cat <<EOF
internet_speedtest_download{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${DOWNLOAD_MBPS[$i]}
internet_speedtest_download{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${DOWNLOAD_MBPS[$i]}
EOF
done
@@ -407,7 +423,7 @@ for i in "${!SERVER_IDS[@]}"; do
server_country="${SERVER_COUNTRIES[$i]}"
cat <<EOF
internet_speedtest_download_size{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${DOWNLOAD_SIZES[$i]}
internet_speedtest_download_size{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${DOWNLOAD_SIZES[$i]}
EOF
done
@@ -424,7 +440,7 @@ for i in "${!SERVER_IDS[@]}"; do
server_country="${SERVER_COUNTRIES[$i]}"
cat <<EOF
internet_speedtest_upload{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${UPLOAD_MBPS[$i]}
internet_speedtest_upload{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${UPLOAD_MBPS[$i]}
EOF
done
@@ -441,7 +457,7 @@ for i in "${!SERVER_IDS[@]}"; do
server_country="${SERVER_COUNTRIES[$i]}"
cat <<EOF
internet_speedtest_upload_size{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${UPLOAD_SIZES[$i]}
internet_speedtest_upload_size{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${UPLOAD_SIZES[$i]}
EOF
done
@@ -458,7 +474,7 @@ for i in "${!SERVER_IDS[@]}"; do
server_country="${SERVER_COUNTRIES[$i]}"
cat <<EOF
internet_speedtest_packet_loss{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PACKET_LOSSES[$i]}
internet_speedtest_packet_loss{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${PACKET_LOSSES[$i]}
EOF
done
@@ -475,7 +491,7 @@ for i in "${!SERVER_IDS[@]}"; do
server_country="${SERVER_COUNTRIES[$i]}"
cat <<EOF
internet_speedtest_timestamp{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${TEST_TIMESTAMPS[$i]}
internet_speedtest_timestamp{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${TEST_TIMESTAMPS[$i]}
EOF
done
@@ -495,7 +511,7 @@ for i in "${!SERVER_IDS[@]}"; do
result_url="${RESULT_URLS[$i]}"
cat <<EOF
internet_speedtest_info{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country",external_ip="$external_ip",isp="$isp",result_url="$result_url"} 1
internet_speedtest_info{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country",external_ip="$external_ip",isp="$isp",result_url="$result_url"} 1
EOF
done
@@ -512,7 +528,7 @@ for i in "${!SERVER_IDS[@]}"; do
server_country="${SERVER_COUNTRIES[$i]}"
cat <<EOF
internet_speedtest_success{server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${SUCCESSES[$i]}
internet_speedtest_success{hostname="$HOSTNAME",server_id="$server_id",server_name="$server_name",server_location="$server_location",server_country="$server_country"} ${SUCCESSES[$i]}
EOF
done
@@ -520,82 +536,82 @@ cat <<EOF
# HELP local_network_download Local network download speed in Mbps
# TYPE local_network_download gauge
local_network_download $local_download_mbps
local_network_download{hostname="$HOSTNAME"} $local_download_mbps
# HELP local_network_upload Local network upload speed in Mbps
# TYPE local_network_upload gauge
local_network_upload $local_upload_mbps
local_network_upload{hostname="$HOSTNAME"} $local_upload_mbps
# HELP local_network_download_bytes Total bytes downloaded in local network test
# TYPE local_network_download_bytes gauge
local_network_download_bytes $local_download_bytes
local_network_download_bytes{hostname="$HOSTNAME"} $local_download_bytes
# HELP local_network_upload_bytes Total bytes uploaded in local network test
# TYPE local_network_upload_bytes gauge
local_network_upload_bytes $local_upload_bytes
local_network_upload_bytes{hostname="$HOSTNAME"} $local_upload_bytes
# HELP local_network_download_retransmits TCP retransmissions during download test
# TYPE local_network_download_retransmits gauge
local_network_download_retransmits $local_download_retransmits
local_network_download_retransmits{hostname="$HOSTNAME"} $local_download_retransmits
# HELP local_network_upload_retransmits TCP retransmissions during upload test
# TYPE local_network_upload_retransmits gauge
local_network_upload_retransmits $local_upload_retransmits
local_network_upload_retransmits{hostname="$HOSTNAME"} $local_upload_retransmits
# HELP local_network_download_rtt Mean round-trip time during download test in milliseconds
# TYPE local_network_download_rtt gauge
local_network_download_rtt $local_download_rtt
local_network_download_rtt{hostname="$HOSTNAME"} $local_download_rtt
# HELP local_network_upload_rtt Mean round-trip time during upload test in milliseconds
# TYPE local_network_upload_rtt gauge
local_network_upload_rtt $local_upload_rtt
local_network_upload_rtt{hostname="$HOSTNAME"} $local_upload_rtt
# HELP local_network_download_rtt_variance RTT variance during download test in milliseconds
# TYPE local_network_download_rtt_variance gauge
local_network_download_rtt_variance $local_download_rtt_var
local_network_download_rtt_variance{hostname="$HOSTNAME"} $local_download_rtt_var
# HELP local_network_upload_rtt_variance RTT variance during upload test in milliseconds
# TYPE local_network_upload_rtt_variance gauge
local_network_upload_rtt_variance $local_upload_rtt_var
local_network_upload_rtt_variance{hostname="$HOSTNAME"} $local_upload_rtt_var
# HELP local_network_download_cpu_local Local CPU utilization during download test (percentage)
# TYPE local_network_download_cpu_local gauge
local_network_download_cpu_local $local_download_cpu_local
local_network_download_cpu_local{hostname="$HOSTNAME"} $local_download_cpu_local
# HELP local_network_upload_cpu_local Local CPU utilization during upload test (percentage)
# TYPE local_network_upload_cpu_local gauge
local_network_upload_cpu_local $local_upload_cpu_local
local_network_upload_cpu_local{hostname="$HOSTNAME"} $local_upload_cpu_local
# HELP local_network_download_cpu_remote Remote CPU utilization during download test (percentage)
# TYPE local_network_download_cpu_remote gauge
local_network_download_cpu_remote $local_download_cpu_remote
local_network_download_cpu_remote{hostname="$HOSTNAME"} $local_download_cpu_remote
# HELP local_network_upload_cpu_remote Remote CPU utilization during upload test (percentage)
# TYPE local_network_upload_cpu_remote gauge
local_network_upload_cpu_remote $local_upload_cpu_remote
local_network_upload_cpu_remote{hostname="$HOSTNAME"} $local_upload_cpu_remote
# HELP local_network_download_congestion_window Maximum TCP congestion window size during download test in bytes
# TYPE local_network_download_congestion_window gauge
local_network_download_congestion_window $local_download_congestion_window
local_network_download_congestion_window{hostname="$HOSTNAME"} $local_download_congestion_window
# HELP local_network_upload_congestion_window Maximum TCP congestion window size during upload test in bytes
# TYPE local_network_upload_congestion_window gauge
local_network_upload_congestion_window $local_upload_congestion_window
local_network_upload_congestion_window{hostname="$HOSTNAME"} $local_upload_congestion_window
# HELP local_network_test_success Whether local network test succeeded (1=success, 0=failed)
# TYPE local_network_test_success gauge
local_network_test_success $((local_download_success && local_upload_success))
local_network_test_success{hostname="$HOSTNAME"} $((local_download_success && local_upload_success))
# HELP speedtest_script_runtime_seconds Total script execution time in seconds
# TYPE speedtest_script_runtime_seconds gauge
speedtest_script_runtime_seconds $SCRIPT_RUNTIME
speedtest_script_runtime_seconds{hostname="$HOSTNAME"} $SCRIPT_RUNTIME
EOF
}
#########################
### Output Handling ###
#########################
# ============================================================================
# OUTPUT HANDLING
# ============================================================================
write_output() {
local metrics