️ Network Diagnostics — mtr/traceroute/iperf3/ping

If you like this project, consider supporting me on Buy Me a Coffee ☕️


tags:

A collection of essential network diagnostic tools for connectivity testing, path tracing, and bandwidth measurement. ping tests basic reachability, traceroute maps the path packets take, mtr combines both with continuous monitoring, and iperf3 measures actual throughput between two endpoints.

📚 Official Docs / Официальная документация: mtr(8) · iperf3

🏓 ping — Basic Connectivity

Basic Usage

ping <HOST>                                   # Ping host / Пинговать хост
ping 8.8.8.8                                  # Ping Google DNS / Пинговать Google DNS
ping google.com                               # Ping by hostname / Пинговать по имени хоста
ping -c 5 <HOST>                              # Send 5 packets / Отправить 5 пакетов
ping -c 10 -i 0.5 <HOST>                      # 10 packets, 0.5s interval / 10 пакетов, интервал 0.5с

Advanced Options

ping -4 <HOST>                                # Force IPv4 / Принудительно IPv4
ping -6 <HOST>                                # Force IPv6 / Принудительно IPv6
ping -s 1000 <HOST>                           # Packet size 1000 bytes / Размер пакета 1000 байт
ping -f <HOST>                                # Flood ping (root) / Флуд пинг (root)
ping -W 2 <HOST>                              # Timeout 2 seconds / Таймаут 2 секунды
ping -q -c 10 <HOST>                          # Quiet (summary only) / Тихий (только итог)

Continuous & Timestamps

ping <HOST> | ts                              # Add timestamps / Добавить временные метки
ping <HOST> | while read line; do echo "$(date): $line"; done  # Manual timestamps / Ручные временные метки

🗺️ traceroute — Path Tracing

Basic Usage

traceroute <HOST>                             # Trace route / Трассировать маршрут
traceroute 8.8.8.8                            # Trace to Google DNS / Трассировка к Google DNS
traceroute -n <HOST>                          # No DNS resolution / Без DNS разрешения
traceroute -m 20 <HOST>                       # Max 20 hops / Максимум 20 переходов
traceroute -q 3 <HOST>                        # 3 queries per hop / 3 запроса на переход

Protocol Options

traceroute -I <HOST>                          # ICMP Echo / ICMP Echo
traceroute -T <HOST>                          # TCP SYN / TCP SYN
traceroute -U <HOST>                          # UDP (default) / UDP (по умолчанию)
traceroute -T -p 80 <HOST>                    # TCP to port 80 / TCP на порт 80

IPv6 / IPv6

traceroute6 <HOST>                            # IPv6 traceroute / IPv6 трассировка
traceroute -6 <HOST>                          # Alternative / Альтернатива

🎯 mtr — Combined Trace

Basic Usage

mtr <HOST>                                    # Interactive MTR / Интерактивный MTR
mtr -n <HOST>                                 # No DNS / Без DNS
mtr -4 <HOST>                                 # IPv4 only / Только IPv4
mtr -6 <HOST>                                 # IPv6 only / Только IPv6

Report Mode

mtr -r <HOST>                                 # Report mode / Режим отчёта
mtr -rw <HOST>                                # Wide report / Широкий отчёт
mtr -rwc 100 <HOST>                           # 100 cycles report / Отчёт 100 циклов
mtr -r -c 50 <HOST>                           # 50 cycles / 50 циклов

Advanced Options

mtr -b <HOST>                                 # Show both host and IP / Показать и хост и IP
mtr -z <HOST>                                 # Show AS numbers / Показать номера AS
mtr -o "LSDR ABWV" <HOST>                     # Custom column order / Пользовательский порядок колонок
mtr -i 0.5 <HOST>                             # 0.5s interval / Интервал 0.5с

Protocol Selection

mtr -u <HOST>                                 # UDP mode / Режим UDP
mtr -T <HOST>                                 # TCP mode / Режим TCP
mtr -T -P 443 <HOST>                          # TCP port 443 / TCP порт 443

Output Formats

mtr --json <HOST>                             # JSON output / Вывод JSON
mtr --csv <HOST>                              # CSV output / Вывод CSV
mtr --xml <HOST>                              # XML output / Вывод XML

📊 iperf3 — Bandwidth Testing

Installation

sudo apt install iperf3                       # Debian/Ubuntu
sudo dnf install iperf3                       # RHEL/Fedora

Server Mode

iperf3 -s                                     # Start server / Запустить сервер
iperf3 -s -p 5201                             # Server on port 5201 / Сервер на порту 5201
iperf3 -s -D                                  # Daemon mode / Режим демона
iperf3 -s -1                                  # Single client mode / Режим одного клиента

Client Mode

iperf3 -c <SERVER_IP>                         # Test to server / Тест к серверу
iperf3 -c <SERVER_IP> -t 30                   # 30 second test / 30 секунд тест
iperf3 -c <SERVER_IP> -P 10                   # 10 parallel streams / 10 параллельных потоков
iperf3 -c <SERVER_IP> -n 1G                   # Transfer 1GB / Передать 1GB

Reverse & Bidirectional

iperf3 -c <SERVER_IP> -R                      # Reverse (download) / Обратное (скачивание)
iperf3 -c <SERVER_IP> --bidir                 # Bidirectional / Двунаправленное

UDP Testing / UDP

iperf3 -c <SERVER_IP> -u                      # UDP mode / Режим UDP
iperf3 -c <SERVER_IP> -u -b 100M              # UDP 100Mbps / UDP 100Мбит/с
iperf3 -c <SERVER_IP> -u -b 0                 # UDP unlimited / UDP без ограничений

Output & Reports

iperf3 -c <SERVER_IP> -i 1                    # 1s interval reports / Отчёты каждую секунду
iperf3 -c <SERVER_IP> -J                      # JSON output / Вывод JSON
iperf3 -c <SERVER_IP> --logfile test.log      # Log to file / Логировать в файл

🔌 netcat — Network Swiss Army

Port Scanning

nc -zv <HOST> 80                              # Test port 80 / Проверить порт 80
nc -zv <HOST> 20-100                          # Scan ports 20-100 / Сканировать порты 20-100
nc -zv -w 1 <HOST> 22                         # 1s timeout / Таймаут 1с

Listen Mode

nc -l 8080                                    # Listen on port 8080 / Слушать порт 8080
nc -l -p 9999                                 # Listen on port 9999 / Слушать порт 9999
nc -l 8080 > received.file                    # Receive file / Получить файл

Connect & Transfer

nc <HOST> 80                                  # Connect to port 80 / Подключиться к порту 80
nc <HOST> 9999 < file.txt                     # Send file / Отправить файл
cat file.txt | nc <HOST> 9999                 # Alternative / Альтернатива

Chat

nc -l 8080                                    # Server / Сервер
nc <HOST> 8080                                # Client / Клиент

Test Port

echo "test" | nc -w 1 <HOST> 80               # Test with timeout / Проверить с таймаутом

📡 ss — Socket Statistics

Basic Usage

ss                                            # Show all sockets / Показать все сокеты
ss -t                                         # TCP sockets / TCP сокеты
ss -u                                         # UDP sockets / UDP сокеты
ss -l                                         # Listening sockets / Слушающие сокеты
ss -a                                         # All sockets / Все сокеты

Common Combinations

ss -tunap                                     # TCP+UDP, numeric, all, processes / TCP+UDP, числовые, все, процессы
ss -tulpn                                     # TCP+UDP, listening, processes, numeric / TCP+UDP, слушающие, процессы, числовые
ss -s                                         # Summary statistics / Сводная статистика

Filter by State

ss state established                          # Established connections / Установленные соединения
ss state listening                            # Listening sockets / Слушающие сокеты
ss state time-wait                            # Time-wait sockets / Сокеты в состоянии time-wait

Filter by Port

ss -tunap | grep :80                          # Port 80 connections / Соединения порта 80
ss sport = :22                                # Source port 22 / Исходный порт 22
ss dport = :443                               # Destination port 443 / Порт назначения 443

Show Processes

ss -tp                                        # Show process info / Показать информацию о процессах
ss -tlnp                                      # Listening with processes / Слушающие с процессами

🛠️ Troubleshooting Workflows

Check Network Connectivity

# 1. Basic connectivity
ping -c 4 8.8.8.8

# 2. DNS resolution / DNS
ping -c 4 google.com

# 3. Trace route
mtr -rw google.com

# 4. Check firewall
sudo ufw status

Diagnose Slow Connection

# 1. MTR report
mtr -rwc 100 <HOST>

# 2. Check for packet loss
ping -c 100 <HOST> | grep loss

# 3. Test bandwidth
iperf3 -c <SERVER_IP> -R

# 4. Check local network
ping -c 10 <GATEWAY>

Test Port Connectivity

# 1. Quick port check
nc -zv <HOST> <PORT>

# 2. Check if port is listening
ss -tunlp | grep :<PORT>

# 3. Test with telnet
telnet <HOST> <PORT>

# 4. Check firewall rules
sudo iptables -L -n | grep <PORT>

Find Network Bottleneck

# 1. Trace with MTR
mtr -rwc 200 <HOST>

# 2. Test multiple paths
mtr -rwc 50 <HOST1>
mtr -rwc 50 <HOST2>

# 3. Bandwidth test
iperf3 -c <SERVER_IP> -P 10

# 4. Check interface stats
ip -s link show eth0

🌟 Real-World Examples

Monitor Connection Quality

# Continuous MTR with timestamps
while true; do
  echo "=== $(date) ==="
  mtr -rwc 10 <HOST>
  sleep 60
done | tee connection-monitor.log

Bandwidth Benchmark

# Server side
iperf3 -s

# Client side tests
echo "Upload test:"
iperf3 -c <SERVER_IP> -t 30

echo "Download test:"
iperf3 -c <SERVER_IP> -t 30 -R

echo "Bidirectional test:"
iperf3 -c <SERVER_IP> -t 30 --bidir

Network Path Analysis

# Compare paths to multiple hosts
for host in google.com cloudflare.com aws.com; do
  echo "=== $host ==="
  mtr -rwc 10 $host
  echo
done > network-paths.txt

Port Connectivity Matrix

# Check multiple ports
for port in 22 80 443 3306 5432; do
  echo -n "Port $port: "
  nc -zv -w 1 <HOST> $port 2>&1 | grep -q succeeded && echo "OPEN" || echo "CLOSED"
done

Automated Connectivity Check

# Monitor connectivity and alert
ping -c 1 <HOST> > /dev/null 2>&1
if [ $? -ne 0 ]; then
  echo "Host <HOST> is DOWN at $(date)" | tee -a downtime.log
  # Send alert / Отправить оповещение
  echo "Host <HOST> is DOWN" | mail -s "Alert" <EMAIL>
fi

Performance Baseline

# Establish baseline
echo "Latency baseline:"
ping -c 100 <HOST> | tail -1

echo "Bandwidth baseline:"
iperf3 -c <SERVER_IP> -t 60 -J > baseline.json

echo "Path baseline:"
mtr -rwc 200 <HOST> > path-baseline.txt

Multi-Server Latency

# Check latency to multiple servers
for server in server1 server2 server3; do
  echo "$server:"
  ping -c 10 $server | grep rtt
done

Network Troubleshooting Script

#!/bin/bash
HOST=$1

echo "=== Network Diagnostic for $HOST ==="
echo
echo "1. Ping test:"
ping -c 5 $HOST

echo
echo "2. Traceroute:"
traceroute -n $HOST

echo
echo "3. MTR Report:"
mtr -rwc 20 $HOST

echo
echo "4. DNS Resolution:"
dig +short $HOST

echo
echo "5. Port 80 test:"
nc -zv -w 2 $HOST 80

echo
echo "6. Port 443 test:"
nc -zv -w 2 $HOST 443

💡 Best Practices

Use mtr instead of ping+traceroute

Always use -n to avoid DNS delays

Run iperf3 tests bidirectionally

Use -c for count-limited ping

Log long-term connectivity tests

🔧 Default Ports

# iperf3: 5201
# netcat: user-specified

📋 Common Use Cases

# ping: Basic connectivity
# traceroute: Path discovery
# mtr: Continuous monitoring
# iperf3: Bandwidth testing
# netcat: Port testing
# ss: Active connections

🔍 Alternative Tools

# fping: Parallel ping
# hping3: Advanced packet crafting
# nmap: Port scanning
# iftop: Real-time bandwidth
# nethogs: Per-process bandwidth

On this page

linux Network Diagnostics — ping / traceroute / mtr / iperf3 🏓 ping — Basic Connectivity Basic Usage Advanced Options Continuous &amp; Timestamps 🗺️ traceroute — Path Tracing Basic Usage Protocol Options IPv6 / IPv6 🎯 mtr — Combined Trace Basic Usage Report Mode Advanced Options Protocol Selection Output Formats 📊 iperf3 — Bandwidth Testing Installation Server Mode Client Mode Reverse &amp; Bidirectional UDP Testing / UDP Output &amp; Reports 🔌 netcat — Network Swiss Army Port Scanning Listen Mode Connect &amp; Transfer Chat Test Port 📡 ss — Socket Statistics Basic Usage Common Combinations Filter by State Filter by Port Show Processes 🛠️ Troubleshooting Workflows Check Network Connectivity Diagnose Slow Connection Test Port Connectivity Find Network Bottleneck 🌟 Real-World Examples Monitor Connection Quality Bandwidth Benchmark Network Path Analysis Port Connectivity Matrix Automated Connectivity Check Performance Baseline Multi-Server Latency Network Troubleshooting Script 💡 Best Practices Use mtr instead of ping+traceroute Always use -n to avoid DNS delays Run iperf3 tests bidirectionally Use -c for count-limited ping Log long-term connectivity tests 🔧 Default Ports 📋 Common Use Cases 🔍 Alternative Tools 📚 Documentation Links