1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-xdpcap

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

xdpcap — это инструмент, подобный tcpdump, для eXpress Data Path (XDP). Он может захватывать пакеты и действия / коды возврата от программ XDP, используя стандартные выражения фильтра tcpdump / libpcap.

Инструментарий

Программы XDP должны предоставить как минимум одну точку подключения:

struct bpf_map_def xdpcap_hook = {
	.type = BPF_MAP_TYPE_PROG_ARRAY,
	.key_size = sizeof(int),
	.value_size = sizeof(int),
	.max_entries = 4, // Максимальное значение констант XDP_*
};

Эту карту необходимо закрепить внутри bpffs.

hook.h предоставляет удобный макрос для объявления таких карт:

#include "hook.h"

struct bfp_map_def xdpcap_hook = XDPCAP_HOOK();

Заявления return XDP_* следует изменить, чтобы «подключить» точку подключения:

#include "hook.h"

struct bpf_map_def xdpcap_hook = XDPCAP_HOOK();

int xdp_main(struct xdp_md *ctx) {
	return xdpcap_exit(ctx, &xdpcap_hook, XDP_PASS);
}

Полный пример см. в testdata/xdp_hook.c.

В зависимости от желаемой детализации программа может предоставить несколько точек подключения или одна точка подключения может использоваться несколькими программами с помощью одной и той же базовой карты.

Пакет xdpcap предоставляет оболочку для создания и закрепления карт точек подключения с использованием загрузчика newtools/ebpf.

xdpcap поддерживает подключение к программам XDP, загруженным с флагом BPF_F_XDP_HAS_FRAGS (аннотированным xdp.frags). Он попытается подключиться к программе XDP обычным способом, а в случае неудачи повторит попытку с флагом BPF_F_XDP_HAS_FRAGS.

Установка

go get -u github.com/cloudflare/xdpcap/cmd/xdpcap

Использование

  • Захват пакетов в pcap: xdpcap /path/to/pinned/map dump.pcap "tcp and port 80"

  • Отображение захваченных пакетов: sudo xdpcap /path/to/pinned/map - "tcp and port 80" | sudo tcpdump -r -

Ограничения

  • Фильтры выполняются после инструментальной программы XDP. Если программа изменяет пакет, фильтр должен соответствовать изменённому пакету, а не исходному входному пакету.

  • захват многобуферных пакетов в настоящее время xdpcap не может захватить более первой страницы пакета. Если инструментальная программа XDP загружена с BPF_F_XDP_HAS_FRAGS, то пакеты, охватывающие несколько физических страниц, не будут полностью захвачены.

Тесты

  • sudo -E $(which go) test

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

tcpdump like XDP packet capture Развернуть Свернуть
BSD-3-Clause
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-xdpcap.git
git@api.gitlife.ru:oschina-mirror/mirrors-xdpcap.git
oschina-mirror
mirrors-xdpcap
mirrors-xdpcap
master