Skip to content
/ ping Public

Checks and logs network traffic with tools and scripts to discover ping problems and analyze disconnects

Notifications You must be signed in to change notification settings

mistalan/ping

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

204 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ping

CI Deploy CodeQL Windows Testing

Network monitoring and diagnostics toolkit for discovering ping problems, analyzing disconnects, and logging network status.

Overview

This repository provides three complementary tools for comprehensive network monitoring, plus a simple GUI for easy control:

  1. NetWatch.ps1 - Windows PowerShell script for continuous network monitoring (ping, DNS, adapter status)
  2. fritzlog_pull.py - Python script for logging FRITZ!Box router status via TR-064 API
  3. fritzbox_restart.py - Python script for sending restart commands to FRITZ!Box router via TR-064 API
  4. FritzBoxRestart/ - Android app for restarting FRITZ!Box router from your phone
  5. analyze_netlogs.py - Python script for analyzing collected logs and detecting network incidents
  6. visualize_incidents.py - Python script for generating graphical visualizations and HTML reports from incident data
  7. NetWatchUI.ps1 - Windows Forms GUI for configuring, starting, stopping, analyzing, and visualizing network monitoring

Prerequisites

For NetWatch.ps1

  • Windows PowerShell 5+ or PowerShell Core 7+
  • Windows OS (uses Windows-specific networking cmdlets)
  • Administrator privileges recommended for full network adapter access

For Python Scripts

  • Python 3.10 or higher
  • Required Python packages:
    • fritzconnection (for fritzlog_pull.py and fritzbox_restart.py)
    • pandas (optional, for analyze_netlogs.py - improves performance)
    • matplotlib (optional, for analyze_netlogs.py plotting features)

For Android App

  • Android 7.0 (API 24) or higher
  • FRITZ!Box router accessible on your local network
  • TR-064 API enabled on FRITZ!Box (usually enabled by default)

Installation

Installing Python Dependencies

# Required for fritzlog_pull.py
pip install fritzconnection

# Optional for analyze_netlogs.py (recommended)
pip install pandas matplotlib

No Installation Needed for NetWatch.ps1

The PowerShell script can be run directly without installation.

Usage

NetWatchUI.ps1 - GUI Control Panel (Recommended)

The easiest way to use the network monitoring tools is through the graphical user interface.

Launch the UI:

.\NetWatchUI.ps1

Features:

  • Configuration Tab: Set all parameters for NetWatch, FRITZ!Box logging, and analysis
    • Configure monitoring interval, output paths, and ping targets
    • Set FRITZ!Box credentials and connection settings
    • Define analysis thresholds for latency and packet loss
  • Control Tab: Start, stop, and analyze monitoring
    • Start/Stop tracking with a single button click
    • Restart FRITZ!Box router with one click (with confirmation dialog)
    • View real-time activity log
    • Run log analysis and generate incident reports
    • Generate graphical visualizations of incidents
    • Quick access to log folder

Quick Start:

  1. Launch NetWatchUI.ps1
  2. Go to the Configuration tab and adjust settings (or use defaults)
  3. Switch to the Control tab
  4. Click "Start Tracking" to begin monitoring
  5. Let it run for a while to collect data
  6. Click "Stop Tracking" when done
  7. Click "Analyze Logs" to generate incident reports

The UI runs both NetWatch.ps1 and fritzlog_pull.py in the background and provides a convenient way to control them without using the command line.

NetWatch.ps1 - Network Monitor

Continuously monitors network status by checking adapter state, pinging multiple targets, testing DNS resolution, and logging all data to CSV.

Basic usage:

.\NetWatch.ps1

With custom parameters:

.\NetWatch.ps1 -IntervalSeconds 60 -OutCsv "C:\Logs\network.csv" -PingTargets @("8.8.8.8", "1.1.1.1")

Parameters:

  • -IntervalSeconds - Monitoring interval in seconds (default: 30)
  • -OutCsv - Output CSV file path (default: ~/Documents/Ping/Log/netwatch_log.csv)
  • -PingTargets - Array of targets to ping (default: @("8.8.8.8","1.1.1.1","192.168.178.1","www.riotgames.com"))

What it monitors:

  • Active network adapter status and media connection state
  • IPv4/IPv6 configuration
  • Default gateway
  • DNS resolution (tests www.google.com)
  • Ping latency and packet loss to multiple targets

Output format: CSV file with columns: timestamp, adapter, media_status, ipv4, ipv6_enabled, gateway, dns_ok, dns_ms, and ping statistics (avg_ms and loss_pct) for each target.

The script runs indefinitely until stopped with Ctrl+C. Output directory is created automatically if it doesn't exist.

fritzlog_pull.py - FRITZ!Box Logger

Logs FRITZ!Box router status including WAN connection state, uptime, external IP, traffic counters, and DSL link status.

Basic usage:

python3 fritzlog_pull.py --password YOUR_PASSWORD

With custom parameters:

python3 fritzlog_pull.py --host 192.168.178.1 --password YOUR_PASSWORD --interval 60 --out ~/logs/fritz.csv

Parameters:

  • --host - FRITZ!Box IP address (default: 192.168.178.1)
  • --user - FRITZ!Box username (default: None, often not needed for older setups)
  • --password - FRITZ!Box password (required)
  • --interval - Logging interval in seconds (default: 30)
  • --out - Output CSV file path (default: ~/Documents/Ping/Log/fritz_status_log.csv)

What it logs:

  • WAN connection status
  • Connection uptime in seconds
  • External IP address
  • Last connection error
  • Total bytes sent/received
  • DSL link status (if available)

Output format: CSV file with columns: timestamp, wan_connection_status, wan_uptime_s, wan_external_ip, wan_last_error, common_bytes_sent, common_bytes_recv, dsl_link_status.

The script runs indefinitely until stopped with Ctrl+C. Output directory is created automatically if it doesn't exist.

fritzbox_restart.py - FRITZ!Box Restart

Sends a restart command to FRITZ!Box router via TR-064 API. This is useful for automating router reboots or resetting the connection when troubleshooting network issues.

Basic usage:

python3 fritzbox_restart.py --password YOUR_PASSWORD

With custom parameters:

python3 fritzbox_restart.py --host 192.168.178.1 --user admin --password YOUR_PASSWORD --timeout 10

Skip confirmation prompt:

python3 fritzbox_restart.py --password YOUR_PASSWORD --yes

Parameters:

  • --host - FRITZ!Box IP address (default: 192.168.178.1)
  • --user - FRITZ!Box username (optional)
  • --password - FRITZ!Box password (required)
  • --timeout - Connection timeout in seconds (default: 10)
  • --yes - Skip confirmation prompt

What it does:

  • Connects to FRITZ!Box using TR-064 API
  • Sends DeviceConfig:1 Reboot command
  • Confirms success or reports errors
  • The router will reboot and be unavailable for 1-2 minutes

GUI Integration: The restart functionality is integrated into NetWatchUI.ps1 in the Control tab as "Restart FRITZ!Box" button. The GUI automatically uses the credentials from the Configuration tab and displays a confirmation dialog before restarting.

Safety: The script requires explicit confirmation (unless --yes flag is used) to prevent accidental reboots. When used via the GUI, a warning dialog is always shown.

FritzBoxRestart/ - Android App

A simple Android application to restart your FRITZ!Box router directly from your phone.

Features:

  • Simple, clean user interface
  • Password input with show/hide toggle
  • Autofill support for password managers (Google/Samsung)
  • Fingerprint unlock support via password managers
  • Confirmation dialog before restart
  • Real-time status updates
  • No Play Store required - can be sideloaded

Installation:

  1. Build the APK using Android Studio
  2. Transfer to your phone and install
  3. See FritzBoxRestart/README.md for detailed instructions

Usage:

  1. Open the app
  2. Enter FRITZ!Box IP address (default: 192.168.178.1)
  3. Enter password (supports autofill from password managers)
  4. Tap "Restart FRITZ!Box"
  5. Confirm in the dialog
  6. Wait 1-2 minutes for reboot

Requirements:

  • Android 7.0 (API 24) or higher
  • FRITZ!Box accessible on local network
  • TR-064 API enabled on FRITZ!Box

For complete documentation, see FritzBoxRestart/README.md.

analyze_netlogs.py - Log Analyzer

Analyzes NetWatch and FRITZ!Box logs to detect and report network incidents such as latency spikes, packet loss, disconnects, and configuration changes.

Basic usage:

python3 analyze_netlogs.py --netwatch netwatch_log.csv --fritz fritz_status_log.csv

With custom parameters:

python3 analyze_netlogs.py --netwatch netwatch_log.csv --fritz fritz_status_log.csv --out incidents.csv --latency 50 --loss 5.0 --plots

Parameters:

  • --netwatch - Path to NetWatch CSV log (required)
  • --fritz - Path to FRITZ!Box CSV log (required)
  • --out - Output incidents CSV file (default: incidents.csv)
  • --latency - Latency spike threshold in ms (default: 20)
  • --loss - Packet loss spike threshold in percent (default: 1.0)
  • --plots - Generate latency plots (requires matplotlib and pandas)

What it detects:

  • DNS resolution failures
  • Network adapter status changes
  • Media connection state changes
  • Latency spikes above threshold
  • Packet loss above threshold
  • WAN reconnects (uptime resets)
  • WAN status changes
  • External IP changes
  • DSL link abnormalities

Output format: CSV file with columns: source (PC/FRITZ), type (incident type), start, end, duration, details.

The script also prints a summary of detected incidents to the console and optionally generates latency plots for each ping target.

visualize_incidents.py - Incident Visualizer

Creates graphical visualizations and interactive HTML reports from incident CSV files generated by analyze_netlogs.py.

Basic usage:

python3 visualize_incidents.py --input incidents.csv

With HTML report:

python3 visualize_incidents.py --input incidents.csv --output-dir ~/Reports --html

Parameters:

  • --input, -i - Path to incidents CSV file (required)
  • --output-dir, -o - Output directory for visualizations (default: current directory)
  • --html - Generate interactive HTML report with embedded charts
  • --no-timeline - Skip timeline plot generation
  • --no-summary - Skip summary charts generation

What it generates:

  • incidents_timeline.png - Timeline visualization showing all incidents over time
  • incidents_summary.png - Pie chart of incident types and bar chart of sources
  • incidents_report.html - Interactive HTML report with statistics, charts, and detailed incident table

The timeline plot shows when incidents occurred, their duration, and type. The summary charts provide quick overview statistics. The HTML report combines everything into an easy-to-navigate web page that opens in your browser.

Note: This tool is automatically integrated into NetWatchUI.ps1. Click the "View Visualizations" button in the Control tab after analyzing logs.

Example Workflows

Using the GUI (Recommended)

  1. Launch the UI:

    .\NetWatchUI.ps1
  2. Configure settings in the Configuration tab (or use defaults)

  3. Click "Start Tracking" in the Control tab

  4. Let it run for a period of time (hours or days) to collect data

  5. Click "Stop Tracking" when done

  6. Click "Analyze Logs" to generate incident reports

  7. Click "View Visualizations" to see graphical charts and HTML report

  8. Review the generated incidents.csv, visualizations, and HTML report

Using Command Line

  1. Start network monitoring on your PC:

    .\NetWatch.ps1 -IntervalSeconds 30
  2. Start FRITZ!Box logging (in a separate terminal):

    python3 fritzlog_pull.py --password YOUR_PASSWORD --interval 30
  3. Let both scripts run for a period of time (hours or days) to collect data

  4. Analyze the collected logs:

    python3 analyze_netlogs.py --netwatch ~/Documents/Ping/Log/netwatch_log.csv --fritz ~/Documents/Ping/Log/fritz_status_log.csv --out incidents.csv --plots
  5. Generate visualizations:

    python3 visualize_incidents.py --input incidents.csv --output-dir ~/Reports --html
  6. Review the generated incidents.csv, plots, and open the HTML report in your browser

Testing

Run the PowerShell tests:

# Install Pester if needed
Install-Module -Name Pester -Force -SkipPublisherCheck

# Run tests
Invoke-Pester .\NetWatch.Tests.ps1

File Descriptions

  • NetWatchUI.ps1 - Windows Forms GUI for controlling all monitoring tools and viewing visualizations
  • NetWatch.ps1 - PowerShell network monitoring script with CSV logging
  • NetWatch.Tests.ps1 - Pester unit tests for NetWatch.ps1 functions
  • fritzlog_pull.py - FRITZ!Box TR-064 API logger
  • fritzbox_restart.py - FRITZ!Box restart command sender via TR-064 API
  • FritzBoxRestart/ - Android app for restarting FRITZ!Box from your phone
  • test_fritzlog_pull.py - Unit tests for fritzlog_pull.py
  • test_fritzbox_restart.py - Unit tests for fritzbox_restart.py
  • analyze_netlogs.py - Log analysis and incident detection tool
  • visualize_incidents.py - Incident visualization and HTML report generator
  • .gitignore - Excludes log files, cache, and build artifacts

Tips

  • Use the GUI (NetWatchUI.ps1) for the easiest experience - no need to remember command-line parameters
  • Run NetWatch.ps1 continuously in the background to build a historical network quality baseline
  • Use Task Scheduler (Windows) to run NetWatchUI.ps1 or the individual scripts automatically at system startup
  • Adjust thresholds in the GUI's Configuration tab or in analyze_netlogs.py based on your network quality expectations
  • Default ping targets include Google DNS (8.8.8.8), Cloudflare DNS (1.1.1.1), your router (192.168.178.1), and a game server (www.riotgames.com) - customize as needed
  • CSV logs can be imported into Excel or other analysis tools for custom visualizations
  • If you don't have a FRITZ!Box, simply uncheck "Enable FRITZ!Box logging" in the UI

Troubleshooting

NetWatchUI.ps1:

  • If the UI doesn't start, ensure you're running on Windows with PowerShell 5+ or PowerShell Core 7+
  • If you get execution policy errors, run: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
  • The UI will automatically detect a working Python installation using python, py, or python3 commands
  • If Python is not found, you'll see a warning on startup - install Python from python.org and ensure it's in your PATH
  • Windows Note: If you see "Python was not found" errors, the Windows Store app alias may be interfering. Install Python from python.org instead.
  • Check the Activity Log in the Control tab for detailed error messages

NetWatch.ps1:

  • If you get permission errors, run PowerShell as Administrator
  • On non-Windows systems, the script will not work as it uses Windows-specific cmdlets

fritzlog_pull.py:

  • Ensure TR-064 API is enabled in your FRITZ!Box settings (Home Network > Network > Network Settings)
  • Verify correct password and network connectivity to FRITZ!Box
  • Some older FRITZ!Box models may not support all queried services

analyze_netlogs.py:

  • Install pandas for better performance and plotting support
  • Ensure timestamp formats in CSV files are consistent
  • If no incidents are detected, try lowering the threshold values

CI/CD and Automation

This repository includes a comprehensive GitHub Actions pipeline for continuous integration, deployment, and releases:

  • Continuous Integration: Automated testing on every push and pull request

    • PowerShell validation with PSScriptAnalyzer and Pester tests
    • Python 3.12 validation and testing
    • Windows-only testing (optimized for target platform)
    • Security scanning with CodeQL and Trivy
  • Automated Deployment: Package scripts automatically on every push to main

    • Downloads available as workflow artifacts
    • 90-day retention for latest builds
  • Release Management: Create versioned releases with git tags

    • Automatic package creation (ZIP and tarball)
    • SHA256 checksums for verification
    • Release notes generation

For detailed information about the CI/CD pipeline, see .github/WORKFLOWS.md.

License

This project is provided as-is for network monitoring and diagnostics purposes.

About

Checks and logs network traffic with tools and scripts to discover ping problems and analyze disconnects

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •