Описание тега bpf
Пакетный фильтр Беркли (BPF или cBPF) изначально был введен для обеспечения необработанного интерфейса для уровней канала передачи данных независимым от протокола способом в системах BSD, а затем в Linux. Совсем недавно он был переработан в Linux, чтобы породить расширенный BPF или eBPF. Последний может использоваться для сетевой обработки на нескольких уровнях, а также для приложений безопасности или даже для отслеживания и мониторинга вариантов использования. Этот тег предназначен для всех вопросов о cBPF/eBPF.
0
ответов
Аргумент sendto для сокета типа PF_PACKET
У меня есть требование использовать Berkeley Packet Filters в моей программе, для чего я узнал, что должен использовать сокет типа PF_PACKET. Я могу получать пакеты через мой фильтр, как и ожидалось. Я нахожусь в затруднительном положении, когда дел…
11 окт '18 в 13:08
1
ответ
BPF в Python, чтобы прослушивать пакеты для нескольких портов TCP
Я получил код от http://allanrbo.blogspot.in/2011/12/raw-sockets-with-bpf-in-python.html. Работает нормально, но я хочу перехватить трафик на нескольких TCP-портах, таких как порт 9000, 80, 22... Поэтому я изменил filter_list как удар filters_list =…
27 дек '16 в 07:16
1
ответ
Простой способ проверить действительный фильтр BPF
Какой самый простой способ проверить фильтр BPF как обычный пользователь? Я обнаружил, что проще всего запустить tcpdump с небольшим файлом pcap в качестве входных данных для -r вариант. $ tcpdump -r one_packet.pcap -F invalid_bpf.conf 2> /dev/nu…
18 мар '14 в 19:27
1
ответ
seccomp-bpf - как я могу использовать bpf для фильтрации аргументов системного вызова?
У меня есть функция f(), которая возвращает 0 или 1 - 0 для false, 1 для true. Я хотел бы установить правило с seccomp-bpf, чтобы системный вызов "fopen" был разрешен только в том случае, если f (первый параметр --fopen--) == 1. Как бы я это сделал?
30 ноя '14 в 21:27
1
ответ
Адрес источника фильтра BPF == адрес передачи
Каков правильный фильтр BPF только для получения пакетов, в которых MAC-адрес источника равен MAC-адресу передачи? Глядя на документацию, кажется, что поля должны быть доступны через wlan[21:12] или же wlan.addr2 но я не могу заставить их работать.
21 май '18 в 17:41
1
ответ
Как я могу определить, в каких пространствах имен находится PID из пространства ядра?
Я пытаюсь написать программу eBPF для записи каждого вызова определенного системного вызова из контейнеров, работающих в системе. Я использую BCC и могу получить PID, используя bpf_get_current_pid_tgid(), Из пользовательского пространства я мог бы и…
23 янв '18 в 12:39
0
ответов
Как написать и отладить Berkeley Packet Filter для ядра Linux
Я ищу способ разработки фильтра пакетов ядра в Linux для фильтрации пакетов в большом объеме сетевого трафика. Я хотел бы спросить, возможно ли использовать пакетный фильтр Berkeley (BPF) для реализации фильтра Блума в ядре Linux? Есть ли альтернати…
03 фев '15 в 15:07
1
ответ
Загрузка процессора скриптом Python, когда я использовал фильтры BPF
Я получил код отсюда. from binascii import hexlify from ctypes import create_string_buffer, addressof from socket import socket, AF_PACKET, SOCK_RAW, SOL_SOCKET from struct import pack, unpack sniff_interval=120 # A subset of Berkeley Packet Filter …
06 мар '17 в 08:11
1
ответ
eBPF: получить `fd` закрепленной программы bpf
Я знаю это eBPF Программа может быть прикреплена к /sys/fs/bpf (расположение по умолчанию небольшой bpffs, Например, используя bpftool: $ bpftool prog load ./my_bpf.o /sys/fs/bpf/my_bpf Я ожидал, что open("/sys/fs/bpf/my_bpf") вернул бы мне значение…
14 фев '18 в 16:57
1
ответ
Ошибка при загрузке программы BPF, которая копирует буфер в стек BPF
Я пытаюсь загрузить программу BPF, которая просто копирует buf параметр tty_write в стек BPF. Моя программа выглядит следующим образом: #define BUFSIZE 256 SEC("kprobe/tty_write") int kprobe__tty_write(struct pt_regs *ctx, struct file *file, const c…
10 фев '18 в 13:22
1
ответ
Классический БНФ - простая статистика недоступна?
Я играл с классиком BPF фильтровать что-то на netlink сокет и обнаружил, что нет простой статистики, доступной для проверки, был ли пакет отброшен или разрешен. Поэтому я посмотрел на https://elixir.bootlin.com/linux/latest/source/net/core/filter.c#…
02 янв '19 в 16:50
1
ответ
Как получить доступ к регистрам xmm в программе eBPF
Я пытаюсь использовать bcc-tools для отслеживания пользовательского процесса, используя uprobe, но некоторые функции принимают аргументы с плавающей запятой. Согласно ABI x86_64, эти значения обычно передаются в регистрах xmm. Функции eBPF в ОЦК зан…
16 янв '19 в 13:13
2
ответа
Слишком длинный список аргументов при загрузке программы eBPF через системный вызов bpf
Я пытаюсь загрузить программу eBPF через bpf системный вызов в Go, но я вижу ошибку, возвращенную из системного вызова. Чтобы ограничить проблему, я использую следующую минимальную программу eBPF, которая ничего не делает: struct task_group {}; Важн…
06 фев '18 в 22:41
1
ответ
Как решить ошибку "R0 invalid mem access 'inv'" при загрузке объекта файла eBPF
Я пытаюсь загрузить объект eBPF в ядре с libbpf, безуспешно получая ошибку, указанную в заголовке. Но позвольте мне показать, насколько прост мой БПФ *_kern.c является. SEC("entry_point_prog") int entry_point(struct xdp_md *ctx) { int act = XDP_DROP…
03 ноя '18 в 22:41
1
ответ
Как я могу прикрепить программу BPF к функции ядра через kprobe?
Справочное руководство по Cilium BPF и XDP описывает, как вы можете загрузить программу BPF в сетевое устройство через ip а также tc команды. Как бы я прикрепил программу BPF к функции ядра / функции пространства пользователей таким же образом?
04 фев '18 в 18:17
1
ответ
eBPF: глобальные переменные и структуры
Итак, у меня есть простой eBPF код: my.h: #ifndef __MY_COMMON_H__ #define __MY_COMMON_H__ #include <linux/types.h> struct foo { int a; int b; int c; int d; }; #endif /* __MY_COMMON_H__ */ my_kern.c: ... struct bpf_map_def SEC("maps") my_map = …
06 фев '18 в 22:33
1
ответ
Возможно ли использовать eBPF для отслеживания кода на уровне стека Python?
dtrace на платформах, отличных от Linux, давно рекламировалась, чтобы иметь возможность динамически инструментировать код node.js для выполнения динамической трассировки на уровне узлов, например, чтобы разрешить отладку программ узлов на уровне сте…
02 ноя '18 в 18:23
0
ответов
Проблема с полями BPF и переводом сценического имени на другой язык
Я хочу перевести имена меток полей и имена этапов, используемые в настраиваемом BPF настраиваемого объекта. Это было проверено с помощью плагина "Easy Translator" из XRM Toolbox. Но я не вижу никаких изменений в языковых переводах только в полях BPF…
21 авг '18 в 04:39
1
ответ
Чтение БПФ Ассамблеи
Я пытаюсь прочитать синтаксис BPF для фильтра, чтобы попытаться выяснить, что он делает. Одна вещь, которую я не могу найти, это то, где начинается "смещение байтов". Это означает, что если у нас есть следующий ассемблерный код: 0000: 0x28 0x00 0x00…
30 мар '18 в 15:26
1
ответ
Linux TC eBPF и параллелизм
Существует ли ограничение на количество экземпляров программ eBPF, которые ядро может запускать одновременно на нескольких процессорах (аналогично проблеме с python GIL) В частности, могут ли программы eBPF tc работать одновременно на нескольких п…
09 апр '18 в 15:22