We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Построение интерактивного анализатора трафика в Termux с использованием Scapy и визуализацией в Grafana

Подробное руководство по созданию анализатора сетевого трафика в Termux: установка Scapy, сбор пакетов, экспорт метрик в InfluxDB и визуализация в Grafana. Практические примеры и советы от RybinskLab.

Termux предоставляет полноценную Linux‑среду прямо на Android‑устройстве. Это открывает возможности для сетевых специалистов: можно запускать скрипты на Python, использовать мощные библиотеки вроде Scapy и даже построить полноценный стек мониторинга с Grafana. В этой статье мы пошагово создадим интерактивный анализатор трафика, который будет собирать пакеты, извлекать ключевые метрики и отображать их в реальном времени.

Подготовка окружения в Termux

Для начала необходимо установить базовые пакеты и подготовить Python‑интерпретатор.

pkg update && pkg upgrade -y
pkg install python git wget curl -y

Убедитесь, что у вас установлен pip последней версии:

pip install --upgrade pip

Установка Scapy

Scapy — это гибкая библиотека для создания, отправки и анализа пакетов. Установим её вместе с зависимостями, необходимыми для работы в Android.

pip install scapy[complete]

Если при установке возникнут ошибки, связанные с отсутствием libpcap, установим его:

pkg install libpcap -y

Сбор пакетов в реальном времени

Создадим простой скрипт sniffer.py, который будет захватывать пакеты и выводить их в консоль.

cat > sniffer.py <<'EOF'
#!/usr/bin/env python3

from scapy.all import sniff, IP, TCP, UDP
import json
import time

# Функция обработки каждого пакета

def packet_handler(pkt):
    if IP in pkt:
        data = {
            "timestamp": time.time(),
            "src": pkt[IP].src,
            "dst": pkt[IP].dst,
            "proto": pkt[IP].proto,
            "len": len(pkt)
        }
        if TCP in pkt:
            data["sport"] = pkt[TCP].sport
            data["dport"] = pkt[TCP].dport
        elif UDP in pkt:
            data["sport"] = pkt[UDP].sport
            data["dport"] = pkt[UDP].dport
        print(json.dumps(data))

# Запуск сниффера (весь трафик, без фильтра)
sniff(prn=packet_handler, store=False)
EOF
chmod +x sniffer.py

Запустим скрипт:

./sniffer.py

Каждая строка в stdout будет представлять собой JSON‑объект с базовыми полями пакета.

Экспорт метрик в InfluxDB

Для визуализации Grafana удобно использовать InfluxDB в качестве time‑series базы. На Android‑устройстве удобно запускать InfluxDB в Docker‑контейнере, однако в Termux проще установить его из готового бинарника.

# Скачиваем последнюю версию InfluxDB (v2) для ARM64
wget -O influxdb2.tar.gz https://dl.influxdata.com/influxdb/v2.7.0/influxdb2-2.7.0-linux-arm64.tar.gz
mkdir influxdb && tar -xzf influxdb2.tar.gz -C influxdb --strip-components=1

# Запускаем InfluxDB в фоне
./influxdb/influxd &

Создадим организацию и бакет через CLI:

./influxdb/influx setup \
  --username admin \
  --password admin123 \
  --org myorg \
  --bucket traffic \
  --retention 30d \
  --force

Теперь модифицируем sniffer.py, чтобы отправлять данные в InfluxDB через HTTP‑API.

cat > sniffer_influx.py <<'EOF'
#!/usr/bin/env python3

from scapy.all import sniff, IP, TCP, UDP
import json, time, requests, os

INFLUX_URL = "http://127.0.0.1:8086/api/v2/write?org=myorg&bucket=traffic&precision=s"
TOKEN = "admin123"
HEADERS = {"Authorization": f"Token {TOKEN}", "Content-Type": "text/plain"}

def packet_handler(pkt):
    if IP in pkt:
        line = f"packets,src={pkt[IP].src},dst={pkt[IP].dst},proto={pkt[IP].proto} length={len(pkt)}"
        try:
            requests.post(INFLUX_URL, data=line, headers=HEADERS, timeout=1)
        except Exception as e:
            print("[!] Influx error:", e)

sniff(prn=packet_handler, store=False)
EOF
chmod +x sniffer_influx.py

Запускаем скрипт и проверяем, что данные появляются в InfluxDB:

./sniffer_influx.py

Установка Grafana

Grafana также имеет ARM‑версии, которые работают в Termux. Скачиваем и распаковываем:

wget -O grafana.tar.gz https://dl.grafana.com/oss/release/grafana-10.2.3.linux-arm64.tar.gz
mkdir grafana && tar -xzf grafana.tar.gz -C grafana --strip-components=1

# Запускаем сервер Grafana
./grafana/bin/grafana-server --homepath ./grafana &

По умолчанию веб‑интерфейс доступен по http://127.0.0.1:3000. Войдите под admin / admin (пароль будет запрошен при первом входе).

Настройка источника данных InfluxDB в Grafana

  1. В Grafana перейдите в Configuration → Data Sources → Add data source.
  2. Выберите InfluxDB.
  3. Укажите URL http://127.0.0.1:8086, токен admin123, организацию myorg и бакет traffic.
  4. Сохраните и проверьте подключение.

Создание дашборда для визуализации трафика

Добавим несколько панелей:

  • Счётчик пакетов в секунду – запрос SELECT count("length") FROM "packets" WHERE time > now() - 1m GROUP BY time(1s).
  • Топ‑10 IP‑адресов‑источников – запрос SELECT sum("length") FROM "packets" GROUP BY "src" ORDER BY sum DESC LIMIT 10.
  • Протокольный микс – запрос SELECT count("length") FROM "packets" GROUP BY "proto" (покажет долю TCP/UDP/ICMP).

Настраиваем автоподновление панелей (Refresh: 5s) – получаем почти «живую» картину сетевого трафика прямо на Android‑устройстве.

Дополнительные улучшения

Для более продвинутой аналитики можно добавить:

  • Фильтрацию по интерфейсу (например, sniff(iface="wlan0", …)).
  • Агрегацию по портам и построение топологии соединений.
  • Отправку тревог в Telegram/Slack через Webhook, используя requests.
  • Сохранение сырых пакетов в pcap для последующего offline‑анализа.

Тестирование и отладка

Проверьте работу в реальном времени, запустив iperf3 или открыв веб‑страницу в браузере телефона. В Grafana должны отразиться изменения в графиках без задержек.

Заключение

Мы построили полностью автономный анализатор трафика, работающий в Termux, использующий Scapy для захвата пакетов, InfluxDB для хранения метрик и Grafana для визуализации. Такой стек позволяет проводить быстрый аудит сети, отлаживать IoT‑устройства или обучать студентов практикам сетевой аналитики прямо на мобильном устройстве.

RybinskLab предлагает профессиональные услуги по настройке и кастомизации подобных решений, а также обучение персонала работе с Termux, Scapy и Grafana. Свяжитесь с нами, чтобы ускорить внедрение аналитики в ваш проект.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект