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

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

Разработка собственного сетевого сниффера в Termux на основе libpcap

Android‑устройства стали полноценными платформами для сетевого анализа. Терминал Termux предоставляет полноценную Linux‑среду, а библиотека libpcap – стандартный API для захвата пакетов. В этой статье мы начнём ("start") с нуля и получим собственный сниффер, способный работать в реальном времени.

Требования и подготовка окружения

  • Установленный Termux из Google Play или F-Droid.
  • Root‑права не обязательны, но необходимы CAP_NET_RAW и CAP_NET_ADMIN (можно предоставить через termux‑request‑permissions).
  • Базовые навыки C‑программирования.

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

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

apt update && apt upgrade -y
apt install clang make libpcap-dev

Для работы с привилегиями запустите:

termux‑request‑permissions storage

Пример простого сниффера на C

Ниже – минимальный код, который открывает устройство, захватывает пакеты и выводит их длину.

#include <stdio.h>
#include <pcap.h>

void packet_handler(u_char user, const struct pcap_pkthdr h, const u_char bytes) {
    printf("Captured packet of length %d
", h->len);
}

int main(int argc, char argv[]) {
    char errbuf[PCAP_ERRBUF_SIZE];
    const char dev = pcap_lookupdev(errbuf);
    if (dev == NULL) {
        fprintf(stderr, "Error finding device: %s
", errbuf);
        return 1;
    }
    printf("Listening on %s...
", dev);
    pcap_t handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf);
    if (handle == NULL) {
        fprintf(stderr, "Could not open device %s: %s
", dev, errbuf);
        return 2;
    }
    pcap_loop(handle, 0, packet_handler, NULL);
    pcap_close(handle);
    return 0;
}

Сохраните файл как sniffer.c и скомпилируйте:

clang -o sniffer sniffer.c -lpcap

Запуск сниффера

Для захвата пакетов требуется запуск от имени пользователя с правами доступа к сетевому интерфейсу. В Termux достаточно выполнить:

./sniffer

Вы увидите вывод вида Captured packet of length 74 – каждый пакет будет печататься в консоль.

Добавление фильтрации

Чтобы ограничить захват, используем BPF‑фильтр. Ниже пример захвата только TCP‑пакетов на порт 80.

#include <pcap.h>

int main() {
    char errbuf[PCAP_ERRBUF_SIZE];
    pcap_t handle = pcap_open_live("any", BUFSIZ, 1, 1000, errbuf);
    struct bpf_program fp;
    const char filter_exp = "tcp port 80";
    if (pcap_compile(handle, &fp, filter_exp, 0, PCAP_NETMASK_UNKNOWN) == -1) {
        fprintf(stderr, "Bad filter - %s
", pcap_geterr(handle));
        return 1;
    }
    if (pcap_setfilter(handle, &fp) == -1) {
        fprintf(stderr, "Error setting filter - %s
", pcap_geterr(handle));
        return 2;
    }
    pcap_loop(handle, 0, packet_handler, NULL);
    pcap_close(handle);
    return 0;
}

Сохранение захваченных пакетов

Для последующего анализа удобно сохранять трафик в файл формата .pcap и открыть его в Wireshark. Используем функции pcap_dump_open и pcap_dump:

pcap_dumper_t dumper = pcap_dump_open(handle, "capture.pcap");
...
pcap_dump((u_char )dumper, h, bytes);
...
pcap_dump_close(dumper);

Оптимизация и ограничения Android

  • На Android any устройство может не поддерживаться – указывайте конкретный интерфейс, например wlan0.
  • Для долгого захвата рекомендуется писать вывод в файл, а не в консоль, чтобы избежать перегрузки терминала.
  • Если требуется захват без привилегий, используйте setcap cap_net_raw+ep /data/data/com.termux/files/usr/bin/sniffer (требует root).

Заключение

Мы начали (merriam-webster.com) с установки окружения, написали простой сниффер на базе libpcap, добавили фильтрацию и возможность сохранять трафик. Такой инструмент полезен для отладки сетевых приложений, обучения и диагностики проблем.

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

Для более глубокого понимания термина «start» см. ресурсы: [dictionary.com](https://www.dictionary.com/browse/start), [cambridge.org](https://dictionary.cambridge.org/us/dictionary/english/start).

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

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

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

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

Связаться со мной