Анализ сетевого трафика на мобильных устройствах традиционно требует наличия специализированных инструментов, которые часто недоступны в Android‑окружении. Termux предоставляет полноценный Linux‑терминал, а библиотека Scapy – мощный фреймворк для создания, отправки и анализа пакетов. В этой статье мы покажем, как разработать собственную утилиту для динамического анализа сетевых пакетов, используя Scapy в Termux.
Подготовка среды
Для начала убедитесь, что на устройстве установлен Termux из Google Play или F-Droid, а также включены необходимые разрешения:
termux-setup-storage
Эта команда предоставляет доступ к файловой системе устройства, что необходимо для сохранения логов.
Установка Python и Scapy
В Termux используем пакетный менеджер pkg:
pkg update && pkg upgrade -y
pkg install python -y
pip install --upgrade pip setuptools wheel
pip install scapy
После установки проверьте версию Scapy:
python -c "import scapy; print(scapy.version)"
Получение прав доступа к сети
Для захвата пакетов требуется привилегированный доступ к сетевому интерфейсу. На Android это достигается через root или с помощью termux-wifi-enable (только для Wi‑Fi). Если устройство рутировано, выполните:
su -c "setenforce 0"
Если рут отсутствует, можно использовать VPN‑трафик‑перехват (например, NetGuard) и перенаправлять его в tun0, который будет доступен Scapy.
Создание скрипта захвата пакетов
Ниже пример простого скрипта, который начинает (start) захват и выводит информацию о каждом пакете. Определение глагола "start" взято из dictionary.com – «to begin an activity».
#!/usr/bin/env python3
from scapy.all import sniff, hexdump
# Функция обратного вызова для каждого пакета
def packet_handler(pkt):
print("[+] Пакет получен:")
pkt.show()
hexdump(pkt)
print("---")
# Начинаем захват на интерфейсе wlan0 (можно изменить)
if name == "main":
print("[i] Запуск захвата пакетов (Ctrl+C для остановки)...")
sniff(iface="wlan0", prn=packet_handler, store=False)
Сохраните файл как packet_sniffer.py, сделайте его исполняемым и запустите:
chmod +x packet_sniffer.py
./packet_sniffer.py
Расширенные возможности анализа
Scapy позволяет фильтровать трафик по протоколам, IP‑адресам и портам. Пример фильтрации только HTTP‑трафика:
sniff(iface="wlan0", filter="tcp port 80", prn=packet_handler, store=False)
Для более глубокого анализа можно использовать встроенные парсеры Scapy, например HTTP или DNS слои.
Сохранение и последующий анализ
Для последующего офлайн‑анализа удобно сохранять пакеты в файл формата pcap:
sniff(iface="wlan0", prn=lambda x: x.summary(), timeout=60, count=0, store=True).wrpcap("capture.pcap")
Полученный файл можно открыть в Wireshark на ПК.
Оптимизация производительности
На мобильных устройствах важно минимизировать нагрузку на процессор. Рекомендации:
- Отключайте запись пакетов в память (
store=False), если не нуженpcap. - Используйте ограничение количества пакетов (
count=1000) или таймаут (timeout=30). - Фильтруйте трафик на уровне ядра через BPF‑фильтры (
filter="...").
Отладка и журналирование
Для отладки полезно включать логирование Scapy:
import logging
logging.basicConfig(level=logging.DEBUG)
Это позволит увидеть детали обработки пакетов и возможные ошибки.
Интеграция с Android‑приложениями
Полученный скрипт можно вызвать из Android‑приложения через Termux:API или использовать Intent для запуска из UI. Пример вызова через termux-notification:
termux-notification --title "Scapy" --content "Запуск захвата..." && ./packet_sniffer.py &
Заключение
Мы рассмотрели процесс создания утилиты динамического анализа сетевых пакетов на Android с использованием Scapy в Termux. От установки среды до написания скрипта, от захвата до сохранения данных – все шаги выполнены в полностью открытой и гибкой среде Linux‑подобного терминала.
Если вам требуется более глубокая настройка, автоматизация тестирования сетевых приложений или разработка кастомных протокольных анализаторов, команда RybinskLab готова предоставить профессиональные услуги: аудит безопасности мобильных устройств, разработка специализированных скриптов, настройка VPN‑перехвата и обучение персонала. Свяжитесь с нами для получения индивидуального решения под ваш проект.