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).