#!/bin/bash # --- CONFIGURATION --- HOST="protonmailrmez3lotccipshtkleegetolb73fuirgj7r4o4vfu7ozyd.onion" PORT=443 INTERVAL=1 # seconds between tests TIMEOUT_SEC=5 # Max time allowed for curl to complete (5 seconds) TOR_PROXY="socks5h://192.168.42.1:9050" # Standard Tor SOCKS5 proxy address (MUST BE RUNNING) COUNT=0 # Total attempts SUCCESS=0 # Successful connections FAILED=0 # **NOVÝ STĹPEC: Neúspešné pripojenia** TOTAL_TIME=0 # Sum of successful connection times (ms) MIN_TIME=999999 # Minimum connection time (ms) MAX_TIME=0 # Maximum connection time (ms) LOGFILE="./tcpstat.log" # --- TIME TRACKING --- # Unix epoch in seconds for easy duration calculation START_SCRIPT_EPOCH=$(date +%s) # Human-readable start time for output START_SCRIPT_HUMAN=$(date +'%Y-%m-%d %H:%M:%S') # --- CLEANUP FUNCTION (TRAP) --- # This function runs when the script receives INT (Ctrl+C) or TERM signal cleanup() { END_SCRIPT_EPOCH=$(date +%s) END_SCRIPT_HUMAN=$(date +'%Y-%m-%d %H:%M:%S') DURATION=$((END_SCRIPT_EPOCH - START_SCRIPT_EPOCH)) # Calculate average time for cleanup summary if [ $SUCCESS -gt 0 ]; then AVG_TIME=$((TOTAL_TIME / SUCCESS)) else AVG_TIME=0 MIN_TIME=0 MAX_TIME=0 fi # Print the required time and summary statistics echo -e "\n\n--- TERMINATION STATISTICS (CTRL+C) ---" echo "Pinging started: $START_SCRIPT_HUMAN" echo "Pinging finished: $END_SCRIPT_HUMAN" echo "Total duration: $DURATION seconds" echo -e "\n--- TCP PING SUMMARY ---" echo "Total requests sent: $COUNT" echo "Successful connections: $SUCCESS" echo "Failed connections: $FAILED" # Zobrazenie neúspešných if [ $COUNT -gt 0 ]; then LOSS_PERCENT=$((100*(COUNT-SUCCESS)/COUNT)) echo "Loss: $LOSS_PERCENT%" else echo "Loss: 0%" fi echo "Minimum time: $MIN_TIME ms" echo "Average time: $AVG_TIME ms" echo "Maximum time: $MAX_TIME ms" echo "Log file: $LOGFILE" # Exit the script exit 0 } # Set the 'cleanup' function to handle INT (Ctrl+C) and TERM signals trap cleanup INT TERM # --- HEADER --- echo "Starting TCP ping to $HOST:$PORT every $INTERVAL sec (via $TOR_PROXY)" echo -e "\nPress Ctrl+C to display statistics and exit." echo "Timestamp,Seq,Result,Time_ms" >> "$LOGFILE" # --- MAIN LOOP --- while true; do COUNT=$((COUNT + 1)) # Get start time in milliseconds   START=$(date +%s%N | cut -b1-13) # TCP check using curl through Tor SOCKS5 proxy # --head: Only retrieve headers (faster) # -m $TIMEOUT_SEC: Max time allowed # --proxy $TOR_PROXY: Explicitly use Tor SOCKS proxy # -s: Silent mode, -o /dev/null: Discard output if curl --head -m $TIMEOUT_SEC --proxy "$TOR_PROXY" -s -o /dev/null "https://$HOST:$PORT"; then # --- SUCCESS BLOCK --- END=$(date +%s%N | cut -b1-13) TIME=$((END - START)) SUCCESS=$((SUCCESS + 1)) TOTAL_TIME=$((TOTAL_TIME + TIME)) (( TIME < MIN_TIME )) && MIN_TIME=$TIME (( TIME > MAX_TIME )) && MAX_TIME=$TIME RESULT="OK" else # --- FAIL BLOCK --- END=$(date +%s%N | cut -b1-13) TIME=$((END - START)) RESULT="FAIL" FAILED=$((FAILED + 1)) # **Inkrementácia zlyhaní** fi # Safe average calculation for display if [ $SUCCESS -gt 0 ]; then AVG_TIME=$((TOTAL_TIME / SUCCESS)) else AVG_TIME=0 # If no success, reset min/max for accurate summary output on exit if [ $COUNT -gt 0 ]; then MIN_TIME=0 MAX_TIME=0 fi fi # Log to file and display status on the same line echo "$(date +'%Y-%m-%d %H:%M:%S'),$COUNT,$RESULT,$TIME" >> "$LOGFILE" # Pridané zobrazenie FAILED na termináli echo -ne "\nSent: $COUNT | Success: $SUCCESS | Failed: $FAILED | Loss: $((100*(COUNT-SUCCESS)/COUNT))% | Min: $MIN_TIME ms | Avg: $AVG_TIME ms | Max: $MAX_TIME ms" sleep $INTERVAL done