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 )