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

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

Создание собственного инструмента анализа трафика в реальном времени для Android‑устройств через Termux: pcap‑парсинг, визуализация и алерты

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

  • Перехватывать пакеты в режиме реального времени.
  • Парсить .pcap‑файлы на лету.
  • Визуализировать трафик (графики, таблицы).
  • Отправлять алерты при обнаружении подозрительных паттернов.

Все шаги выполняются в Termux без необходимости «root»‑прав.

Подготовка среды

Установим необходимые пакеты и зависимости.

pkg update && pkg upgrade -y
pkg install python git clang make -y
pip install --upgrade pip setuptools wheel
pip install scapy matplotlib pandas tqdm

Для захвата пакетов понадобится tcpdump. Он доступен в репозиториях Termux:

pkg install tcpdump -y

Убедитесь, что у Termux есть доступ к сети (разрешения READ_PHONE_STATE, ACCESS_NETWORK_STATE и INTERNET).

Перехват трафика в реальном времени

Запускаем tcpdump и сохраняем вывод в файл traffic.pcap. Флаг -U гарантирует запись пакетов по мере их появления.

tcpdump -i any -w traffic.pcap -U &

Процесс будет работать в фоне. При необходимости остановить его, используйте pkill tcpdump.

Парсинг pcap‑файла на лету

Создадим скрипт analyzer.py, который будет читать файл в режиме «tail» и обрабатывать новые пакеты с помощью Scapy.

#!/usr/bin/env python3
import os
import time
from scapy.all import PcapReader
import pandas as pd
from tqdm import tqdm

PCAP_PATH = "traffic.pcap"
OUTPUT_CSV = "traffic_log.csv"

# Если CSV уже существует – загрузим его, иначе создадим новый DataFrame
if os.path.exists(OUTPUT_CSV):
    df = pd.read_csv(OUTPUT_CSV)
else:
    df = pd.DataFrame(columns=["timestamp", "src_ip", "dst_ip", "proto", "len"])

def parse_packet(pkt):
    ts = pkt.time
    src = pkt[0][1].src if pkt.haslayer('IP') else "-"
    dst = pkt[0][1].dst if pkt.haslayer('IP') else "-"
    proto = pkt[0][1].proto if pkt.haslayer('IP') else "-"
    length = len(pkt)
    return {"timestamp": ts, "src_ip": src, "dst_ip": dst, "proto": proto, "len": length}

print("[+] Запуск парсера. Ожидание новых пакетов...")
while True:
    if not os.path.exists(PCAP_PATH):
        time.sleep(1)
        continue
    try:
        with PcapReader(PCAP_PATH) as pcap_reader:
            for pkt in pcap_reader:
                record = parse_packet(pkt)
                df = df.append(record, ignore_index=True)
        # Сохраняем промежуточный результат каждые 100 записей
        if len(df) % 100 == 0:
            df.to_csv(OUTPUT_CSV, index=False)
    except Exception as e:
        # Ошибки могут возникать, пока файл «перезаписывается» tcpdump‑ом
        time.sleep(0.5)
    time.sleep(0.2)

Скрипт непрерывно читает traffic.pcap, добавляя новые строки в traffic_log.csv. Для экономии ресурсов рекомендуется запускать его в отдельном tmux‑сеансе:

pkg install tmux -y
tmux new -s analyzer
python3 analyzer.py

Визуализация трафика

Для построения графиков удобно использовать matplotlib или plotly. Ниже пример скрипта visualizer.py, который генерирует интерактивный HTML‑дешборд.

#!/usr/bin/env python3
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

CSV_PATH = "traffic_log.csv"
HTML_OUT = "dashboard.html"

df = pd.read_csv(CSV_PATH, parse_dates=["timestamp"])

# Трафик по протоколам за последние 5 минут
recent = df[df["timestamp"] > (pd.Timestamp.now() - pd.Timedelta(minutes=5))]
fig_proto = px.bar(recent.groupby("proto").size().reset_index(name="count"),
                   x="proto", y="count", title="Протоколы за последние 5 минут")

# Объём трафика во времени
fig_time = px.line(df.resample("1T", on="timestamp").sum().reset_index(),
                   x="timestamp", y="len", title="Объём трафика (байты) по минутам")

fig = go.Figure()
for f in [fig_proto, fig_time]:
    for trace in f.data:
        fig.add_trace(trace)

fig.update_layout(height=800, title_text="Дешборд сетевого трафика")
fig.write_html(HTML_OUT)
print(f"[+] Дешборд сохранён в {HTML_OUT}")

Запуск:

python3 visualizer.py

Полученный dashboard.html можно открыть в мобильном браузере и наблюдать за изменениями в реальном времени (обновляйте вручную или автоматизируйте через watch).

Алерты и уведомления

Для мгновенного реагирования удобно использовать push‑уведомления через сервисы Pushover или Telegram Bot. Ниже пример простейшего детектора DDoS‑потоков, отправляющего сообщение в Telegram при превышении порога в 1000 пакетов за секунду.

#!/usr/bin/env python3
import pandas as pd
import time
import requests

CSV_PATH = "traffic_log.csv"
TELEGRAM_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN"
CHAT_ID = "YOUR_CHAT_ID"
THRESHOLD = 1000  # пакетов/сек

last_check = pd.Timestamp.now()

while True:
    df = pd.read_csv(CSV_PATH, parse_dates=["timestamp"])
    recent = df[df["timestamp"] > last_check]
    pkt_per_sec = recent.shape[0] / max((pd.Timestamp.now() - last_check).seconds, 1)
    if pkt_per_sec > THRESHOLD:
        msg = f"⚠️ Высокий трафик: {pkt_per_sec:.1f} пакетов/сек"
        url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
        requests.post(url, data={"chat_id": CHAT_ID, "text": msg})
        print("[ALERT]", msg)
    last_check = pd.Timestamp.now()
    time.sleep(5)

Не забудьте заменить YOUR_TELEGRAM_BOT_TOKEN и YOUR_CHAT_ID на свои значения.

Оптимизация и рекомендации

  • Для снижения нагрузки используйте фильтры tcpdump (например, tcpdump -i any port 80 -w traffic.pcap).
  • Если нужен более глубокий анализ, подключите nfdump и SiLK‑библиотеки.
  • Запускайте скрипты в tmux или screen, чтобы они сохранялись при закрытии терминала.
  • Регулярно очищайте старые .pcap и CSV‑файлы, чтобы не переполнять память.

Заключение

С помощью Termux, Python и наборов библиотек (Scapy, pandas, plotly) можно собрать полностью автономный инструмент анализа сетевого трафика, работающий прямо на Android‑устройстве. Такой подход полезен для полевых инженеров, специалистов по информационной безопасности и тех, кто хочет быстро отладить сетевые проблемы без доступа к настольному ПК.

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

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен экспертом РыбинскЛАБ.

Поделиться знанием:

Нужна профессиональная помощь?

Меня зовут Усачёв Денис Евгеньевич. Я оказываю ИТ-услуги в Рыбинске и Ярославской области: настройка серверов, безопасность, автоматизация бизнеса. Запомните информация развлекательный ознакомительный носит, не нарушайте закон!

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